1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # Manage indexing of Nit model for Nitdoc QuickSearch.
19 import html_templates
::html_model
# FIXME maybe this phase should depend on `html_render`
20 private import json
::static
23 # Generate the index for then Nitdoc QuickSearch field.
25 # Create a JSON object containing links to:
29 # All entities are grouped by name to make the research easier.
31 # TODO Add a way to change the output and use it from Vim or whatever.
36 for mmodule
in doc
.mmodules
do
37 add_result_for
(mmodule
.name
, mmodule
.full_name
, mmodule
.nitdoc_url
)
39 for mclass
in doc
.mclasses
do
40 add_result_for
(mclass
.name
, mclass
.full_name
, mclass
.nitdoc_url
)
42 for mproperty
in doc
.mproperties
do
43 for mpropdef
in mproperty
.mpropdefs
do
44 if not doc
.mpropdefs
.has
(mpropdef
) then continue
45 var full_name
= mpropdef
.mclassdef
.mclass
.full_name
46 var cls_url
= mpropdef
.mclassdef
.mclass
.nitdoc_url
47 var def_url
= "{cls_url}#{mpropdef.nitdoc_id}.definition"
48 add_result_for
(mproperty
.name
, full_name
, def_url
)
51 # FIXME hack, generation should be done by the render phase
52 # create destination dir if it's necessary
53 var output_dir
= ctx
.output_dir
54 if not output_dir
.file_exists
then output_dir
.mkdir
56 render
.write_to_file
("{ctx.output_dir.to_s}/quicksearch-list.js")
59 private var table
= new QuickSearchTable
61 private fun add_result_for
(query
: String, txt
: String, url
: String) do
62 table
[query
].add
new QuickSearchResult(txt
, url
)
65 # Render the index content.
66 fun render
: Template do
67 var tpl
= new Template
68 var buffer
= new Buffer
70 buffer
.append
"var nitdocQuickSearchRawList="
71 buffer
.append table
.to_json
77 # The result map for QuickSearch.
78 private class QuickSearchTable
79 super JsonMapRead[String, QuickSearchResultList]
80 super HashMap[String, QuickSearchResultList]
82 redef fun provide_default_value
(key
) do
83 var v
= new QuickSearchResultList
90 # A QuickSearch result list.
91 private class QuickSearchResultList
92 super JsonSequenceRead[QuickSearchResult]
93 super Array[QuickSearchResult]
96 # A QuickSearch result.
97 private class QuickSearchResult
101 # The text of the link.
104 # The destination of the link.