[Docs] Search the docs. Needs styling and to be wired into the search box.
This commit is contained in:
parent
79c69c77a2
commit
b5439e0b25
@ -23,6 +23,10 @@ compile '/' do
|
||||
layout 'main'
|
||||
end
|
||||
|
||||
compile '/search-data/' do
|
||||
filter :erb
|
||||
end
|
||||
|
||||
compile '/examples/*/' do
|
||||
filter :haml, :ugly => true
|
||||
filter :highlight if ENV['SYNTAX']
|
||||
@ -54,6 +58,10 @@ compile '*' do
|
||||
layout item[:layout] || 'main'
|
||||
end
|
||||
|
||||
route '/search-data/' do
|
||||
"#{SITE_ROOT}/javascripts"+item.identifier[0..-2]+".js"
|
||||
end
|
||||
|
||||
(0..5).each do |i|
|
||||
route("/stylesheets/#{'*/' * i}_*/") {nil}
|
||||
end
|
||||
|
7
doc-src/content/search-data.js.erb
Normal file
7
doc-src/content/search-data.js.erb
Normal file
@ -0,0 +1,7 @@
|
||||
function search(term, callback) {
|
||||
var ids = index.terms[term] || index.approximate[term] || [];
|
||||
var items = $.map(ids, function(id){ return index.items[id]; });
|
||||
callback(items)
|
||||
}
|
||||
|
||||
var index = <%= search_index.to_json %>;
|
28
doc-src/content/search.haml
Normal file
28
doc-src/content/search.haml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Search | Compass Documentation
|
||||
crumb: Search
|
||||
body_id: search
|
||||
---
|
||||
- content_for(:javascripts) do
|
||||
%script(type="text/javascript" src="/docs/javascripts/search-data.js")
|
||||
:javascript
|
||||
$(function(){
|
||||
$('input').keypress(function(){
|
||||
search(this.value, displayResults);
|
||||
});
|
||||
})
|
||||
function displayResults(items) {
|
||||
if (items.length > 0) {
|
||||
var html = ""
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
html += '<li><a href="'+items[i].url+'">'+items[i].title+'</a></li>';
|
||||
}
|
||||
$('ol#results').html(html)
|
||||
} else {
|
||||
$('ol#results').html("<li class='none'>Nothing found.</li>");
|
||||
}
|
||||
}
|
||||
%input{:type => "text", :placeholder=>"Search"}
|
||||
|
||||
%ol#results
|
||||
%li.none Please enter a search term.
|
@ -41,4 +41,5 @@
|
||||
%footer(role="contentinfo")= render "partials/footer"
|
||||
%script(src="/docs/javascripts/jquery-1.3.2.min.js")
|
||||
%script(src="/docs/javascripts/fixups.js" deferred)
|
||||
= @item[:content_for_javascripts]
|
||||
= render "partials/analytics"
|
||||
|
74
doc-src/lib/search.rb
Normal file
74
doc-src/lib/search.rb
Normal file
@ -0,0 +1,74 @@
|
||||
require 'json'
|
||||
|
||||
STOP_WORDS = %w{
|
||||
a about above across after afterwards again against all almost
|
||||
alone along already also although always am among amongst amoungst
|
||||
amount an and another any anyhow anyone anything anyway anywhere
|
||||
are around as at back be became because become becomes becoming
|
||||
been before beforehand behind being below beside besides between
|
||||
beyond bill both bottom but by call can cannot cant co computer con
|
||||
could couldnt cry de describe detail do done down due during each
|
||||
eg eight either eleven else elsewhere empty enough etc even ever
|
||||
every everyone everything everywhere except few fifteen fify fill
|
||||
find fire first five for former formerly forty found four from
|
||||
front full further get give go had has hasnt have he hence her here
|
||||
hereafter hereby herein hereupon hers herself him himself his how
|
||||
however hundred i ie if in inc indeed interest into is it its
|
||||
itself keep last latter latterly least less ltd made many may me
|
||||
meanwhile might mill mine more moreover most mostly move much must
|
||||
my myself name namely neither never nevertheless next nine no
|
||||
nobody none noone nor not nothing now nowhere of off often on once
|
||||
one only onto or other others otherwise our ours ourselves out over
|
||||
own part per perhaps please put rather re same see seem seemed
|
||||
seeming seems serious several she should show side since sincere
|
||||
six sixty so some somehow someone something sometime sometimes
|
||||
somewhere still such system take ten than that the their them
|
||||
themselves then thence there thereafter thereby therefore therein
|
||||
thereupon these they thick thin third this those though three
|
||||
through throughout thru thus to together too top toward towards
|
||||
twelve twenty two un under until up upon us very via was we well
|
||||
were what whatever when whence whenever where whereafter whereas
|
||||
whereby wherein whereupon wherever whether which while whither who
|
||||
whoever whole whom whose why will with within without would yet you
|
||||
your yours yourself yourselves
|
||||
} unless defined?(STOP_WORDS)
|
||||
|
||||
def search_terms_for(item)
|
||||
if item.identifier =~ /^\/(reference|tutorials)/
|
||||
content = item.rep_named(:default).compiled_content
|
||||
doc = Nokogiri::HTML(content)
|
||||
full_text = doc.css("p, h1, h2, h3, h4, h5, h6").map{|el| el.inner_text}.join(" ")
|
||||
"#{item[:title]} #{item[:meta_description]} #{full_text}".gsub(/[\W\s]+/m,' ').downcase.split(/\s+/).uniq - STOP_WORDS
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
def search_index
|
||||
id = 0;
|
||||
idx = {
|
||||
"approximate" => {},
|
||||
"terms" => {},
|
||||
"items" => {}
|
||||
}
|
||||
@items.each do |item|
|
||||
search_terms_for(item).each do |term|
|
||||
idx["terms"][term] = []
|
||||
idx["terms"][term] << id
|
||||
(0...term.length).each do |c|
|
||||
subterm = term[0...c]
|
||||
idx["approximate"][subterm] ||= []
|
||||
unless idx["approximate"][subterm].include?(id)
|
||||
idx["approximate"][subterm] << id
|
||||
end
|
||||
end
|
||||
end
|
||||
idx["items"][id] = {
|
||||
"url" => item.identifier,
|
||||
"title" => item[:title],
|
||||
"crumb" => item[:crumb]
|
||||
}
|
||||
id += 1
|
||||
end
|
||||
idx
|
||||
end
|
Loading…
Reference in New Issue
Block a user