mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
function getSearchTermFromLocation() {
 | 
						|
  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] == 'q') {
 | 
						|
      return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20'));
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function joinUrl (base, path) {
 | 
						|
  if (path.substring(0, 1) === "/") {
 | 
						|
    // path starts with `/`. Thus it is absolute.
 | 
						|
    return path;
 | 
						|
  }
 | 
						|
  if (base.substring(base.length-1) === "/") {
 | 
						|
    // base ends with `/`
 | 
						|
    return base + path;
 | 
						|
  }
 | 
						|
  return base + "/" + path;
 | 
						|
}
 | 
						|
 | 
						|
function escapeHtml (value) {
 | 
						|
  return value.replace(/&/g, '&')
 | 
						|
    .replace(/"/g, '"')
 | 
						|
    .replace(/</g, '<')
 | 
						|
    .replace(/>/g, '>');
 | 
						|
}
 | 
						|
 | 
						|
function formatResult (location, title, summary) {
 | 
						|
  return '<article><h3><a href="' + joinUrl(base_url, location) + '">'+ escapeHtml(title) + '</a></h3><p>' + escapeHtml(summary) +'</p></article>';
 | 
						|
}
 | 
						|
 | 
						|
function displayResults (results) {
 | 
						|
  var search_results = document.getElementById("mkdocs-search-results");
 | 
						|
  while (search_results.firstChild) {
 | 
						|
    search_results.removeChild(search_results.firstChild);
 | 
						|
  }
 | 
						|
  if (results.length > 0){
 | 
						|
    for (var i=0; i < results.length; i++){
 | 
						|
      var result = results[i];
 | 
						|
      var html = formatResult(result.location, result.title, result.summary);
 | 
						|
      search_results.insertAdjacentHTML('beforeend', html);
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    var noResultsText = search_results.getAttribute('data-no-results-text');
 | 
						|
    if (!noResultsText) {
 | 
						|
      noResultsText = "No results found";
 | 
						|
    }
 | 
						|
    search_results.insertAdjacentHTML('beforeend', '<p>' + noResultsText + '</p>');
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function doSearch () {
 | 
						|
  var query = document.getElementById('mkdocs-search-query').value;
 | 
						|
  if (query.length > min_search_length) {
 | 
						|
    if (!window.Worker) {
 | 
						|
      displayResults(search(query));
 | 
						|
    } else {
 | 
						|
      searchWorker.postMessage({query: query});
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    // Clear results for short queries
 | 
						|
    displayResults([]);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function initSearch () {
 | 
						|
  var search_input = document.getElementById('mkdocs-search-query');
 | 
						|
  if (search_input) {
 | 
						|
    search_input.addEventListener("keyup", doSearch);
 | 
						|
  }
 | 
						|
  var term = getSearchTermFromLocation();
 | 
						|
  if (term) {
 | 
						|
    search_input.value = term;
 | 
						|
    doSearch();
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function onWorkerMessage (e) {
 | 
						|
  if (e.data.allowSearch) {
 | 
						|
    initSearch();
 | 
						|
  } else if (e.data.results) {
 | 
						|
    var results = e.data.results;
 | 
						|
    displayResults(results);
 | 
						|
  } else if (e.data.config) {
 | 
						|
    min_search_length = e.data.config.min_search_length-1;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
if (!window.Worker) {
 | 
						|
  console.log('Web Worker API not supported');
 | 
						|
  // load index in main thread
 | 
						|
  $.getScript(joinUrl(base_url, "search/worker.js")).done(function () {
 | 
						|
    console.log('Loaded worker');
 | 
						|
    init();
 | 
						|
    window.postMessage = function (msg) {
 | 
						|
      onWorkerMessage({data: msg});
 | 
						|
    };
 | 
						|
  }).fail(function (jqxhr, settings, exception) {
 | 
						|
    console.error('Could not load worker.js');
 | 
						|
  });
 | 
						|
} else {
 | 
						|
  // Wrap search in a web worker
 | 
						|
  var searchWorker = new Worker(joinUrl(base_url, "search/worker.js"));
 | 
						|
  searchWorker.postMessage({init: true});
 | 
						|
  searchWorker.onmessage = onWorkerMessage;
 | 
						|
}
 |