apress-documentation 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.drone.yml +28 -0
- data/.gitignore +10 -0
- data/Appraisals +30 -0
- data/CHANGELOG.md +34 -0
- data/Gemfile +4 -0
- data/README.md +101 -0
- data/Rakefile +6 -0
- data/app/assets/javascripts/package/documentation.js +18 -0
- data/app/assets/javascripts/shared/dependency_switcher.js +10 -0
- data/app/assets/javascripts/swagger_binder.js +19 -0
- data/app/assets/javascripts/swagger_ui.js +24 -0
- data/app/assets/javascripts/templates/document.hamlbars +25 -0
- data/app/assets/stylesheets/document/base.scss +112 -0
- data/app/assets/stylesheets/document/document.scss +19 -0
- data/app/assets/stylesheets/document/layout.scss +9 -0
- data/app/assets/stylesheets/document/sidebar.scss +19 -0
- data/app/assets/stylesheets/document/swagger.scss +3 -0
- data/app/assets/stylesheets/document/switch.scss +46 -0
- data/app/assets/stylesheets/document/variables.scss +26 -0
- data/app/assets/stylesheets/package/documentation.css +9 -0
- data/app/assets/stylesheets/package/swagger_print.css +4 -0
- data/app/assets/stylesheets/package/swagger_screen.css +4 -0
- data/app/controllers/apress/documentation/documents_controller.rb +14 -0
- data/app/controllers/apress/documentation/swagger_controller.rb +22 -0
- data/app/controllers/apress/documentation/swagger_ui_controller.rb +11 -0
- data/app/controllers/concerns/apress/documentation/preload_docs.rb +20 -0
- data/app/helpers/apress/documentation/documents_helper.rb +14 -0
- data/app/presenters/apress/documentation/dependency_presenter.rb +75 -0
- data/app/services/apress/documentation/swagger_json_builder.rb +22 -0
- data/app/views/apress/documentation/documents/_document.html.haml +32 -0
- data/app/views/apress/documentation/documents/_swagger.html.haml +10 -0
- data/app/views/apress/documentation/documents/show.html.haml +13 -0
- data/app/views/apress/documentation/presenters/dependency_presenter/_dependencies.html.haml +21 -0
- data/app/views/apress/documentation/presenters/dependency_presenter/_links.html.haml +17 -0
- data/app/views/apress/documentation/swagger_ui/show.html.haml +26 -0
- data/app/views/layouts/apress/documentation/_menu.html.haml +6 -0
- data/app/views/layouts/apress/documentation/_menu_item.html.haml +7 -0
- data/app/views/layouts/apress/documentation/_sidebar.html.haml +2 -0
- data/app/views/layouts/documentation.html.haml +17 -0
- data/apress-documentation.gemspec +35 -0
- data/config/routes.rb +16 -0
- data/dip.yml +48 -0
- data/docker-compose.development.yml +18 -0
- data/docker-compose.drone.yml +7 -0
- data/docker-compose.yml +10 -0
- data/lib/apress/documentation.rb +48 -0
- data/lib/apress/documentation/dsl/compilers/base_compiler.rb +32 -0
- data/lib/apress/documentation/dsl/compilers/document_compiler.rb +111 -0
- data/lib/apress/documentation/dsl/compilers/mixins/dependable.rb +31 -0
- data/lib/apress/documentation/dsl/compilers/mixins/publicity.rb +34 -0
- data/lib/apress/documentation/dsl/compilers/swagger_compiler.rb +25 -0
- data/lib/apress/documentation/dsl/document.rb +14 -0
- data/lib/apress/documentation/dsl/modules.rb +40 -0
- data/lib/apress/documentation/dsl/swagger_document.rb +14 -0
- data/lib/apress/documentation/dsl/utils/swagger_bind_point_extractor.rb +37 -0
- data/lib/apress/documentation/engine.rb +16 -0
- data/lib/apress/documentation/extensions/rgl/adjacency.rb +18 -0
- data/lib/apress/documentation/storage/base_storage.rb +88 -0
- data/lib/apress/documentation/storage/dependency_graph.rb +96 -0
- data/lib/apress/documentation/storage/document.rb +52 -0
- data/lib/apress/documentation/storage/modules.rb +83 -0
- data/lib/apress/documentation/storage/swagger_document.rb +62 -0
- data/lib/apress/documentation/swagger/schema.rb +39 -0
- data/lib/apress/documentation/version.rb +5 -0
- data/spec/app/controllers/documents_controller_spec.rb +42 -0
- data/spec/app/controllers/swagger_controller_spec.rb +46 -0
- data/spec/app/controllers/swagger_ui_controller_spec.rb +11 -0
- data/spec/app/services/swagger_json_builder_spec.rb +41 -0
- data/spec/apress/documentation_spec.rb +342 -0
- data/spec/helpers/apress/documentation/documents_helper_spec.rb +17 -0
- data/spec/internal/app/docs/swagger/root.rb +7 -0
- data/spec/internal/config/database.yml +7 -0
- data/spec/internal/config/environments/test.rb +1 -0
- data/spec/internal/config/hosts.rb +1 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/lib/stub_docs/module.rb +3 -0
- data/spec/internal/lib/stub_docs/module/document/child_document.rb +7 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/presenters/apress/documentation/dependency_presenter_spec.rb +139 -0
- data/spec/spec_helper.rb +27 -0
- metadata +335 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b3884b3865d68ccbb735759200cfc3833e7747c5
|
4
|
+
data.tar.gz: b03241bacd2cd463a790e214d689cebdfc4b2044
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fa018cf839ed6b3d33d78af959ac566b12804560d46f61a2f08cec83477599d1f41def643de73b3a025ff28150bdef6b06567dfbb070ef54a53f78cf4449668a
|
7
|
+
data.tar.gz: 296e6b6572a6325fb1ff9b7650225c69d86cda31d2de703721084f5527b78d2883f44dae2a7cc36ff9cbcb6c49455577373077b4029f6db70f31ef7973c89a20
|
data/.drone.yml
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
build:
|
2
|
+
test:
|
3
|
+
image: abakpress/dind-testing
|
4
|
+
pull: true
|
5
|
+
privileged: true
|
6
|
+
volumes:
|
7
|
+
- /home/data/drone/images:/images
|
8
|
+
- /home/data/drone/gems:/bundle
|
9
|
+
environment:
|
10
|
+
- COMPOSE_FILE_EXT=drone
|
11
|
+
- RUBY_IMAGE_TAG=2.2-latest
|
12
|
+
commands:
|
13
|
+
- wrapdocker docker -v
|
14
|
+
|
15
|
+
- fetch-images --image abakpress/ruby-app:$RUBY_IMAGE_TAG
|
16
|
+
- dip provision
|
17
|
+
- dip rspec
|
18
|
+
|
19
|
+
release:
|
20
|
+
image: abakpress/gem-publication
|
21
|
+
pull: true
|
22
|
+
when:
|
23
|
+
event: push
|
24
|
+
branch: master
|
25
|
+
volumes:
|
26
|
+
- /home/data/drone/rubygems:/root/.gem
|
27
|
+
commands:
|
28
|
+
- release-gem --public
|
data/.gitignore
ADDED
data/Appraisals
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
appraise 'rails3.2' do
|
2
|
+
gem 'rails', '>= 3.2', '< 4.0'
|
3
|
+
end
|
4
|
+
|
5
|
+
appraise 'rails4.0' do
|
6
|
+
gem 'rails', '>= 4.0', '< 4.1'
|
7
|
+
end
|
8
|
+
|
9
|
+
appraise 'rails4.1' do
|
10
|
+
gem 'rails', '>= 4.1', '< 4.2'
|
11
|
+
end
|
12
|
+
|
13
|
+
appraise 'rails4.2' do
|
14
|
+
gem 'rails', '>= 4.2', '< 5.0'
|
15
|
+
end
|
16
|
+
|
17
|
+
appraise 'rails5.0' do
|
18
|
+
gem 'rails', '>= 5.0', '< 5.1'
|
19
|
+
gem 'rails-controller-testing'
|
20
|
+
end
|
21
|
+
|
22
|
+
appraise 'rails5.1' do
|
23
|
+
gem 'rails', '~> 5.1.0'
|
24
|
+
gem 'rails-controller-testing'
|
25
|
+
end
|
26
|
+
|
27
|
+
appraise 'rails5.2' do
|
28
|
+
gem 'rails', '~> 5.2.0'
|
29
|
+
gem 'rails-controller-testing'
|
30
|
+
end
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# v0.4.0
|
2
|
+
|
3
|
+
* 2018-08-22 [2d3b37b](../../commit/2d3b37b) - __(Artem Napolskih)__ chore: Add automatic publication
|
4
|
+
* 2018-08-21 [c419339](../../commit/c419339) - __(Artem Napolskih)__ fix: removes dependence on abak domain system
|
5
|
+
* 2018-08-21 [dddd8ea](../../commit/dddd8ea) - __(Artem Napolskih)__ feature: rails 5.x support added
|
6
|
+
|
7
|
+
# v0.3.0
|
8
|
+
|
9
|
+
* 2018-06-06 [386ff0e](../../commit/386ff0e) - __(Maxim Tretyakov)__ feat: route scope option
|
10
|
+
https://jira.railsc.ru/browse/ORDERS-1786
|
11
|
+
|
12
|
+
# v0.2.1
|
13
|
+
|
14
|
+
* 2017-09-27 [beec36c](../../commit/beec36c) - __(Denis Korobicyn)__ fix: proper cache key
|
15
|
+
|
16
|
+
# v0.2.0
|
17
|
+
|
18
|
+
* 2017-07-31 [ad4e903](../../commit/ad4e903) - __(Denis Korobicyn)__ fix: dependencies for swagger documents
|
19
|
+
https://jira.railsc.ru/browse/PC4-19812
|
20
|
+
|
21
|
+
* 2017-05-19 [6b3e186](../../commit/6b3e186) - __(Denis Korobicyn)__ feature: modules connections
|
22
|
+
https://jira.railsc.ru/browse/PC4-19783
|
23
|
+
|
24
|
+
* 2017-05-12 [9064dc6](../../commit/9064dc6) - __(Denis Korobicyn)__ fix: assets compilation
|
25
|
+
https://jira.railsc.ru/browse/PC4-19468
|
26
|
+
|
27
|
+
* 2017-05-10 [62fe08a](../../commit/62fe08a) - __(Denis Korobicyn)__ chore: add missing load_hook for documents_controller
|
28
|
+
* 2017-05-04 [fd80fa6](../../commit/fd80fa6) - __(Denis Korobicyn)__ chore: add load_docs_for method
|
29
|
+
* 2017-05-03 [87005d6](../../commit/87005d6) - __(Denis Korobicyn)__ fix: repo url in gemspec and repo name in readme
|
30
|
+
|
31
|
+
# v0.1.0
|
32
|
+
|
33
|
+
* 2017-04-21 [3c66be9](../../commit/3c66be9) - __(Denis Korobicyn)__ Initial commit
|
34
|
+
* 2017-04-21 [db97835](../../commit/db97835) - __(Mamedaliev Kirill)__ Initial commit
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
# Apress::Documentation
|
2
|
+
|
3
|
+
|
4
|
+
## Установка
|
5
|
+
|
6
|
+
```ruby
|
7
|
+
gem 'apress-documentation'
|
8
|
+
```
|
9
|
+
|
10
|
+
## Использвание
|
11
|
+
|
12
|
+
Описание любого компонена задается с помощью вызова метода build на главном модуле `Apress::Documentation` и передаче ему блока. Например,
|
13
|
+
```
|
14
|
+
Apress::Documentation.build(:module_name, title: 'название модуля') do
|
15
|
+
document(:component, title: 'Название компонента') do
|
16
|
+
description 'test'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
```
|
20
|
+
|
21
|
+
в самом блоке могут быть вызваны методы document, name, description, business_desc, consumers, publicity, tests, swagger_bind.
|
22
|
+
|
23
|
+
#### Описания методов
|
24
|
+
`document` определеяет весь документ, является частью построения меню (на каждый документ создается ссылка), данный метод можно вызвать друг друге, например:
|
25
|
+
```ruby
|
26
|
+
Apress::Documentation.build(:module_name, title: 'название модуля') do
|
27
|
+
document(:component, title: 'Название компонента') do
|
28
|
+
description 'test'
|
29
|
+
|
30
|
+
document(:nested_component, title: 'Вложенный документ') do
|
31
|
+
description 'test here'
|
32
|
+
publicity 'Закрытый'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
```
|
37
|
+
|
38
|
+
также `document` можно вызывать без блока, если нет неообходимости:
|
39
|
+
```ruby
|
40
|
+
Apress::Documentation.build(:module_name, title: 'название модуля') do
|
41
|
+
document(:component, title: 'Простой компонент соящий упоминания')
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
`title` - имя компонента.
|
46
|
+
|
47
|
+
`description` - описание компонента.
|
48
|
+
|
49
|
+
`business_desc` - бизнес-описание компонента, заполняется менеджером.
|
50
|
+
|
51
|
+
`consumers` - перечесление модулей-потребителей.
|
52
|
+
|
53
|
+
`tests` - есть ли тесты на компонент, когда были написаны, в рамках какой задачи.
|
54
|
+
|
55
|
+
`publicity` - публичность компонента, возможность использования его в других местах, рекомендованные значения -
|
56
|
+
"Защищеный", "Публичный".
|
57
|
+
|
58
|
+
`swagger_bind` реализует возможность дополнить swagger-ui.
|
59
|
+
разрешенные методы - business_desc, consumers, tests и publicity.
|
60
|
+
Пример использования:
|
61
|
+
```ruby
|
62
|
+
Apress::Documentation.build(:module_name, title: 'название модуля') do
|
63
|
+
document(:http_api, title: 'HTTP API') do
|
64
|
+
# аргумент id HTML блока в который будет ставлена доп. инфа
|
65
|
+
swagger_bind('module_operationID_content') do
|
66
|
+
description 'Это апи нужно для того-то'
|
67
|
+
|
68
|
+
consumers 'Other module'
|
69
|
+
|
70
|
+
# тут обычное swagger описание
|
71
|
+
swagger_path('some/path/here') do
|
72
|
+
operation :get do
|
73
|
+
# важно чтобы operation_id и tags совпадали в аргументе swagger_bind
|
74
|
+
key :operationId, 'operationID'
|
75
|
+
key :tags, ['module']
|
76
|
+
|
77
|
+
...
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# также аргумент HTML id можно опускать, если operationId и tags заданы
|
83
|
+
swagger_bind do
|
84
|
+
description 'Это апи нужно для того-то'
|
85
|
+
|
86
|
+
consumers 'Other module'
|
87
|
+
|
88
|
+
# тут обычное swagger описание
|
89
|
+
swagger_path('some/path/here') do
|
90
|
+
operation :get do
|
91
|
+
# Автоматически поддянет значения и создат HTML id - module_operationID_content
|
92
|
+
key :operationId, 'operationID'
|
93
|
+
key :tags, ['module']
|
94
|
+
|
95
|
+
...
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
//= require swagger-ui/lib/jquery-1.8.0.min.js
|
2
|
+
//= require swagger-ui/lib/jquery.slideto.min.js
|
3
|
+
//= require swagger-ui/lib/jquery.wiggle.min.js
|
4
|
+
//= require swagger-ui/lib/jquery.ba-bbq.min.js
|
5
|
+
//= require swagger-ui/lib/handlebars-2.0.0.js
|
6
|
+
//= require swagger-ui/lib/underscore-min.js
|
7
|
+
//= require swagger-ui/lib/backbone-min.js
|
8
|
+
//= require swagger-ui/lib/jsoneditor.min.js
|
9
|
+
//= require swagger-ui/lib/highlight.7.3.pack.js
|
10
|
+
//= require swagger-ui/lib/marked.js
|
11
|
+
//= require swagger-ui/lib/swagger-oauth.js
|
12
|
+
//= require swagger-ui/swagger-ui.js
|
13
|
+
//= require swagger_ui.js
|
14
|
+
//= require_tree ../templates
|
15
|
+
//= require shared/dependency_switcher.js
|
16
|
+
//= require swagger_binder.js
|
17
|
+
|
18
|
+
DependencySwitcher.switchBind();
|
@@ -0,0 +1,10 @@
|
|
1
|
+
var DependencySwitcher = (function(self) {
|
2
|
+
self.switchBind = function() {
|
3
|
+
$('.js-dependency-switch', '.js-dependencies-container').change(function() {
|
4
|
+
$('.js-all-dependencies', '.js-dependencies-container').toggle();
|
5
|
+
$('.js-dependencies', '.js-dependencies-container').toggle();
|
6
|
+
});
|
7
|
+
};
|
8
|
+
|
9
|
+
return self;
|
10
|
+
})(DependencySwitcher || {});
|
@@ -0,0 +1,19 @@
|
|
1
|
+
$(function () {
|
2
|
+
Handlebars.registerHelper('fetch', function (value, def) {
|
3
|
+
return value || def;
|
4
|
+
});
|
5
|
+
|
6
|
+
$(document).on('swaggerBind', function(event) {
|
7
|
+
event.preventDefault();
|
8
|
+
|
9
|
+
if(!app.extensions) {
|
10
|
+
return;
|
11
|
+
}
|
12
|
+
|
13
|
+
for(var ext in app.extensions) {
|
14
|
+
$('#' + ext + '_content').prepend(HandlebarsTemplates['document']({document: app.extensions[ext]}));
|
15
|
+
}
|
16
|
+
|
17
|
+
DependencySwitcher.switchBind();
|
18
|
+
});
|
19
|
+
});
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$(function () {
|
2
|
+
if(app.swagger) {
|
3
|
+
window.swaggerUi = new SwaggerUi({
|
4
|
+
url: app.swagger.docsUrl,
|
5
|
+
dom_id: 'swagger-ui-container',
|
6
|
+
supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
|
7
|
+
onComplete: function() {
|
8
|
+
$('pre code').each(function(i, e) {
|
9
|
+
hljs.highlightBlock(e);
|
10
|
+
});
|
11
|
+
|
12
|
+
$(document).trigger('swaggerBind');
|
13
|
+
},
|
14
|
+
onFailure: function() {
|
15
|
+
console.log('Unable to Load SwaggerUI');
|
16
|
+
},
|
17
|
+
docExpansion: (app.swagger.docsExpansion || 'none'),
|
18
|
+
jsonEditor: true,
|
19
|
+
defaultModelRendering: 'schema',
|
20
|
+
showRequestHeaders: true
|
21
|
+
});
|
22
|
+
window.swaggerUi.load();
|
23
|
+
}
|
24
|
+
});
|
@@ -0,0 +1,25 @@
|
|
1
|
+
%h4 Бизнесс описание
|
2
|
+
%span
|
3
|
+
{{fetch document.business_desc "Нет данных"}}
|
4
|
+
|
5
|
+
%h4 Публичность
|
6
|
+
%span
|
7
|
+
{{fetch document.publicity "Нет данных"}}
|
8
|
+
|
9
|
+
%h4 Тесты
|
10
|
+
%span
|
11
|
+
{{fetch document.tests "Нет данных"}}
|
12
|
+
|
13
|
+
%h4 Зависимости
|
14
|
+
.js-dependencies-container
|
15
|
+
.switch
|
16
|
+
%input.switch-checkbox.js-dependency-switch{type: "checkbox", id: "doc-switch-{{document.slug}}"}
|
17
|
+
%label.switch-label{for: "doc-switch-{{document.slug}}"}
|
18
|
+
%span.switch-inner
|
19
|
+
%span.switch-switch
|
20
|
+
|
21
|
+
%h5 Зависит от
|
22
|
+
{{{fetch document.depends_on "Нет данных"}}}
|
23
|
+
|
24
|
+
%h5 Используется в
|
25
|
+
{{{fetch document.consumers "Нет данных"}}}
|
@@ -0,0 +1,112 @@
|
|
1
|
+
@import 'variables';
|
2
|
+
|
3
|
+
* {
|
4
|
+
-webkit-font-smoothing: antialiased;
|
5
|
+
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
6
|
+
-moz-osx-font-smoothing: grayscale;
|
7
|
+
box-sizing: border-box;
|
8
|
+
|
9
|
+
&:focus,
|
10
|
+
&:active {
|
11
|
+
outline: none;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
body {
|
16
|
+
background-color: $body-bg;
|
17
|
+
color: $text-color;
|
18
|
+
font-family: $font-family;
|
19
|
+
font-size: $font-size;
|
20
|
+
line-height: $line-height;
|
21
|
+
}
|
22
|
+
|
23
|
+
h1,
|
24
|
+
h2,
|
25
|
+
h3,
|
26
|
+
h4,
|
27
|
+
h5,
|
28
|
+
h6 {
|
29
|
+
font-family: $font-family-headings;
|
30
|
+
font-weight: $headings-font-weight;
|
31
|
+
color: $heading-color;
|
32
|
+
line-height: $heading-line-heading;
|
33
|
+
margin: 1.6em 0 .8em;
|
34
|
+
}
|
35
|
+
|
36
|
+
h1 {
|
37
|
+
font-size: 1.5em;
|
38
|
+
border-bottom: 1px solid lighten($border-accent-color, 1%);
|
39
|
+
padding-bottom: .6em;
|
40
|
+
|
41
|
+
& > a {
|
42
|
+
& > img {
|
43
|
+
vertical-align: middle;
|
44
|
+
position: relative;
|
45
|
+
top: -2px;
|
46
|
+
margin-left: 1px;
|
47
|
+
height: 18px;
|
48
|
+
|
49
|
+
@media(max-width: $screen-sm-max) {
|
50
|
+
display: none;
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
&:first-child {
|
55
|
+
& > img {
|
56
|
+
margin-left: 15px;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
h2 { font-size: 1.3em; }
|
63
|
+
h3 { font-size: 1.1em; }
|
64
|
+
h4 { font-size: 1em; }
|
65
|
+
h5 { font-size: .9em; }
|
66
|
+
h6 { font-size: .8em; }
|
67
|
+
|
68
|
+
p {
|
69
|
+
margin: 0 0 .8em;
|
70
|
+
}
|
71
|
+
|
72
|
+
a {
|
73
|
+
color: $link-color;
|
74
|
+
|
75
|
+
&:hover {
|
76
|
+
color: darken($link-color, 10%);
|
77
|
+
}
|
78
|
+
|
79
|
+
&,
|
80
|
+
&:hover {
|
81
|
+
text-decoration: none;
|
82
|
+
}
|
83
|
+
|
84
|
+
&[name] {
|
85
|
+
display: block;
|
86
|
+
padding-top: 15px;
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
.content {
|
91
|
+
*:not(a) {
|
92
|
+
& > img:not([class]) {
|
93
|
+
border: 1px solid $border-accent-color;
|
94
|
+
padding: 4px;
|
95
|
+
background-color: #fff;
|
96
|
+
border-radius: 2px;
|
97
|
+
display: block;
|
98
|
+
max-width: 100%;
|
99
|
+
height: auto;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
ul:not([class]) {
|
104
|
+
li {
|
105
|
+
padding-bottom: 5px;
|
106
|
+
}
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
.hidden {
|
111
|
+
display: none;
|
112
|
+
}
|