Revision 5266
Added by Matt Jones almost 15 years ago
docs/dev/metacat/source/plantuml.conf | ||
---|---|---|
1 |
skinparam activityFontColor black |
|
2 |
skinparam activityFontSize 10 |
|
3 |
skinparam activityFontName arial |
|
4 |
skinparam activityArrowFontColor black |
|
5 |
skinparam activityArrowFontSize 10 |
|
6 |
skinparam activityArrowFontName arial |
|
7 |
skinparam classArrowFontColor black |
|
8 |
skinparam classArrowFontSize 10 |
|
9 |
skinparam classArrowFontName arial |
|
10 |
skinparam classAttributeFontColor black |
|
11 |
skinparam classAttributeFontSize 10 |
|
12 |
skinparam classAttributeFontName arial |
|
13 |
skinparam classFontColor black |
|
14 |
skinparam classFontSize 10 |
|
15 |
skinparam classFontName arial |
|
16 |
skinparam componentFontColor black |
|
17 |
skinparam componentFontSize 10 |
|
18 |
skinparam componentFontName arial |
|
19 |
skinparam componentArrowFontColor black |
|
20 |
skinparam componentArrowFontSize 10 |
|
21 |
skinparam componentArrowFontName arial |
|
22 |
skinparam noteFontColor black |
|
23 |
skinparam noteFontSize 10 |
|
24 |
skinparam noteFontName arial |
|
25 |
skinparam packageFontColor black |
|
26 |
skinparam packageFontSize 10 |
|
27 |
skinparam packageFontName arial |
|
28 |
skinparam sequenceActorFontColor black |
|
29 |
skinparam sequenceActorFontSize 10 |
|
30 |
skinparam sequenceActorFontName arial |
|
31 |
skinparam sequenceArrowFontColor black |
|
32 |
skinparam sequenceArrowFontSize 10 |
|
33 |
skinparam sequenceArrowFontName arial |
|
34 |
skinparam sequenceGroupingFontColor black |
|
35 |
skinparam sequenceGroupingFontSize 10 |
|
36 |
skinparam sequenceGroupingFontName arial |
|
37 |
skinparam sequenceGroupingHeaderFontColor black |
|
38 |
skinparam sequenceGroupingHeaderFontSize 10 |
|
39 |
skinparam sequenceGroupingHeaderFontName arial |
|
40 |
skinparam sequenceParticipantFontColor black |
|
41 |
skinparam sequenceParticipantFontSize 10 |
|
42 |
skinparam sequenceParticipantFontName arial |
|
43 |
skinparam sequenceTitleFontColor black |
|
44 |
skinparam sequenceTitleFontSize 10 |
|
45 |
skinparam sequenceTitleFontName arial |
|
46 |
skinparam titleFontColor black |
|
47 |
skinparam titleFontSize 10 |
|
48 |
skinparam titleFontName arial |
|
49 |
skinparam usecaseFontColor black |
|
50 |
skinparam usecaseFontSize 10 |
|
51 |
skinparam usecaseFontName arial |
|
52 |
skinparam usecaseActorFontColor black |
|
53 |
skinparam usecaseActorFontSize 10 |
|
54 |
skinparam usecaseActorFontName arial |
|
55 |
skinparam usecaseArrowFontColor black |
|
56 |
skinparam usecaseArrowFontSize 10 |
|
57 |
skinparam usecaseArrowFontName arial |
docs/dev/metacat/source/identifiers.txt | ||
---|---|---|
1 |
.. raw:: latex |
|
2 |
|
|
3 |
\newpage |
|
4 |
|
|
5 |
|
|
6 |
Identifier Management |
|
7 |
--------------------- |
|
8 |
|
|
9 |
.. index:: Identifiers |
|
10 |
|
|
11 |
Author |
|
12 |
Matthew B. Jones |
|
13 |
|
|
14 |
Date |
|
15 |
- 20100301 [MBJ] Initial draft of Identifier documentation |
|
16 |
|
|
17 |
Version |
|
18 |
1.9.2 |
|
19 |
|
|
20 |
Goal |
|
21 |
Extend Metacat to support identifiers with arbitrary syntax |
|
22 |
|
|
23 |
Summary |
|
24 |
Metacat currently supports identifier strings called 'docids' that have |
|
25 |
the syntax 'scope.object.revision', such as 'foo.34.1' (we will refer to |
|
26 |
these as 'LocalIDs'). We now want Metacat to support identifiers that are |
|
27 |
arbitrary strings, but still enforce uniqueness and proper revision |
|
28 |
handling (referred to these as GUIDs). Metacat must be able to accept |
|
29 |
these strings as identifiers for all CRUD operations, and reference them |
|
30 |
in search results. |
|
31 |
|
|
32 |
Identifier Resolution |
|
33 |
===================== |
|
34 |
Because Metacat uses LocalIDs throughout the code for references to objects, |
|
35 |
and that LocalID has a constrained structure that includes semantics about |
|
36 |
revisions in the identifier, it is difficult to wholesale replace it with |
|
37 |
less-constrained string identifiers without re-writing much of Metacat. |
|
38 |
Thus, our alternate strategy would is to wrap the Metacat APIs with a |
|
39 |
identifier resolution layer that keeps track of the unconstrained GUIDs and |
|
40 |
maps them to constrained local identifiers which are used internally within |
|
41 |
Metacat. The basic identifer table model is shown in Figure 1, while the |
|
42 |
basic strategy for retrieving an object is shown in Figure 2. |
|
43 |
|
|
44 |
|
|
45 |
Identifier Table Structure |
|
46 |
~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
47 |
|
|
48 |
.. figure:: images/identifiers.png |
|
49 |
|
|
50 |
Figure 1. Table structure for identifiers. |
|
51 |
|
|
52 |
.. |
|
53 |
This block defines the table structure diagram referenced above. |
|
54 |
@startuml images/identifiers.png |
|
55 |
|
|
56 |
identifiers "*" -- "1" xml_documents |
|
57 |
|
|
58 |
identifiers : String identifier |
|
59 |
identifiers : String docid |
|
60 |
identifiers : Integer rev |
|
61 |
|
|
62 |
xml_documents : String docid |
|
63 |
xml_documents : String rev |
|
64 |
|
|
65 |
note right of identifiers |
|
66 |
"identifiers.(docid,rev) is a foreign key into xml_documents" |
|
67 |
end note |
|
68 |
@enduml |
|
69 |
|
|
70 |
.. raw:: latex |
|
71 |
|
|
72 |
\newpage |
|
73 |
|
|
74 |
.. raw:: pdf |
|
75 |
|
|
76 |
PageBreak |
|
77 |
|
|
78 |
|
|
79 |
Handling document read operations |
|
80 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
81 |
|
|
82 |
An overview of the process needed to read an object using a GUID. |
|
83 |
|
|
84 |
|
|
85 |
.. figure:: images/guid_read.png |
|
86 |
|
|
87 |
Figure 2. Basic handling for string identifiers (GUIDs) as mapped to |
|
88 |
docids (LocalIDs) to retrieve an object. |
|
89 |
|
|
90 |
.. |
|
91 |
@startuml images/guid_read.png |
|
92 |
!include plantuml.conf |
|
93 |
actor User |
|
94 |
participant "Client" as app_client << Application >> |
|
95 |
participant "CRUD API" as c_crud << MetacatRestServlet >> |
|
96 |
participant "Identifier Manager" as ident_man << IdentifierManager >> |
|
97 |
participant "Handler" as handler << MetacatHandler >> |
|
98 |
User -> app_client |
|
99 |
app_client -> c_crud: get(token, GUID) |
|
100 |
c_crud -> ident_man: getLocalID(GUID) |
|
101 |
c_crud <-- ident_man: localID |
|
102 |
c_crud -> handler: handleReadAction(localID) |
|
103 |
c_crud <-- handler: object |
|
104 |
c_crud --> app_client: object |
|
105 |
|
|
106 |
@enduml |
|
107 |
|
|
108 |
Handling document create operations |
|
109 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
110 |
|
|
111 |
An overview of the process needed to create an object using a GUID. |
|
112 |
|
|
113 |
.. figure:: images/guid_insert.png |
|
114 |
|
|
115 |
Figure 3. Basic handling for string identifiers (GUIDs) as mapped to |
|
116 |
docids (LocalIDs) to create an object. |
|
117 |
|
|
118 |
.. |
|
119 |
@startuml images/guid_insert.png |
|
120 |
!include plantuml.conf |
|
121 |
actor User |
|
122 |
participant "Client" as app_client << Application >> |
|
123 |
participant "CRUD API" as c_crud << MetacatRestServlet >> |
|
124 |
participant "Identifier Manager" as ident_man << IdentifierManager >> |
|
125 |
participant "Handler" as handler << MetacatHandler >> |
|
126 |
User -> app_client |
|
127 |
app_client -> c_crud: create(token, GUID, object, sysmeta) |
|
128 |
c_crud -> ident_man: identifierExists(GUID) |
|
129 |
c_crud <-- ident_man: T or F |
|
130 |
alt identifierExists == "F" |
|
131 |
c_crud -> ident_man: mapToLocalId(GUID) |
|
132 |
c_crud <-- ident_man: localID |
|
133 |
c_crud -> handler: handleInsertAction(localID) |
|
134 |
c_crud <-- handler: success |
|
135 |
note right of c_crud |
|
136 |
"Also need to address how to handle the sysmeta information wrt insertion methods" |
|
137 |
end note |
|
138 |
app_client <-- c_crud: success |
|
139 |
else identifierExists == "T" |
|
140 |
app_client <-- c_crud: IdentifierNotUnique |
|
141 |
end |
|
142 |
@enduml |
|
143 |
|
|
144 |
Handling document update operations |
|
145 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
146 |
|
|
147 |
An overview of the process needed to update an object using a GUID. |
|
148 |
|
|
149 |
.. figure:: images/guid_update.png |
|
150 |
|
|
151 |
Figure 4. Basic handling for string identifiers (GUIDs) as mapped to |
|
152 |
docids (LocalIDs) to update an object. |
|
153 |
|
|
154 |
.. |
|
155 |
@startuml images/guid_update.png |
|
156 |
!include plantuml.conf |
|
157 |
actor User |
|
158 |
participant "Client" as app_client << Application >> |
|
159 |
participant "CRUD API" as c_crud << MetacatRestServlet >> |
|
160 |
participant "Identifier Manager" as ident_man << IdentifierManager >> |
|
161 |
participant "Handler" as handler << MetacatHandler >> |
|
162 |
User -> app_client |
|
163 |
app_client -> c_crud: update(token, GUID, object, obsoletedGUID, sysmeta) |
|
164 |
|
|
165 |
c_crud -> ident_man: identifierExists(obsoletedGUID) |
|
166 |
c_crud <-- ident_man: T or F |
|
167 |
alt identifierExists == "T" |
|
168 |
|
|
169 |
c_crud -> ident_man: identifierExists(GUID) |
|
170 |
c_crud <-- ident_man: T or F |
|
171 |
alt identifierExists == "F" |
|
172 |
c_crud -> ident_man: mapToLocalId(GUID, obsoletedGUID) |
|
173 |
c_crud <-- ident_man: localID |
|
174 |
c_crud -> handler: handleUpdateAction(localID) |
|
175 |
c_crud <-- handler: success |
|
176 |
note right of c_crud |
|
177 |
"Also need to address how to handle the sysmeta information wrt update methods" |
|
178 |
end note |
|
179 |
app_client <-- c_crud: success |
|
180 |
else identifierExists == "T" |
|
181 |
app_client <-- c_crud: IdentifierNotUnique |
|
182 |
end |
|
183 |
else identifierExists == "F" |
|
184 |
app_client <-- c_crud: NotFound |
|
185 |
end |
|
186 |
@enduml |
|
187 |
|
|
188 |
Handling document delete operations |
|
189 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
190 |
|
|
191 |
An overview of the process needed to delete an object using a GUID. |
|
192 |
|
|
193 |
.. figure:: images/guid_delete.png |
|
194 |
|
|
195 |
Figure 5. Basic handling for string identifiers (GUIDs) as mapped to |
|
196 |
docids (LocalIDs) to delete an object. |
|
197 |
|
|
198 |
.. |
|
199 |
@startuml images/guid_delete.png |
|
200 |
!include plantuml.conf |
|
201 |
actor User |
|
202 |
participant "Client" as app_client << Application >> |
|
203 |
participant "CRUD API" as c_crud << MetacatRestServlet >> |
|
204 |
participant "Identifier Manager" as ident_man << IdentifierManager >> |
|
205 |
participant "Handler" as handler << MetacatHandler >> |
|
206 |
User -> app_client |
|
207 |
app_client -> c_crud: delete(token, GUID) |
|
208 |
c_crud -> ident_man: identifierExists(GUID) |
|
209 |
c_crud <-- ident_man: T or F |
|
210 |
alt identifierExists == "T" |
|
211 |
c_crud -> ident_man: mapToLocalId(GUID) |
|
212 |
c_crud <-- ident_man: localID |
|
213 |
c_crud -> handler: handleDeleteAction(localID) |
|
214 |
c_crud <-- handler: success |
|
215 |
app_client <-- c_crud: success |
|
216 |
else identifierExists == "F" |
|
217 |
app_client <-- c_crud: NotFound |
|
218 |
end |
|
219 |
@enduml |
|
220 |
|
|
221 |
.. |
|
222 |
This block defines the interaction diagram referenced above. |
|
223 |
startuml images/01_interaction.png |
|
224 |
!include plantuml.conf |
|
225 |
actor User |
|
226 |
participant "Client" as app_client << Application >> |
|
227 |
User -> app_client |
|
228 |
|
|
229 |
participant "CRUD API" as c_crud << Coordinating Node >> |
|
230 |
activate c_crud |
|
231 |
app_client -> c_crud: resolve(GUID, auth_token) |
|
232 |
participant "Authorization API" as c_authorize << Coordinating Node >> |
|
233 |
c_crud -> c_authorize: isAuth(auth_token, GUID) |
|
234 |
participant "Verify API" as c_ver << Coordinating Node >> |
|
235 |
c_authorize -> c_ver: isValidToken (token) |
|
236 |
c_authorize <-- c_ver: T or F |
|
237 |
c_crud <-- c_authorize: T or F |
|
238 |
app_client <-- c_crud: handle_list |
|
239 |
deactivate c_crud |
|
240 |
|
|
241 |
participant "CRUD API" as m_crud << Member Node >> |
|
242 |
activate m_crud |
|
243 |
app_client -> m_crud: get(auth_token, handle) |
|
244 |
participant "Server Authentication API" as m_authenticate << Member Node >> |
|
245 |
m_crud -> m_authenticate: isAuth(auth_token, GUID) |
|
246 |
m_crud <-- m_authenticate: T or F |
|
247 |
m_crud -> m_crud: log(get, UserID, GUID) |
|
248 |
app_client <-- m_crud: object or unauth or doesNotExist |
|
249 |
deactivate m_crud |
|
250 |
enduml |
|
0 | 251 |
docs/dev/metacat/source/index.txt | ||
---|---|---|
1 |
.. Metacat documentation master file, created by |
|
2 |
sphinx-quickstart on Mon Mar 1 14:16:16 2010. |
|
3 |
You can adapt this file completely to your liking, but it should at least |
|
4 |
contain the root `toctree` directive. |
|
5 |
|
|
6 |
Welcome to Metacat's documentation! |
|
7 |
=================================== |
|
8 |
|
|
9 |
Contents: |
|
10 |
|
|
11 |
.. toctree:: |
|
12 |
:maxdepth: 2 |
|
13 |
|
|
14 |
identifiers.txt |
|
15 |
|
|
16 |
Indices and tables |
|
17 |
================== |
|
18 |
|
|
19 |
* :ref:`genindex` |
|
20 |
* :ref:`modindex` |
|
21 |
* :ref:`search` |
|
22 |
|
|
0 | 23 |
docs/dev/metacat/source/themes/readable/layout.html | ||
---|---|---|
1 |
{%- block doctype -%} |
|
2 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
|
3 |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
|
4 |
{%- endblock %} |
|
5 |
{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %} |
|
6 |
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %} |
|
7 |
|
|
8 |
{%- macro relbar() %} |
|
9 |
<div class="related"> |
|
10 |
<h3>{{ _('Navigation') }}</h3> |
|
11 |
<ul> |
|
12 |
|
|
13 |
{%- if pagename != "search" %} |
|
14 |
<li class="right"> |
|
15 |
<span id="searchbox" style="display: none; margin-right: 10px"> |
|
16 |
<form class="search" action="{{ pathto('search') }}" method="get"> |
|
17 |
<input type="text" name="q" size="18" /> |
|
18 |
<input type="submit" value="{{ _('Go') }}" /> |
|
19 |
<input type="hidden" name="check_keywords" value="yes" /> |
|
20 |
<input type="hidden" name="area" value="default" /> |
|
21 |
</form> |
|
22 |
</span> |
|
23 |
</li> |
|
24 |
<script type="text/javascript">$('#searchbox').show(0);</script> |
|
25 |
{%- endif %} |
|
26 |
|
|
27 |
|
|
28 |
{%- for rellink in rellinks %} |
|
29 |
<li class="right"> |
|
30 |
<a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags }}" |
|
31 |
{{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a> |
|
32 |
{{ reldelim2 }}</li> |
|
33 |
{%- endfor %} |
|
34 |
|
|
35 |
|
|
36 |
|
|
37 |
{%- block rootrellink %} |
|
38 |
<li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li> |
|
39 |
{%- endblock %} |
|
40 |
{%- for parent in parents %} |
|
41 |
<li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li> |
|
42 |
{%- endfor %} |
|
43 |
{%- block relbaritems %} {% endblock %} |
|
44 |
</ul> |
|
45 |
|
|
46 |
</div> |
|
47 |
{%- endmacro %} |
|
48 |
|
|
49 |
{%- macro sidebar() %} |
|
50 |
{%- if not embedded %}{% if not theme_nosidebar|tobool %} |
|
51 |
<div class="sphinxsidebar"> |
|
52 |
<div class="sphinxsidebarwrapper"> |
|
53 |
{%- block sidebarlogo %} |
|
54 |
{%- if logo %} |
|
55 |
<p class="logo"><a href="{{ pathto(master_doc) }}"> |
|
56 |
<img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/> |
|
57 |
</a></p> |
|
58 |
{%- endif %} |
|
59 |
{%- endblock %} |
|
60 |
{%- block sidebartoc %} |
|
61 |
{%- if display_toc %} |
|
62 |
<h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3> |
|
63 |
{{ toc }} |
|
64 |
{%- endif %} |
|
65 |
{%- endblock %} |
|
66 |
{%- block sidebarrel %} |
|
67 |
{%- if prev %} |
|
68 |
<h4>{{ _('Previous topic') }}</h4> |
|
69 |
<p class="topless"><a href="{{ prev.link|e }}" |
|
70 |
title="{{ _('previous chapter') }}">{{ prev.title }}</a></p> |
|
71 |
{%- endif %} |
|
72 |
{%- if next %} |
|
73 |
<h4>{{ _('Next topic') }}</h4> |
|
74 |
<p class="topless"><a href="{{ next.link|e }}" |
|
75 |
title="{{ _('next chapter') }}">{{ next.title }}</a></p> |
|
76 |
{%- endif %} |
|
77 |
{%- endblock %} |
|
78 |
{%- block sidebarsourcelink %} |
|
79 |
{%- if show_source and has_source and sourcename %} |
|
80 |
<h3>{{ _('This Page') }}</h3> |
|
81 |
<ul class="this-page-menu"> |
|
82 |
<li><a href="{{ pathto('_sources/' + sourcename, true)|e }}" |
|
83 |
rel="nofollow">{{ _('Show Source') }}</a></li> |
|
84 |
</ul> |
|
85 |
{%- endif %} |
|
86 |
{%- endblock %} |
|
87 |
{%- if customsidebar %} |
|
88 |
{% include customsidebar %} |
|
89 |
{%- endif %} |
|
90 |
{%- block sidebarsearch %} |
|
91 |
{%- if pagename != "search" %} |
|
92 |
<div id="searchbox" style="display: none"> |
|
93 |
<h3>{{ _('Quick search') }}</h3> |
|
94 |
<form class="search" action="{{ pathto('search') }}" method="get"> |
|
95 |
<input type="text" name="q" size="18" /> |
|
96 |
<input type="submit" value="{{ _('Go') }}" /> |
|
97 |
<input type="hidden" name="check_keywords" value="yes" /> |
|
98 |
<input type="hidden" name="area" value="default" /> |
|
99 |
</form> |
|
100 |
<p class="searchtip" style="font-size: 90%"> |
|
101 |
{{ _('Enter search terms or a module, class or function name.') }} |
|
102 |
</p> |
|
103 |
</div> |
|
104 |
<script type="text/javascript">$('#searchbox').show(0);</script> |
|
105 |
{%- endif %} |
|
106 |
{%- endblock %} |
|
107 |
</div> |
|
108 |
</div> |
|
109 |
{%- endif %}{% endif %} |
|
110 |
{%- endmacro %} |
|
111 |
|
|
112 |
<html xmlns="http://www.w3.org/1999/xhtml"> |
|
113 |
<head> |
|
114 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
|
115 |
{{ metatags }} |
|
116 |
{%- if not embedded %} |
|
117 |
{%- set titlesuffix = " — "|safe + docstitle|e %} |
|
118 |
{%- else %} |
|
119 |
{%- set titlesuffix = "" %} |
|
120 |
{%- endif %} |
|
121 |
<title>{{ title|striptags }}{{ titlesuffix }}</title> |
|
122 |
<link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" /> |
|
123 |
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" /> |
|
124 |
{%- if not embedded %} |
|
125 |
<script type="text/javascript"> |
|
126 |
var DOCUMENTATION_OPTIONS = { |
|
127 |
URL_ROOT: '{{ pathto("", 1) }}', |
|
128 |
VERSION: '{{ release|e }}', |
|
129 |
COLLAPSE_MODINDEX: false, |
|
130 |
FILE_SUFFIX: '{{ file_suffix }}', |
|
131 |
HAS_SOURCE: {{ has_source|lower }} |
|
132 |
}; |
|
133 |
</script> |
|
134 |
{%- for scriptfile in script_files %} |
|
135 |
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script> |
|
136 |
{%- endfor %} |
|
137 |
{%- if use_opensearch %} |
|
138 |
<link rel="search" type="application/opensearchdescription+xml" |
|
139 |
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}" |
|
140 |
href="{{ pathto('_static/opensearch.xml', 1) }}"/> |
|
141 |
{%- endif %} |
|
142 |
{%- if favicon %} |
|
143 |
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/> |
|
144 |
{%- endif %} |
|
145 |
{%- endif %} |
|
146 |
{%- block linktags %} |
|
147 |
{%- if hasdoc('about') %} |
|
148 |
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" /> |
|
149 |
{%- endif %} |
|
150 |
{%- if hasdoc('genindex') %} |
|
151 |
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" /> |
|
152 |
{%- endif %} |
|
153 |
{%- if hasdoc('search') %} |
|
154 |
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" /> |
|
155 |
{%- endif %} |
|
156 |
{%- if hasdoc('copyright') %} |
|
157 |
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" /> |
|
158 |
{%- endif %} |
|
159 |
<link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" /> |
|
160 |
{%- if parents %} |
|
161 |
<link rel="up" title="{{ parents[-1].title|striptags }}" href="{{ parents[-1].link|e }}" /> |
|
162 |
{%- endif %} |
|
163 |
{%- if next %} |
|
164 |
<link rel="next" title="{{ next.title|striptags }}" href="{{ next.link|e }}" /> |
|
165 |
{%- endif %} |
|
166 |
{%- if prev %} |
|
167 |
<link rel="prev" title="{{ prev.title|striptags }}" href="{{ prev.link|e }}" /> |
|
168 |
{%- endif %} |
|
169 |
{%- endblock %} |
|
170 |
{%- block extrahead %} {% endblock %} |
|
171 |
</head> |
|
172 |
<body> |
|
173 |
{%- block header %}{% endblock %} |
|
174 |
|
|
175 |
{%- block relbar1 %}{{ relbar() }}{% endblock %} |
|
176 |
|
|
177 |
{# Comment out the sidebar |
|
178 |
{%- block sidebar1 %} {# possible location for sidebar {% endblock %} |
|
179 |
#} |
|
180 |
<div class="document"> |
|
181 |
{%- block document %} |
|
182 |
<div class="documentwrapper"> |
|
183 |
{%- if not embedded %}{% if not theme_nosidebar|tobool %} |
|
184 |
<div class="bodywrapper"> |
|
185 |
{%- endif %}{% endif %} |
|
186 |
<div class="body"> |
|
187 |
{% block body %} {% endblock %} |
|
188 |
</div> |
|
189 |
{%- if not embedded %}{% if not theme_nosidebar|tobool %} |
|
190 |
</div> |
|
191 |
{%- endif %}{% endif %} |
|
192 |
</div> |
|
193 |
{%- endblock %} |
|
194 |
|
|
195 |
{# {%- block sidebar2 %}{{ sidebar() }}{% endblock %} #} |
|
196 |
<div class="clearer"></div> |
|
197 |
</div> |
|
198 |
|
|
199 |
{%- block relbar2 %}{{ relbar() }}{% endblock %} |
|
200 |
|
|
201 |
{%- block footer %} |
|
202 |
<div class="footer"> |
|
203 |
{%- if hasdoc('copyright') %} |
|
204 |
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %} |
|
205 |
{%- else %} |
|
206 |
{% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} |
|
207 |
{%- endif %} |
|
208 |
{%- if last_updated %} |
|
209 |
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %} |
|
210 |
{%- endif %} |
|
211 |
{%- if show_sphinx %} |
|
212 |
{% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %} |
|
213 |
{%- endif %} |
|
214 |
</div> |
|
215 |
{%- endblock %} |
|
216 |
</body> |
|
217 |
</html> |
docs/dev/metacat/source/themes/readable/theme.conf | ||
---|---|---|
1 |
[theme] |
|
2 |
inherit = sphinxdoc |
|
3 |
stylesheet = readable.css |
|
4 |
pygments_style = sphinx |
|
5 |
|
|
6 |
[options] |
|
7 |
bgcolor = #FFFFFF |
docs/dev/metacat/source/themes/readable/static/readable.css | ||
---|---|---|
1 |
/** |
|
2 |
* Sphinx theme based on sphinxdoc and arc90 readability.css |
|
3 |
* Dave Vieglais |
|
4 |
*/ |
|
5 |
|
|
6 |
body { |
|
7 |
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif; |
|
8 |
/*font-family:"Palatino Linotype", "Book Antiqua", Palatino, serif;*/ |
|
9 |
font-size: 14px; |
|
10 |
letter-spacing: -0.01em; |
|
11 |
line-height: 150%; |
|
12 |
text-align: center; |
|
13 |
/*background-color: #BFD1D4;*/ |
|
14 |
/*background: #F4F3DB;*/ |
|
15 |
background: white; |
|
16 |
color: black; |
|
17 |
/*color: #222;*/ |
|
18 |
padding: 0; |
|
19 |
/*border: 1px solid #aaa;*/ |
|
20 |
|
|
21 |
margin: 0px 80px 0px 80px; |
|
22 |
min-width: 740px; |
|
23 |
} |
|
24 |
|
|
25 |
a { |
|
26 |
/*color: #CA7900;*/ |
|
27 |
color: #003399; |
|
28 |
text-decoration: none; |
|
29 |
} |
|
30 |
|
|
31 |
a:hover { |
|
32 |
/*color: #2491CF;*/ |
|
33 |
text-decoration:underline; |
|
34 |
} |
|
35 |
|
|
36 |
pre { |
|
37 |
font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; |
|
38 |
font-size: 0.95em; |
|
39 |
letter-spacing: 0.015em; |
|
40 |
padding: 0.5em; |
|
41 |
border: 1px solid #ccc; |
|
42 |
background-color: #f8f8f8; |
|
43 |
} |
|
44 |
|
|
45 |
td.linenos pre { |
|
46 |
padding: 0.5em 0; |
|
47 |
border: 0; |
|
48 |
background-color: transparent; |
|
49 |
color: #aaa; |
|
50 |
} |
|
51 |
|
|
52 |
table.highlighttable { |
|
53 |
margin-left: 0.5em; |
|
54 |
} |
|
55 |
|
|
56 |
table.highlighttable td { |
|
57 |
padding: 0 0.5em 0 0.5em; |
|
58 |
} |
|
59 |
|
|
60 |
cite, code, tt { |
|
61 |
font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; |
|
62 |
font-size: 0.95em; |
|
63 |
letter-spacing: 0.01em; |
|
64 |
} |
|
65 |
|
|
66 |
hr { |
|
67 |
border: 1px solid #abc; |
|
68 |
margin: 2em; |
|
69 |
} |
|
70 |
|
|
71 |
tt { |
|
72 |
background-color: #f2f2f2; |
|
73 |
border-bottom: 1px solid #ddd; |
|
74 |
color: #333; |
|
75 |
} |
|
76 |
|
|
77 |
tt.descname { |
|
78 |
background-color: transparent; |
|
79 |
font-weight: bold; |
|
80 |
font-size: 1.2em; |
|
81 |
border: 0; |
|
82 |
} |
|
83 |
|
|
84 |
tt.descclassname { |
|
85 |
background-color: transparent; |
|
86 |
border: 0; |
|
87 |
} |
|
88 |
|
|
89 |
tt.xref { |
|
90 |
background-color: transparent; |
|
91 |
font-weight: bold; |
|
92 |
border: 0; |
|
93 |
} |
|
94 |
|
|
95 |
a tt { |
|
96 |
background-color: transparent; |
|
97 |
font-weight: bold; |
|
98 |
border: 0; |
|
99 |
/*color: #CA7900;*/ |
|
100 |
color: inherit; |
|
101 |
} |
|
102 |
|
|
103 |
/*a tt:hover { |
|
104 |
color: #2491CF; |
|
105 |
}*/ |
|
106 |
|
|
107 |
.field-list ul { |
|
108 |
margin: 0; |
|
109 |
padding-left: 1em; |
|
110 |
} |
|
111 |
|
|
112 |
.field-list p { |
|
113 |
margin: 0; |
|
114 |
} |
|
115 |
|
|
116 |
dl { |
|
117 |
margin-bottom: 15px; |
|
118 |
} |
|
119 |
|
|
120 |
dd p { |
|
121 |
margin-top: 0px; |
|
122 |
} |
|
123 |
|
|
124 |
dd ul, dd table { |
|
125 |
margin-bottom: 10px; |
|
126 |
} |
|
127 |
|
|
128 |
dd { |
|
129 |
margin-top: 3px; |
|
130 |
margin-bottom: 10px; |
|
131 |
margin-left: 30px; |
|
132 |
} |
|
133 |
|
|
134 |
.refcount { |
|
135 |
color: #060; |
|
136 |
} |
|
137 |
|
|
138 |
dt:target, |
|
139 |
.highlight { |
|
140 |
background-color: #fbe54e; |
|
141 |
} |
|
142 |
|
|
143 |
dl.glossary dt { |
|
144 |
font-weight: bold; |
|
145 |
font-size: 1.1em; |
|
146 |
} |
|
147 |
|
|
148 |
pre { |
|
149 |
line-height: 120%; |
|
150 |
} |
|
151 |
|
|
152 |
pre a { |
|
153 |
color: inherit; |
|
154 |
/*text-decoration: underline;*/ |
|
155 |
} |
|
156 |
|
|
157 |
.first { |
|
158 |
margin-top: 0 !important; |
|
159 |
} |
|
160 |
|
|
161 |
div.document { |
|
162 |
background-color: white; |
|
163 |
text-align: left; |
|
164 |
background-image: url(contents.png); |
|
165 |
background-repeat: repeat-x; |
|
166 |
} |
|
167 |
|
|
168 |
/* |
|
169 |
div.documentwrapper { |
|
170 |
width: 100%; |
|
171 |
} |
|
172 |
*/ |
|
173 |
|
|
174 |
div.clearer { |
|
175 |
clear: both; |
|
176 |
} |
|
177 |
|
|
178 |
div.related h3 { |
|
179 |
display: none; |
|
180 |
} |
|
181 |
|
|
182 |
div.related ul { |
|
183 |
background-image: url(navigation.png); |
|
184 |
height: 2em; |
|
185 |
list-style: none; |
|
186 |
border-top: 1px solid #ddd; |
|
187 |
border-bottom: 1px solid #ddd; |
|
188 |
margin: 0; |
|
189 |
padding-left: 10px; |
|
190 |
} |
|
191 |
|
|
192 |
div.related ul li { |
|
193 |
margin: 0; |
|
194 |
padding: 0; |
|
195 |
height: 2em; |
|
196 |
float: left; |
|
197 |
} |
|
198 |
|
|
199 |
div.related ul li.right { |
|
200 |
float: right; |
|
201 |
margin-right: 5px; |
|
202 |
} |
|
203 |
|
|
204 |
div.related ul li a { |
|
205 |
margin: 0; |
|
206 |
padding: 0 5px 0 5px; |
|
207 |
line-height: 1.75em; |
|
208 |
/*color: #EE9816;*/ |
|
209 |
color: #555; |
|
210 |
} |
|
211 |
|
|
212 |
div.related ul li a:hover { |
|
213 |
/*color: #3CA8E7;*/ |
|
214 |
} |
|
215 |
|
|
216 |
div.body { |
|
217 |
margin: 0; |
|
218 |
padding: 0.5em 20px 20px 20px; |
|
219 |
} |
|
220 |
|
|
221 |
div.bodywrapper { |
|
222 |
/*margin: 0 240px 0 0;*/ |
|
223 |
/*border-right: 1px solid #ccc;*/ |
|
224 |
} |
|
225 |
|
|
226 |
div.body a { |
|
227 |
/*text-decoration: underline;*/ |
|
228 |
text-decoration:inherit; |
|
229 |
} |
|
230 |
|
|
231 |
div.body a:hover { |
|
232 |
text-decoration: underline; |
|
233 |
} |
|
234 |
|
|
235 |
div.sphinxsidebar { |
|
236 |
margin: 0; |
|
237 |
padding: 0.5em 15px 15px 0; |
|
238 |
width: 210px; |
|
239 |
float: right; |
|
240 |
text-align: left; |
|
241 |
/* margin-left: -100%; */ |
|
242 |
} |
|
243 |
|
|
244 |
div.sphinxsidebarwrapper { |
|
245 |
position: fixed; |
|
246 |
width: 210px; |
|
247 |
} |
|
248 |
|
|
249 |
div.sphinxsidebar h4, div.sphinxsidebar h3 { |
|
250 |
font-size: 0.9em; |
|
251 |
/*margin: 1em 0 0.5em 0; |
|
252 |
padding: 0.1em 0 0.1em 0.5em; |
|
253 |
color: white; |
|
254 |
border: 1px solid #86989B; |
|
255 |
background-color: #AFC1C4; */ |
|
256 |
} |
|
257 |
|
|
258 |
div.sphinxsidebar h3 a { |
|
259 |
color: white; |
|
260 |
} |
|
261 |
|
|
262 |
div.sphinxsidebar a { |
|
263 |
color: #555; |
|
264 |
} |
|
265 |
|
|
266 |
div.sphinxsidebar ul { |
|
267 |
padding-left: 1.5em; |
|
268 |
margin-top: 7px; |
|
269 |
list-style: none; |
|
270 |
padding: 0; |
|
271 |
line-height: 130%; |
|
272 |
} |
|
273 |
|
|
274 |
div.sphinxsidebar ul ul { |
|
275 |
list-style: square; |
|
276 |
margin-left: 20px; |
|
277 |
} |
|
278 |
|
|
279 |
p { |
|
280 |
margin: 0.8em 0 0.5em 0; |
|
281 |
} |
|
282 |
|
|
283 |
p.rubric { |
|
284 |
font-weight: bold; |
|
285 |
} |
|
286 |
|
|
287 |
div.sidebar { |
|
288 |
margin: 0 0 0.5em 1em; |
|
289 |
border: 1px solid #ddb; |
|
290 |
padding: 7px 7px 0 7px; |
|
291 |
background-color: #ffe; |
|
292 |
width: 40%; |
|
293 |
float: right; |
|
294 |
} |
|
295 |
|
|
296 |
div.quotebar { |
|
297 |
background-color: #f8f8f8; |
|
298 |
max-width: 250px; |
|
299 |
float: right; |
|
300 |
padding: 2px 7px; |
|
301 |
border: 1px solid #ccc; |
|
302 |
} |
|
303 |
|
|
304 |
p.sidebar-title { |
|
305 |
font-weight: bold; |
|
306 |
} |
|
307 |
|
|
308 |
div.topic { |
|
309 |
background-color: #f8f8f8; |
|
310 |
border: 1px solid #ccc; |
|
311 |
padding: 7px 7px 0 7px; |
|
312 |
margin: 10px 0 10px 0; |
|
313 |
} |
|
314 |
|
|
315 |
p.topic-title { |
|
316 |
font-size: 1.1em; |
|
317 |
font-weight: bold; |
|
318 |
} |
|
319 |
|
|
320 |
h1 { |
|
321 |
margin: 0; |
|
322 |
padding: 0.7em 0 0.3em 0; |
|
323 |
/*font-size: 1.5em;*/ |
|
324 |
/*color: #11557C;*/ |
|
325 |
display: block; |
|
326 |
border-bottom: 1px solid #333; |
|
327 |
font-size: 1.4em; |
|
328 |
} |
|
329 |
|
|
330 |
h2 { |
|
331 |
margin: 1.3em 0 0.2em 0; |
|
332 |
font-size: 1.35em; |
|
333 |
padding: 0; |
|
334 |
} |
|
335 |
|
|
336 |
h3 { |
|
337 |
margin: 1em 0 -0.3em 0; |
|
338 |
font-size: 1.2em; |
|
339 |
} |
|
340 |
|
|
341 |
div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { |
|
342 |
color: black!important; |
|
343 |
} |
|
344 |
|
|
345 |
h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor { |
|
346 |
display: none; |
|
347 |
margin: 0 0 0 0.3em; |
|
348 |
padding: 0 0.2em 0 0.2em; |
|
349 |
color: #aaa!important; |
|
350 |
} |
|
351 |
|
|
352 |
h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, |
|
353 |
h5:hover a.anchor, h6:hover a.anchor { |
|
354 |
display: inline; |
|
355 |
} |
|
356 |
|
|
357 |
h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, |
|
358 |
h5 a.anchor:hover, h6 a.anchor:hover { |
|
359 |
color: #777; |
|
360 |
background-color: #eee; |
|
361 |
} |
|
362 |
|
|
363 |
table { |
|
364 |
border-collapse: collapse; |
|
365 |
margin: 0 -0.5em 0 -0.5em; |
|
366 |
} |
|
367 |
|
|
368 |
table td, table th { |
|
369 |
padding: 0.2em 0.5em 0.2em 0.5em; |
|
370 |
} |
|
371 |
|
|
372 |
div.footer { |
|
373 |
/*background-color: #E3EFF1;*/ |
|
374 |
color: #86989B; |
|
375 |
padding: 3px 8px 3px 0; |
|
376 |
clear: both; |
|
377 |
font-size: 0.8em; |
|
378 |
text-align: right; |
|
379 |
} |
|
380 |
|
|
381 |
div.footer a { |
|
382 |
color: #86989B; |
|
383 |
text-decoration: underline; |
|
384 |
} |
|
385 |
|
|
386 |
div.pagination { |
|
387 |
margin-top: 2em; |
|
388 |
padding-top: 0.5em; |
|
389 |
border-top: 1px solid black; |
|
390 |
text-align: center; |
|
391 |
} |
|
392 |
|
|
393 |
div.sphinxsidebar ul.toc { |
|
394 |
margin: 1em 0 1em 0; |
|
395 |
padding: 0 0 0 0.5em; |
|
396 |
list-style: none; |
|
397 |
} |
|
398 |
|
|
399 |
div.sphinxsidebar ul.toc li { |
|
400 |
margin: 0.5em 0 0.5em 0; |
|
401 |
font-size: 0.9em; |
|
402 |
line-height: 130%; |
|
403 |
} |
|
404 |
|
|
405 |
div.sphinxsidebar ul.toc li p { |
|
406 |
margin: 0; |
|
407 |
padding: 0; |
|
408 |
} |
|
409 |
|
|
410 |
div.sphinxsidebar ul.toc ul { |
|
411 |
margin: 0.2em 0 0.2em 0; |
|
412 |
padding: 0 0 0 1.8em; |
|
413 |
} |
|
414 |
|
|
415 |
div.sphinxsidebar ul.toc ul li { |
|
416 |
padding: 0; |
|
417 |
} |
|
418 |
|
|
419 |
div.admonition, div.warning { |
|
420 |
font-size: 0.9em; |
|
421 |
margin: 1em 0 0 0; |
|
422 |
border: 1px solid #86989B; |
|
423 |
background-color: #f7f7f7; |
|
424 |
} |
|
425 |
|
|
426 |
div.admonition p, div.warning p { |
|
427 |
margin: 0.5em 1em 0.5em 1em; |
|
428 |
padding: 0; |
|
429 |
} |
|
430 |
|
|
431 |
div.admonition pre, div.warning pre { |
|
432 |
margin: 0.4em 1em 0.4em 1em; |
|
433 |
} |
|
434 |
|
|
435 |
div.admonition p.admonition-title, |
|
436 |
div.warning p.admonition-title { |
|
437 |
margin: 0; |
|
438 |
padding: 0.1em 0 0.1em 0.5em; |
|
439 |
color: white; |
|
440 |
border-bottom: 1px solid #86989B; |
|
441 |
font-weight: bold; |
|
442 |
background-color: #AFC1C4; |
|
443 |
} |
|
444 |
|
|
445 |
div.warning { |
|
446 |
border: 1px solid #940000; |
|
447 |
} |
|
448 |
|
|
449 |
div.warning p.admonition-title { |
|
450 |
background-color: #CF0000; |
|
451 |
border-bottom-color: #940000; |
|
452 |
} |
|
453 |
|
|
454 |
div.admonition ul, div.admonition ol, |
|
455 |
div.warning ul, div.warning ol { |
|
456 |
margin: 0.1em 0.5em 0.5em 3em; |
|
457 |
padding: 0; |
|
458 |
} |
|
459 |
|
|
460 |
div.versioninfo { |
|
461 |
margin: 1em 0 0 0; |
|
462 |
border: 1px solid #ccc; |
|
463 |
background-color: #DDEAF0; |
|
464 |
padding: 8px; |
|
465 |
line-height: 1.3em; |
|
466 |
font-size: 0.9em; |
|
467 |
} |
|
468 |
|
|
469 |
|
|
470 |
a.headerlink { |
|
471 |
color: #c60f0f!important; |
|
472 |
font-size: 1em; |
|
473 |
margin-left: 6px; |
|
474 |
padding: 0 4px 0 4px; |
|
475 |
text-decoration: none!important; |
|
476 |
visibility: hidden; |
|
477 |
} |
|
478 |
|
|
479 |
h1:hover > a.headerlink, |
|
480 |
h2:hover > a.headerlink, |
|
481 |
h3:hover > a.headerlink, |
|
482 |
h4:hover > a.headerlink, |
|
483 |
h5:hover > a.headerlink, |
|
484 |
h6:hover > a.headerlink, |
|
485 |
dt:hover > a.headerlink { |
|
486 |
visibility: visible; |
|
487 |
} |
|
488 |
|
|
489 |
a.headerlink:hover { |
|
490 |
background-color: #ccc; |
|
491 |
color: white!important; |
|
492 |
} |
|
493 |
|
|
494 |
table.indextable td { |
|
495 |
text-align: left; |
|
496 |
vertical-align: top; |
|
497 |
} |
|
498 |
|
|
499 |
table.indextable dl, table.indextable dd { |
|
500 |
margin-top: 0; |
|
501 |
margin-bottom: 0; |
|
502 |
} |
|
503 |
|
|
504 |
table.indextable tr.pcap { |
|
505 |
height: 10px; |
|
506 |
} |
|
507 |
|
|
508 |
table.indextable tr.cap { |
|
509 |
margin-top: 10px; |
|
510 |
background-color: #f2f2f2; |
|
511 |
} |
|
512 |
|
|
513 |
img.toggler { |
|
514 |
margin-right: 3px; |
|
515 |
margin-top: 3px; |
|
516 |
cursor: pointer; |
|
517 |
} |
|
518 |
|
|
519 |
form.pfform { |
|
520 |
margin: 10px 0 20px 0; |
|
521 |
} |
|
522 |
|
|
523 |
table.contentstable { |
|
524 |
width: 90%; |
|
525 |
} |
|
526 |
|
|
527 |
table.contentstable p.biglink { |
|
528 |
line-height: 150%; |
|
529 |
} |
|
530 |
|
|
531 |
a.biglink { |
|
532 |
font-size: 1.3em; |
|
533 |
} |
|
534 |
|
|
535 |
span.linkdescr { |
|
536 |
font-style: italic; |
|
537 |
padding-top: 5px; |
|
538 |
font-size: 90%; |
|
539 |
} |
|
540 |
|
|
541 |
ul.search { |
|
542 |
margin: 10px 0 0 20px; |
|
543 |
padding: 0; |
|
544 |
} |
|
545 |
|
|
546 |
ul.search li { |
|
547 |
padding: 5px 0 5px 20px; |
|
548 |
background-image: url(file.png); |
|
549 |
background-repeat: no-repeat; |
|
550 |
background-position: 0 7px; |
|
551 |
} |
|
552 |
|
|
553 |
ul.search li a { |
|
554 |
font-weight: bold; |
|
555 |
} |
|
556 |
|
|
557 |
ul.search li div.context { |
|
558 |
color: #888; |
|
559 |
margin: 2px 0 0 30px; |
|
560 |
text-align: left; |
|
561 |
} |
|
562 |
|
|
563 |
ul.keywordmatches li.goodmatch a { |
|
564 |
font-weight: bold; |
|
565 |
} |
|
566 |
|
|
567 |
img.math { |
|
568 |
vertical-align: center; |
|
569 |
} |
|
570 |
|
|
571 |
div.math { |
|
572 |
text-align: center; |
|
573 |
} |
|
574 |
|
|
575 |
span.eqno { |
|
576 |
float: right; |
|
577 |
} |
|
578 |
|
|
579 |
img.logo { |
|
580 |
border: 0; |
|
581 |
} |
docs/dev/metacat/source/conf.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# |
|
3 |
# Metacat documentation build configuration file, created by |
|
4 |
# sphinx-quickstart on Mon Mar 1 14:16:16 2010. |
|
5 |
# |
|
6 |
# This file is execfile()d with the current directory set to its containing dir. |
|
7 |
# |
|
8 |
# Note that not all possible configuration values are present in this |
|
9 |
# autogenerated file. |
|
10 |
# |
|
11 |
# All configuration values have a default; values that are commented out |
|
12 |
# serve to show the default. |
|
13 |
|
|
14 |
import sys, os |
|
15 |
|
|
16 |
# If extensions (or modules to document with autodoc) are in another directory, |
|
17 |
# add these directories to sys.path here. If the directory is relative to the |
|
18 |
# documentation root, use os.path.abspath to make it absolute, like shown here. |
|
19 |
#sys.path.append(os.path.abspath('.')) |
|
20 |
|
|
21 |
# -- General configuration ----------------------------------------------------- |
|
22 |
|
|
23 |
# Add any Sphinx extension module names here, as strings. They can be extensions |
|
24 |
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. |
|
25 |
extensions = [] |
|
26 |
|
|
27 |
# Add any paths that contain templates here, relative to this directory. |
|
28 |
templates_path = ['_templates'] |
|
29 |
|
|
30 |
# The suffix of source filenames. |
|
31 |
source_suffix = '.txt' |
|
32 |
|
|
33 |
# The encoding of source files. |
|
34 |
#source_encoding = 'utf-8' |
|
35 |
|
|
36 |
# The master toctree document. |
|
37 |
master_doc = 'index' |
|
38 |
|
|
39 |
# General information about the project. |
|
40 |
project = u'Metacat' |
|
41 |
copyright = u'2010, Matthew B. Jones' |
|
42 |
|
|
43 |
# The version info for the project you're documenting, acts as replacement for |
|
44 |
# |version| and |release|, also used in various other places throughout the |
|
45 |
# built documents. |
|
46 |
# |
|
47 |
# The short X.Y version. |
|
48 |
version = '2.0' |
|
49 |
# The full version, including alpha/beta/rc tags. |
|
50 |
release = '2.0.0' |
|
51 |
|
|
52 |
# The language for content autogenerated by Sphinx. Refer to documentation |
|
53 |
# for a list of supported languages. |
|
54 |
#language = None |
|
55 |
|
|
56 |
# There are two options for replacing |today|: either, you set today to some |
|
57 |
# non-false value, then it is used: |
|
58 |
#today = '' |
|
59 |
# Else, today_fmt is used as the format for a strftime call. |
|
60 |
#today_fmt = '%B %d, %Y' |
|
61 |
|
|
62 |
# List of documents that shouldn't be included in the build. |
|
63 |
#unused_docs = [] |
|
64 |
|
|
65 |
# List of directories, relative to source directory, that shouldn't be searched |
|
66 |
# for source files. |
|
67 |
exclude_trees = [] |
|
68 |
|
|
69 |
# The reST default role (used for this markup: `text`) to use for all documents. |
|
70 |
#default_role = None |
|
71 |
|
|
72 |
# If true, '()' will be appended to :func: etc. cross-reference text. |
|
73 |
#add_function_parentheses = True |
|
74 |
|
|
75 |
# If true, the current module name will be prepended to all description |
|
76 |
# unit titles (such as .. function::). |
|
77 |
#add_module_names = True |
|
78 |
|
|
79 |
# If true, sectionauthor and moduleauthor directives will be shown in the |
|
80 |
# output. They are ignored by default. |
|
81 |
#show_authors = False |
|
82 |
|
|
83 |
# The name of the Pygments (syntax highlighting) style to use. |
|
84 |
pygments_style = 'sphinx' |
|
85 |
|
|
86 |
# A list of ignored prefixes for module index sorting. |
|
87 |
#modindex_common_prefix = [] |
|
88 |
|
|
89 |
|
|
90 |
# -- Options for HTML output --------------------------------------------------- |
|
91 |
|
|
92 |
# The theme to use for HTML and HTML Help pages. Major themes that come with |
|
93 |
# Sphinx are currently 'default' and 'sphinxdoc'. |
|
94 |
#html_theme = 'default' |
|
95 |
html_theme = 'readable' |
|
96 |
|
|
97 |
# Theme options are theme-specific and customize the look and feel of a theme |
|
98 |
# further. For a list of options available for each theme, see the |
|
99 |
# documentation. |
|
100 |
#html_theme_options = {} |
|
101 |
|
|
102 |
# Add any paths that contain custom themes here, relative to this directory. |
|
103 |
html_theme_path = ['themes',] |
|
104 |
|
|
105 |
# The name for this set of Sphinx documents. If None, it defaults to |
|
106 |
# "<project> v<release> documentation". |
|
107 |
#html_title = None |
|
108 |
|
|
109 |
# A shorter title for the navigation bar. Default is the same as html_title. |
|
110 |
#html_short_title = None |
|
111 |
|
|
112 |
# The name of an image file (relative to this directory) to place at the top |
|
113 |
# of the sidebar. |
|
114 |
#html_logo = None |
|
115 |
|
|
116 |
# The name of an image file (within the static path) to use as favicon of the |
|
117 |
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 |
|
118 |
# pixels large. |
|
119 |
#html_favicon = None |
|
120 |
|
|
121 |
# Add any paths that contain custom static files (such as style sheets) here, |
|
122 |
# relative to this directory. They are copied after the builtin static files, |
|
123 |
# so a file named "default.css" will overwrite the builtin "default.css". |
|
124 |
html_static_path = ['_static'] |
|
125 |
|
|
126 |
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, |
|
127 |
# using the given strftime format. |
|
128 |
#html_last_updated_fmt = '%b %d, %Y' |
|
129 |
|
|
130 |
# If true, SmartyPants will be used to convert quotes and dashes to |
|
131 |
# typographically correct entities. |
|
132 |
#html_use_smartypants = True |
|
133 |
|
|
134 |
# Custom sidebar templates, maps document names to template names. |
|
135 |
#html_sidebars = {} |
|
136 |
|
|
137 |
# Additional templates that should be rendered to pages, maps page names to |
|
138 |
# template names. |
|
139 |
#html_additional_pages = {} |
|
140 |
|
|
141 |
# If false, no module index is generated. |
|
142 |
#html_use_modindex = True |
|
143 |
|
|
144 |
# If false, no index is generated. |
|
145 |
#html_use_index = True |
|
146 |
|
|
147 |
# If true, the index is split into individual pages for each letter. |
|
148 |
#html_split_index = False |
|
149 |
|
|
150 |
# If true, links to the reST sources are added to the pages. |
|
151 |
#html_show_sourcelink = True |
|
152 |
|
|
153 |
# If true, an OpenSearch description file will be output, and all pages will |
|
154 |
# contain a <link> tag referring to it. The value of this option must be the |
|
155 |
# base URL from which the finished HTML is served. |
|
156 |
#html_use_opensearch = '' |
|
157 |
|
|
158 |
# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). |
|
159 |
#html_file_suffix = '' |
|
160 |
|
|
161 |
# Output file base name for HTML help builder. |
|
162 |
htmlhelp_basename = 'Metacatdoc' |
|
163 |
|
|
164 |
|
|
165 |
# -- Options for LaTeX output -------------------------------------------------- |
|
166 |
|
|
167 |
# The paper size ('letter' or 'a4'). |
|
168 |
#latex_paper_size = 'letter' |
|
169 |
|
|
170 |
# The font size ('10pt', '11pt' or '12pt'). |
|
171 |
#latex_font_size = '10pt' |
|
172 |
|
|
173 |
# Grouping the document tree into LaTeX files. List of tuples |
|
174 |
# (source start file, target name, title, author, documentclass [howto/manual]). |
|
175 |
latex_documents = [ |
|
176 |
('index', 'Metacat.tex', u'Metacat Documentation', |
|
177 |
u'Matthew B. Jones', 'manual'), |
|
178 |
] |
|
179 |
|
|
180 |
# The name of an image file (relative to this directory) to place at the top of |
|
181 |
# the title page. |
|
182 |
#latex_logo = None |
|
183 |
|
|
184 |
# For "manual" documents, if this is true, then toplevel headings are parts, |
|
185 |
# not chapters. |
|
186 |
#latex_use_parts = False |
|
187 |
|
|
188 |
# Additional stuff for the LaTeX preamble. |
|
189 |
#latex_preamble = '' |
|
190 |
|
|
191 |
# Documents to append as an appendix to all manuals. |
|
192 |
#latex_appendices = [] |
|
193 |
|
|
194 |
# If false, no module index is generated. |
|
195 |
#latex_use_modindex = True |
docs/dev/metacat/Makefile | ||
---|---|---|
1 |
# Makefile for Sphinx documentation |
|
2 |
# |
|
3 |
|
|
4 |
# You can set these variables from the command line. |
|
5 |
SPHINXOPTS = |
|
6 |
SPHINXBUILD = sphinx-build |
|
7 |
PAPER = |
|
8 |
BUILDDIR = build |
|
9 |
GRAPHVIZ = /opt/local/bin/dot |
|
10 |
|
|
11 |
# Internal variables. |
|
12 |
PAPEROPT_a4 = -D latex_paper_size=a4 |
|
13 |
PAPEROPT_letter = -D latex_paper_size=letter |
|
14 |
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source |
|
15 |
|
|
16 |
.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest pdf |
|
17 |
|
|
18 |
help: |
|
19 |
@echo "Please use \`make <target>' where <target> is one of" |
|
20 |
@echo " html to make standalone HTML files" |
|
21 |
@echo " dirhtml to make HTML files named index.html in directories" |
|
22 |
@echo " pickle to make pickle files" |
|
23 |
@echo " json to make JSON files" |
|
24 |
@echo " htmlhelp to make HTML files and a HTML help project" |
|
25 |
@echo " qthelp to make HTML files and a qthelp project" |
|
26 |
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" |
|
27 |
@echo " changes to make an overview of all changed/added/deprecated items" |
|
28 |
@echo " linkcheck to check all external links for integrity" |
|
29 |
@echo " doctest to run all doctests embedded in the documentation (if enabled)" |
|
30 |
@echo " pdf to make PDF files" |
|
31 |
|
|
32 |
clean: |
|
33 |
-rm -rf $(BUILDDIR)/* |
|
34 |
|
|
35 |
plantuml: |
|
36 |
GRAPHVIZ_DOT=$(GRAPHVIZ) plantuml source |
|
37 |
|
|
38 |
html: |
|
39 |
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html |
|
40 |
@echo |
|
41 |
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html." |
|
42 |
|
|
43 |
dirhtml: |
|
44 |
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml |
|
45 |
@echo |
|
46 |
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." |
|
47 |
|
|
48 |
pickle: |
|
49 |
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle |
|
50 |
@echo |
|
51 |
@echo "Build finished; now you can process the pickle files." |
|
52 |
|
|
53 |
json: |
|
54 |
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json |
|
55 |
@echo |
|
56 |
@echo "Build finished; now you can process the JSON files." |
|
57 |
|
|
58 |
pdf: |
|
59 |
$(SPHINXBUILD) -b pdf $(ALLSPHINXOPTS) $(BUILDDIR)/pdf |
|
60 |
@echo |
|
61 |
@echo "Build finished. The PDF files are in $(BUILDDIR)/pdf." |
|
62 |
|
|
63 |
htmlhelp: |
Also available in: Unified diff
Adding new documentation section for Metacat design documents in Sphinx/ReStructured Text format. Build this documentation using the
provided Makefile, assuming that both Sphinx and PlantUML are installed and on the local executable path by running 'make plantuml html'.
This will produce HTML versions of the documentation in build/html.
Current documentation includes sequence diagrams describing how to handle arbitrary identifiers in Metacat.