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
22 # Generate the index for then Nitdoc QuickSearch field.
24 # Create a JSON object containing links to:
28 # All entities are grouped by name to make the research easier.
30 # TODO Add a way to change the output and use it from Vim or whatever.
35 for mmodule
in doc
.mmodules
do
36 add_result_for
(mmodule
.name
, mmodule
.full_name
, mmodule
.nitdoc_url
)
38 for mclass
in doc
.mclasses
do
39 add_result_for
(mclass
.name
, mclass
.full_name
, mclass
.nitdoc_url
)
41 for mproperty
in doc
.mproperties
do
42 for mpropdef
in mproperty
.mpropdefs
do
43 if not doc
.mpropdefs
.has
(mpropdef
) then continue
44 var full_name
= mpropdef
.mclassdef
.mclass
.full_name
45 var cls_url
= mpropdef
.mclassdef
.mclass
.nitdoc_url
46 var def_url
= "{cls_url}#article:{mpropdef.nitdoc_id}.definition"
47 add_result_for
(mproperty
.name
, full_name
, def_url
)
50 # FIXME hack, generation should be done by the render phase
51 # create destination dir if it's necessary
52 var output_dir
= ctx
.output_dir
53 if not output_dir
.file_exists
then output_dir
.mkdir
55 render
.write_to_file
("{ctx.output_dir.to_s}/quicksearch-list.js")
58 private var table
= new QuickSearchTable
60 private fun add_result_for
(query
: String, txt
: String, url
: String) do
61 table
[query
].add
new QuickSearchResult(txt
, url
)
64 # Render the index content.
65 fun render
: Template do
66 var tpl
= new Template
67 var buffer
= new RopeBuffer
69 buffer
.append
"var nitdocQuickSearchRawList="
70 table
.append_json buffer
76 # The result map for QuickSearch.
77 private class QuickSearchTable
78 super JsonMapRead[String, QuickSearchResultList]
79 super HashMap[String, QuickSearchResultList]
81 redef fun provide_default_value
(key
) do
82 var v
= new QuickSearchResultList
89 # A QuickSearch result list.
90 private class QuickSearchResultList
91 super JsonSequenceRead[QuickSearchResult]
92 super Array[QuickSearchResult]
95 # A QuickSearch result.
96 private class QuickSearchResult
99 # The text of the link.
102 # The destination of the link.
106 return "\{\"txt\":{txt.to_json},\"url\
":{url.to_json}\}"