archangel 0.0.7 → 0.0.8
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 +4 -4
- data/.travis.yml +10 -2
- data/Gemfile +1 -1
- data/README.md +3 -3
- data/Rakefile +10 -7
- data/app/controllers/archangel/backend/sites_controller.rb +1 -2
- data/app/controllers/archangel/backend/users_controller.rb +1 -1
- data/app/controllers/concerns/archangel/seoable_concern.rb +1 -2
- data/app/models/archangel/entry.rb +1 -1
- data/app/models/archangel/page.rb +2 -4
- data/app/models/archangel/site.rb +0 -4
- data/app/models/archangel/template.rb +9 -0
- data/app/themes/default/assets/javascripts/default/backend.js +1 -0
- data/app/themes/default/assets/javascripts/default/backend/templates.js +26 -0
- data/app/themes/default/assets/stylesheets/default/auth/core.scss +10 -5
- data/app/themes/default/assets/stylesheets/default/backend/bootstrap/_tables.scss +40 -0
- data/app/themes/default/assets/stylesheets/default/backend/core.scss +11 -10
- data/app/themes/default/assets/stylesheets/default/frontend/core.scss +10 -5
- data/app/themes/default/views/layouts/auth.html.erb +0 -2
- data/app/themes/default/views/layouts/backend.html.erb +0 -2
- data/app/views/archangel/backend/assets/_asset.html.erb +12 -0
- data/app/views/archangel/backend/assets/index.html.erb +1 -14
- data/app/views/archangel/backend/collections/_collection.html.erb +10 -0
- data/app/views/archangel/backend/collections/index.html.erb +1 -12
- data/app/views/archangel/backend/entries/_entry.html.erb +13 -0
- data/app/views/archangel/backend/entries/index.html.erb +1 -15
- data/app/views/archangel/backend/pages/_page.html.erb +17 -0
- data/app/views/archangel/backend/pages/index.html.erb +1 -19
- data/app/views/archangel/backend/sites/_form.html.erb +0 -6
- data/app/views/archangel/backend/templates/_template.html.erb +10 -0
- data/app/views/archangel/backend/templates/index.html.erb +1 -12
- data/app/views/archangel/backend/users/_user.html.erb +11 -0
- data/app/views/archangel/backend/users/index.html.erb +1 -13
- data/app/views/archangel/backend/widgets/_widget.html.erb +10 -0
- data/app/views/archangel/backend/widgets/index.html.erb +1 -12
- data/bin/citest +3 -0
- data/bin/test +4 -0
- data/config/locales/active_record.en.yml +0 -2
- data/config/locales/en.yml +3 -3
- data/db/migrate/20171003191001_create_archangel_sites.rb +0 -1
- data/docs/Developers.md +2 -11
- data/docs/Extension/Developers.md +1 -1
- data/docs/Release.md +7 -1
- data/lib/archangel.rb +13 -0
- data/lib/archangel/command/templates/extension/Gemfile +0 -1
- data/lib/archangel/command/templates/extension/README.md +2 -11
- data/lib/archangel/command/templates/extension/Rakefile +4 -0
- data/lib/archangel/config.rb +5 -3
- data/lib/archangel/engine.rb +1 -1
- data/lib/archangel/liquid/drop.rb +1 -67
- data/lib/archangel/liquid/drops/site_drop.rb +0 -8
- data/lib/archangel/testing_support/factories/archangel_assets.rb +0 -5
- data/lib/archangel/testing_support/factories/archangel_sites.rb +0 -4
- data/lib/archangel/testing_support/support.rb +0 -4
- data/lib/archangel/version.rb +1 -1
- data/lib/generators/archangel/dummy/dummy_generator.rb +49 -27
- data/lib/generators/archangel/dummy/templates/config/database.yml +1 -1
- data/lib/generators/archangel/install/templates/config/archangel.yml +1 -18
- data/spec/controllers/archangel/backend/assets_controller_spec.rb +0 -11
- data/spec/controllers/archangel/backend/sites_controller_spec.rb +0 -16
- data/spec/features/backend/{duplicate_page_slugs_spec.rb → pages/duplicate_slugs_spec.rb} +0 -0
- data/spec/features/frontend/{drop_variables_spec.rb → liquid_drop_variables_spec.rb} +0 -2
- data/spec/features/frontend/{homepage_redirect_spec.rb → pages/homepage_redirect_spec.rb} +0 -0
- data/spec/lib/archangel/liquid/drops/site_drop_spec.rb +0 -5
- data/spec/lib/archangel/liquid/tags/asset_tag_spec.rb +2 -1
- data/spec/models/archangel/entry_spec.rb +4 -4
- data/spec/models/archangel/page_spec.rb +4 -4
- data/spec/models/archangel/template_spec.rb +14 -0
- data/spec/support/.keep +0 -0
- data/spec/uploaders/archangel/asset_uploader_spec.rb +1 -24
- data/vendor/assets/stylesheets/daterangepicker/_daterangepicker.scss +0 -2
- metadata +17 -10
- data/app/assets/images/archangel/fallback/favicon.ico +0 -0
- data/app/uploaders/archangel/favicon_uploader.rb +0 -38
- data/docs/Extension/Ideas.md +0 -133
- data/spec/support/coveralls.rb +0 -5
- data/spec/uploaders/archangel/favicon_uploader_spec.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ada0c8ed4af07cb9635a364c3ac186aaeff079823aa2d63113b9386faa5dd74
|
4
|
+
data.tar.gz: 59820ae9c8fed07aef979c3f44eec939645e611bb05ce104b53ff54c9f4904f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6169656cff9ed37878dc356ce5a47a61745e3829ed2d94fc646f5ede5017c84fa5587e28a7bffe1e3e0ed798ebfc3fb50b8b0a1b50a699fdc53c024fb80cc82
|
7
|
+
data.tar.gz: 5c6be4b10f12046913e9723f42fbb96cd28ccf138b938fa30cc0152b0570a0dc8a9f99aef3b293281855fa9da1031782d3330ec517922b3731c5b780e712a9b9
|
data/.travis.yml
CHANGED
@@ -2,14 +2,22 @@ sudo: false
|
|
2
2
|
language: ruby
|
3
3
|
cache:
|
4
4
|
bundler: true
|
5
|
+
env:
|
6
|
+
global:
|
7
|
+
- CC_TEST_REPORTER_ID=10625f04e4c8c9fe7c22d49639163f1427fe16bc253aabcb316edbe43c41270b
|
5
8
|
bundler_args: --without production --jobs=3 --retry=3
|
6
9
|
before_install:
|
7
10
|
- gem update --system
|
8
11
|
- gem --version
|
9
12
|
install: ruby -S bundle install
|
13
|
+
before_script:
|
14
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
15
|
+
- chmod +x ./cc-test-reporter
|
16
|
+
- ./cc-test-reporter before-build
|
10
17
|
script:
|
11
|
-
-
|
12
|
-
|
18
|
+
- bin/citest
|
19
|
+
after_script:
|
20
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
13
21
|
rvm:
|
14
22
|
- 2.2.10
|
15
23
|
- 2.3.7
|
data/Gemfile
CHANGED
@@ -18,13 +18,13 @@ end
|
|
18
18
|
|
19
19
|
group :development, :test do
|
20
20
|
gem "launchy", "~> 2.4"
|
21
|
+
gem "pg", "~> 1.0"
|
21
22
|
gem "pry-byebug", "~> 3.5"
|
22
23
|
gem "sqlite3", ">= 1.3", platforms: %i[ruby mswin mswin64 mingw x64_mingw]
|
23
24
|
end
|
24
25
|
|
25
26
|
group :test do
|
26
27
|
gem "capybara", "~> 3.0"
|
27
|
-
gem "coveralls", "~> 0.8"
|
28
28
|
gem "database_cleaner", "~> 1.6"
|
29
29
|
gem "factory_bot_rails", "~> 4.8"
|
30
30
|
gem "poltergeist", "~> 1.18"
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
** Archangel is currently under development. It is not ready for production use. **
|
4
4
|
|
5
5
|
[](https://travis-ci.org/archangel/archangel)
|
6
|
-
[](https://codeclimate.com/github/archangel/archangel/test_coverage)
|
7
7
|
[](https://codeclimate.com/github/archangel/archangel)
|
8
8
|
[](http://inch-ci.org/github/archangel/archangel)
|
9
9
|
|
@@ -31,7 +31,7 @@ Deploy a sample application to [Heroku](https://www.heroku.com/) to play with.
|
|
31
31
|
Add to your application's Gemfile
|
32
32
|
|
33
33
|
```
|
34
|
-
gem "archangel"
|
34
|
+
gem "archangel", "< 1.0"
|
35
35
|
```
|
36
36
|
|
37
37
|
Run the bundle command
|
@@ -52,7 +52,7 @@ Run the install generator with seed data
|
|
52
52
|
$ bundle exec rails g archangel:install --seed
|
53
53
|
```
|
54
54
|
|
55
|
-
Seed data can be created separately by running `
|
55
|
+
Seed data can be created separately by running `bundle exec rails db:seed`
|
56
56
|
|
57
57
|
## Updating
|
58
58
|
|
data/Rakefile
CHANGED
@@ -17,13 +17,6 @@ RSpec::Core::RakeTask.new
|
|
17
17
|
|
18
18
|
task default: :spec
|
19
19
|
|
20
|
-
desc "Generates a dummy app for Archangel"
|
21
|
-
task :dummy_app do
|
22
|
-
ENV["LIB_NAME"] = "archangel"
|
23
|
-
|
24
|
-
Rake::Task["dummy:generate"].invoke
|
25
|
-
end
|
26
|
-
|
27
20
|
desc "Remove any generated files and directories"
|
28
21
|
task :clean do
|
29
22
|
%w[
|
@@ -34,3 +27,13 @@ task :clean do
|
|
34
27
|
.yardoc coverage doc pkg archangel_* node_modules pkg spec/dummy
|
35
28
|
].each { |directory| rm_rf directory }
|
36
29
|
end
|
30
|
+
|
31
|
+
desc "Generates a dummy app for Archangel"
|
32
|
+
task :dummy_app do
|
33
|
+
ENV["LIB_NAME"] = "archangel"
|
34
|
+
|
35
|
+
Rake::Task["dummy:generate"].invoke
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "Run RSpec tests"
|
39
|
+
task test: :spec
|
@@ -145,8 +145,7 @@ module Archangel
|
|
145
145
|
protected
|
146
146
|
|
147
147
|
def permitted_attributes
|
148
|
-
%w[
|
149
|
-
remove_favicon remove_logo theme]
|
148
|
+
%w[locale logo meta_description meta_keywords name remove_logo theme]
|
150
149
|
end
|
151
150
|
|
152
151
|
def set_resource
|
@@ -309,6 +309,7 @@ module Archangel
|
|
309
309
|
def set_resources
|
310
310
|
@users = current_site.users
|
311
311
|
.where.not(id: current_user.id)
|
312
|
+
.order(name: :asc)
|
312
313
|
.page(page_num).per(per_page)
|
313
314
|
|
314
315
|
authorize @users
|
@@ -319,7 +320,6 @@ module Archangel
|
|
319
320
|
|
320
321
|
@user = current_site.users
|
321
322
|
.where.not(id: current_user.id)
|
322
|
-
.order(name: :asc)
|
323
323
|
.find_by!(username: resource_id)
|
324
324
|
|
325
325
|
authorize @user
|
@@ -32,8 +32,7 @@ module Archangel
|
|
32
32
|
canonical: request.url,
|
33
33
|
image_src: current_site.logo.url,
|
34
34
|
description: current_site.meta_description,
|
35
|
-
keywords: current_site.meta_keywords.to_s.split(",")
|
36
|
-
icon: current_site.favicon.url
|
35
|
+
keywords: current_site.meta_keywords.to_s.split(",")
|
37
36
|
}
|
38
37
|
end
|
39
38
|
end
|
@@ -57,7 +57,7 @@ module Archangel
|
|
57
57
|
#
|
58
58
|
# @return [String] publication status
|
59
59
|
#
|
60
|
-
def
|
60
|
+
def status
|
61
61
|
if published?
|
62
62
|
if published_at > Time.now
|
63
63
|
"future-published"
|
@@ -132,9 +132,7 @@ module Archangel
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def reserved_paths
|
135
|
-
Archangel.config.
|
136
|
-
%i[auth_path backend_path frontend_path].include?(key)
|
137
|
-
end.values
|
135
|
+
Archangel.config.keys_in(Archangel.reserved_page_keywords).values
|
138
136
|
end
|
139
137
|
end
|
140
138
|
end
|
@@ -7,12 +7,8 @@ module Archangel
|
|
7
7
|
class Site < ApplicationRecord
|
8
8
|
acts_as_paranoid
|
9
9
|
|
10
|
-
mount_uploader :favicon, Archangel::FaviconUploader
|
11
10
|
mount_uploader :logo, Archangel::LogoUploader
|
12
11
|
|
13
|
-
validates :favicon, file_size: {
|
14
|
-
less_than_or_equal_to: Archangel.config.favicon_maximum_file_size
|
15
|
-
}
|
16
12
|
validates :locale, presence: true, inclusion: { in: Archangel::LANGUAGES }
|
17
13
|
validates :logo, file_size: {
|
18
14
|
less_than_or_equal_to: Archangel.config.image_maximum_file_size
|
@@ -18,6 +18,15 @@ module Archangel
|
|
18
18
|
optional: true
|
19
19
|
belongs_to :site
|
20
20
|
|
21
|
+
##
|
22
|
+
# Return string of partial status.
|
23
|
+
#
|
24
|
+
# @return [String] partial status
|
25
|
+
#
|
26
|
+
def status
|
27
|
+
partial? ? "partial" : "full"
|
28
|
+
end
|
29
|
+
|
21
30
|
protected
|
22
31
|
|
23
32
|
def valid_liquid_content
|
@@ -0,0 +1,26 @@
|
|
1
|
+
$(function() {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
// New Template
|
5
|
+
$('#template_partial').change(function() {
|
6
|
+
var checked = this.checked;
|
7
|
+
|
8
|
+
if (checked === true) {
|
9
|
+
$('#template_parent_id option:selected').prop('selected', false);
|
10
|
+
}
|
11
|
+
|
12
|
+
$('.new_template .template_parent').toggle(!checked);
|
13
|
+
});
|
14
|
+
|
15
|
+
// Edit Template
|
16
|
+
$('#template_partial').change(function() {
|
17
|
+
var checked = this.checked;
|
18
|
+
|
19
|
+
if (checked === true) {
|
20
|
+
$('#template_parent_id option:selected').prop('selected', false);
|
21
|
+
}
|
22
|
+
|
23
|
+
$('.edit_template .template_parent').toggle(!checked);
|
24
|
+
}).trigger('change');
|
25
|
+
|
26
|
+
});
|
@@ -1,15 +1,20 @@
|
|
1
|
-
//
|
1
|
+
// Theme variables
|
2
2
|
//
|
3
3
|
@import '../common/variables';
|
4
4
|
//
|
5
|
-
//
|
5
|
+
// 3rd party (from gems)
|
6
6
|
//
|
7
7
|
@import 'bootstrap';
|
8
|
+
@import 'font-awesome';
|
9
|
+
//
|
10
|
+
// 3rd party (from vendor)
|
8
11
|
//
|
9
|
-
//
|
12
|
+
// none
|
13
|
+
//
|
14
|
+
// 3rd party overwrites
|
10
15
|
//
|
11
16
|
@import '../common/bootstrap';
|
12
17
|
//
|
13
|
-
//
|
18
|
+
// Theme styles
|
14
19
|
//
|
15
|
-
|
20
|
+
// none
|
@@ -0,0 +1,40 @@
|
|
1
|
+
.table {
|
2
|
+
tr {
|
3
|
+
&.entry-available,
|
4
|
+
&.entry-future-available,
|
5
|
+
&.entry-unavailable,
|
6
|
+
&.page-future-published,
|
7
|
+
&.page-published,
|
8
|
+
&.page-unpublished,
|
9
|
+
&.template-full,
|
10
|
+
&.template-partial {
|
11
|
+
td:first-child {
|
12
|
+
border-left-style: solid;
|
13
|
+
border-left-width: 2px;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
&.entry-available,
|
18
|
+
&.page-published,
|
19
|
+
&.template-full {
|
20
|
+
td:first-child {
|
21
|
+
border-left-color: $green;
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
&.entry-unavailable,
|
26
|
+
&.page-unpublished,
|
27
|
+
&.template-partial {
|
28
|
+
td:first-child {
|
29
|
+
border-left-color: $cyan;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
&.entry-future-available,
|
34
|
+
&.page-future-published {
|
35
|
+
td:first-child {
|
36
|
+
border-left-color: $orange;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
@@ -1,18 +1,10 @@
|
|
1
|
-
//
|
1
|
+
// Theme variables
|
2
2
|
//
|
3
3
|
@import '../common/variables';
|
4
4
|
//
|
5
|
-
// Bootstrap
|
6
|
-
//
|
7
|
-
@import 'bootstrap';
|
8
|
-
//
|
9
|
-
// Bootstrap theme
|
10
|
-
//
|
11
|
-
@import '../common/bootstrap';
|
12
|
-
@import '../common/selectize';
|
13
|
-
//
|
14
5
|
// 3rd party (from gems)
|
15
6
|
//
|
7
|
+
@import 'bootstrap';
|
16
8
|
@import 'font-awesome';
|
17
9
|
//
|
18
10
|
// 3rd party (from vendor)
|
@@ -20,3 +12,12 @@
|
|
20
12
|
@import 'daterangepicker/daterangepicker';
|
21
13
|
@import 'trumbowyg/trumbowyg';
|
22
14
|
@import 'trumbowyg/plugins/colors/trumbowyg.colors';
|
15
|
+
//
|
16
|
+
// 3rd party overwrites
|
17
|
+
//
|
18
|
+
@import '../common/bootstrap';
|
19
|
+
@import '../common/selectize';
|
20
|
+
//
|
21
|
+
// Theme styles
|
22
|
+
//
|
23
|
+
@import 'bootstrap/tables';
|
@@ -1,15 +1,20 @@
|
|
1
|
-
//
|
1
|
+
// Theme variables
|
2
2
|
//
|
3
3
|
@import '../common/variables';
|
4
4
|
//
|
5
|
-
//
|
5
|
+
// 3rd party (from gems)
|
6
6
|
//
|
7
7
|
@import 'bootstrap';
|
8
|
+
@import 'font-awesome';
|
9
|
+
//
|
10
|
+
// 3rd party (from vendor)
|
8
11
|
//
|
9
|
-
//
|
12
|
+
// none
|
13
|
+
//
|
14
|
+
// 3rd party overwrites
|
10
15
|
//
|
11
16
|
@import '../common/bootstrap';
|
12
17
|
//
|
13
|
-
//
|
18
|
+
// Theme styles
|
14
19
|
//
|
15
|
-
|
20
|
+
// none
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<tr>
|
2
|
+
<td><%= image_tag(asset.file.tiny.url, alt: asset.file_name) %></td>
|
3
|
+
<td><%= asset.file_name %></td>
|
4
|
+
<td><%= asset.content_type %></td>
|
5
|
+
<td><%= number_to_human_size(asset.file_size) %></td>
|
6
|
+
<td class="actions text-right">
|
7
|
+
<%= link_to(fa_icon("info-circle", text: Archangel.t(:show)), backend_asset_path(asset), class: "btn btn-info btn-sm") %>
|
8
|
+
<%= link_to(fa_icon("check-circle", text: Archangel.t(:edit)), edit_backend_asset_path(asset), class: "btn btn-warning btn-sm") %>
|
9
|
+
<%= link_to(fa_icon("times-circle", text: Archangel.t(:destroy)), backend_asset_path(asset), class: "btn btn-danger btn-sm",
|
10
|
+
method: :delete, data: { confirm: Archangel.t(:are_you_sure) }) %>
|
11
|
+
</td>
|
12
|
+
</tr>
|
@@ -30,20 +30,7 @@
|
|
30
30
|
</thead>
|
31
31
|
|
32
32
|
<tbody>
|
33
|
-
|
34
|
-
<tr>
|
35
|
-
<td><%= image_tag(asset.file.tiny.url, alt: asset.file_name) %></td>
|
36
|
-
<td><%= asset.file_name %></td>
|
37
|
-
<td><%= asset.content_type %></td>
|
38
|
-
<td><%= number_to_human_size(asset.file_size) %></td>
|
39
|
-
<td class="actions text-right">
|
40
|
-
<%= link_to(fa_icon("info-circle", text: Archangel.t(:show)), backend_asset_path(asset), class: "btn btn-info btn-sm") %>
|
41
|
-
<%= link_to(fa_icon("check-circle", text: Archangel.t(:edit)), edit_backend_asset_path(asset), class: "btn btn-warning btn-sm") %>
|
42
|
-
<%= link_to(fa_icon("times-circle", text: Archangel.t(:destroy)), backend_asset_path(asset), class: "btn btn-danger btn-sm",
|
43
|
-
method: :delete, data: { confirm: Archangel.t(:are_you_sure) }) %>
|
44
|
-
</td>
|
45
|
-
</tr>
|
46
|
-
<% end %>
|
33
|
+
<%= render partial: "asset", collection: @assets %>
|
47
34
|
</tbody>
|
48
35
|
</table>
|
49
36
|
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<tr>
|
2
|
+
<td><%= collection.name %></td>
|
3
|
+
<td><%= collection.slug %></td>
|
4
|
+
<td class="actions text-right">
|
5
|
+
<%= link_to(fa_icon("info-circle", text: Archangel.t(:show)), backend_collection_path(collection), class: "btn btn-info btn-sm") %>
|
6
|
+
<%= link_to(fa_icon("check-circle", text: Archangel.t(:edit)), edit_backend_collection_path(collection), class: "btn btn-warning btn-sm") %>
|
7
|
+
<%= link_to(fa_icon("times-circle", text: Archangel.t(:destroy)), backend_collection_path(collection), class: "btn btn-danger btn-sm",
|
8
|
+
method: :delete, data: { confirm: Archangel.t(:are_you_sure) }) %>
|
9
|
+
</td>
|
10
|
+
</tr>
|
@@ -28,18 +28,7 @@
|
|
28
28
|
</thead>
|
29
29
|
|
30
30
|
<tbody>
|
31
|
-
|
32
|
-
<tr>
|
33
|
-
<td><%= collection.name %></td>
|
34
|
-
<td><%= collection.slug %></td>
|
35
|
-
<td class="actions text-right">
|
36
|
-
<%= link_to(fa_icon("info-circle", text: Archangel.t(:show)), backend_collection_path(collection), class: "btn btn-info btn-sm") %>
|
37
|
-
<%= link_to(fa_icon("check-circle", text: Archangel.t(:edit)), edit_backend_collection_path(collection), class: "btn btn-warning btn-sm") %>
|
38
|
-
<%= link_to(fa_icon("times-circle", text: Archangel.t(:destroy)), backend_collection_path(collection), class: "btn btn-danger btn-sm",
|
39
|
-
method: :delete, data: { confirm: Archangel.t(:are_you_sure) }) %>
|
40
|
-
</td>
|
41
|
-
</tr>
|
42
|
-
<% end %>
|
31
|
+
<%= render partial: "collection", collection: @collections %>
|
43
32
|
</tbody>
|
44
33
|
</table>
|
45
34
|
</div>
|