biovision 0.0.200518.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +214 -0
  4. data/Rakefile +22 -0
  5. data/app/assets/config/biovision_manifest.js +1 -0
  6. data/app/assets/images/biovision/components/carousel/arrow-left.svg +4 -0
  7. data/app/assets/images/biovision/components/carousel/arrow-right.svg +4 -0
  8. data/app/assets/images/biovision/icons/breadcrumb-hover.svg +1 -0
  9. data/app/assets/images/biovision/icons/breadcrumb.svg +1 -0
  10. data/app/assets/images/biovision/icons/components/contact.svg +26 -0
  11. data/app/assets/images/biovision/icons/components/content.svg +20 -0
  12. data/app/assets/images/biovision/icons/components/users.svg +21 -0
  13. data/app/assets/images/biovision/icons/key.svg +16 -0
  14. data/app/assets/images/biovision/icons/log_in.svg +15 -0
  15. data/app/assets/images/biovision/icons/log_out.svg +15 -0
  16. data/app/assets/images/biovision/icons/messages/error.svg +14 -0
  17. data/app/assets/images/biovision/icons/messages/info.svg +8 -0
  18. data/app/assets/images/biovision/icons/messages/success.svg +12 -0
  19. data/app/assets/images/biovision/icons/messages/warning.svg +13 -0
  20. data/app/assets/images/biovision/icons/settings.svg +41 -0
  21. data/app/assets/images/biovision/placeholders/16x9.svg +11 -0
  22. data/app/assets/images/biovision/placeholders/1x1.svg +11 -0
  23. data/app/assets/images/biovision/placeholders/3x2.svg +11 -0
  24. data/app/assets/images/biovision/placeholders/user.svg +15 -0
  25. data/app/assets/stylesheets/biovision/admin.scss +6 -0
  26. data/app/assets/stylesheets/biovision/admin/components.scss +59 -0
  27. data/app/assets/stylesheets/biovision/admin/default.scss +57 -0
  28. data/app/assets/stylesheets/biovision/admin/layout.scss +95 -0
  29. data/app/assets/stylesheets/biovision/admin/vars.scss +56 -0
  30. data/app/assets/stylesheets/biovision/biovision.scss +134 -0
  31. data/app/assets/stylesheets/biovision/biovision/messages.scss +41 -0
  32. data/app/assets/stylesheets/biovision/components/carousel.scss +53 -0
  33. data/app/assets/stylesheets/biovision/components/forms.scss +85 -0
  34. data/app/assets/stylesheets/biovision/components/hamburger.scss +56 -0
  35. data/app/assets/stylesheets/biovision/components/lists.scss +91 -0
  36. data/app/assets/stylesheets/biovision/default.scss +57 -0
  37. data/app/assets/stylesheets/biovision/themes/default_theme.scss +2 -0
  38. data/app/assets/stylesheets/biovision/themes/default_theme/components.scss +3 -0
  39. data/app/assets/stylesheets/biovision/themes/default_theme/layout.scss +44 -0
  40. data/app/assets/stylesheets/biovision/themes/default_theme/layout/footer.scss +0 -0
  41. data/app/assets/stylesheets/biovision/themes/default_theme/layout/header.scss +39 -0
  42. data/app/assets/stylesheets/biovision/vars.scss +53 -0
  43. data/app/controllers/admin/agents_controller.rb +15 -0
  44. data/app/controllers/admin/components_controller.rb +174 -0
  45. data/app/controllers/admin/index_controller.rb +11 -0
  46. data/app/controllers/admin/ip_addresses_controller.rb +15 -0
  47. data/app/controllers/admin_controller.rb +14 -0
  48. data/app/controllers/authentication_controller.rb +79 -0
  49. data/app/controllers/concerns/authentication.rb +45 -0
  50. data/app/controllers/index_controller.rb +8 -0
  51. data/app/controllers/my/confirmations_controller.rb +2 -0
  52. data/app/controllers/my/index_controller.rb +8 -0
  53. data/app/controllers/my/profiles_controller.rb +128 -0
  54. data/app/controllers/my/recoveries_controller.rb +2 -0
  55. data/app/helpers/biovision_components_helper.rb +14 -0
  56. data/app/helpers/users_helper.rb +11 -0
  57. data/app/lib/biovision/components/base_component.rb +177 -0
  58. data/app/lib/biovision/components/component_settings.rb +30 -0
  59. data/app/lib/biovision/components/privilege_handler.rb +77 -0
  60. data/app/lib/biovision/components/track_component.rb +9 -0
  61. data/app/lib/biovision/components/users/authentication.rb +47 -0
  62. data/app/lib/biovision/components/users/code_handler.rb +23 -0
  63. data/app/lib/biovision/components/users/profile_handler.rb +12 -0
  64. data/app/lib/biovision/components/users/registration_handler.rb +99 -0
  65. data/app/lib/biovision/components/users_component.rb +47 -0
  66. data/app/lib/biovision/notifiers/base_notifier.rb +69 -0
  67. data/app/lib/biovision/notifiers/socialization_notifier.rb +31 -0
  68. data/app/lib/biovision/notifiers/users_notifier.rb +15 -0
  69. data/app/models/agent.rb +35 -0
  70. data/app/models/biovision_component.rb +45 -0
  71. data/app/models/biovision_component_user.rb +21 -0
  72. data/app/models/browser.rb +34 -0
  73. data/app/models/code.rb +71 -0
  74. data/app/models/concerns/checkable.rb +22 -0
  75. data/app/models/concerns/flat_priority.rb +50 -0
  76. data/app/models/concerns/has_language.rb +10 -0
  77. data/app/models/concerns/has_owner.rb +22 -0
  78. data/app/models/concerns/has_simple_image.rb +18 -0
  79. data/app/models/concerns/has_track.rb +10 -0
  80. data/app/models/concerns/has_uuid.rb +12 -0
  81. data/app/models/concerns/meta_texts.rb +16 -0
  82. data/app/models/concerns/nested_priority.rb +58 -0
  83. data/app/models/concerns/required_unique_name.rb +16 -0
  84. data/app/models/concerns/required_unique_slug.rb +15 -0
  85. data/app/models/concerns/toggleable.rb +33 -0
  86. data/app/models/foreign_site.rb +34 -0
  87. data/app/models/foreign_user.rb +21 -0
  88. data/app/models/ip_address.rb +31 -0
  89. data/app/models/language.rb +31 -0
  90. data/app/models/login_attempt.rb +35 -0
  91. data/app/models/metric.rb +48 -0
  92. data/app/models/metric_value.rb +11 -0
  93. data/app/models/notification.rb +37 -0
  94. data/app/models/simple_image.rb +47 -0
  95. data/app/models/simple_image_tag.rb +30 -0
  96. data/app/models/simple_image_tag_image.rb +13 -0
  97. data/app/models/token.rb +96 -0
  98. data/app/models/user.rb +136 -0
  99. data/app/models/user_language.rb +15 -0
  100. data/app/uploaders/simple_image_uploader.rb +96 -0
  101. data/app/uploaders/user_image_uploader.rb +58 -0
  102. data/app/views/admin/agents/_nav_item.html.erb +6 -0
  103. data/app/views/admin/agents/entity/_in_list.html.erb +6 -0
  104. data/app/views/admin/agents/index.html.erb +13 -0
  105. data/app/views/admin/components/_list.html.erb +12 -0
  106. data/app/views/admin/components/entity/_links.html.erb +35 -0
  107. data/app/views/admin/components/entity/_section.html.erb +12 -0
  108. data/app/views/admin/components/index.html.erb +12 -0
  109. data/app/views/admin/components/links/_track.html.erb +2 -0
  110. data/app/views/admin/components/links/_users.html.erb +11 -0
  111. data/app/views/admin/components/privileges.html.erb +20 -0
  112. data/app/views/admin/components/privileges/_component_user.html.erb +17 -0
  113. data/app/views/admin/components/privileges/_links.html.erb +35 -0
  114. data/app/views/admin/components/privileges/_privilege_flag.html.erb +28 -0
  115. data/app/views/admin/components/privileges/_users.html.erb +23 -0
  116. data/app/views/admin/components/settings.html.erb +39 -0
  117. data/app/views/admin/components/settings/_new_parameter.html.erb +46 -0
  118. data/app/views/admin/components/settings/_parameters.html.erb +20 -0
  119. data/app/views/admin/components/settings/_setting.html.erb +18 -0
  120. data/app/views/admin/components/settings/_settings.html.erb +31 -0
  121. data/app/views/admin/components/show.html.erb +14 -0
  122. data/app/views/admin/index/index.html.erb +14 -0
  123. data/app/views/admin/ip_addresses/_nav_item.html.erb +6 -0
  124. data/app/views/admin/ip_addresses/entity/_in_list.html.erb +6 -0
  125. data/app/views/admin/ip_addresses/index.html.erb +13 -0
  126. data/app/views/admin/unauthorized.html.erb +19 -0
  127. data/app/views/authentication/_form.html.erb +40 -0
  128. data/app/views/authentication/failed.js.erb +3 -0
  129. data/app/views/authentication/new.html.erb +21 -0
  130. data/app/views/index/index.html.erb +0 -0
  131. data/app/views/layouts/admin.html.erb +23 -0
  132. data/app/views/layouts/admin/_breadcrumbs.html.erb +8 -0
  133. data/app/views/layouts/admin/_footer.html.erb +10 -0
  134. data/app/views/layouts/admin/_header.html.erb +18 -0
  135. data/app/views/layouts/admin/header/_logo.html.erb +3 -0
  136. data/app/views/layouts/application/_footer.html.erb +8 -0
  137. data/app/views/layouts/application/_header.html.erb +9 -0
  138. data/app/views/layouts/application/header/_authentication.html.erb +13 -0
  139. data/app/views/my/index/index.html.erb +0 -0
  140. data/app/views/my/profiles/closed.html.erb +12 -0
  141. data/app/views/my/profiles/new.html.erb +17 -0
  142. data/app/views/my/profiles/new/_form.html.erb +147 -0
  143. data/app/views/shared/_breadcrumbs.html.erb +8 -0
  144. data/app/views/shared/_cookie_notification.html.erb +4 -0
  145. data/app/views/shared/_flash_messages.html.erb +7 -0
  146. data/app/views/shared/_meta_texts.html.erb +31 -0
  147. data/app/views/shared/_nothing_found.html.erb +1 -0
  148. data/app/views/shared/_pagination.jbuilder +15 -0
  149. data/app/views/shared/admin/_list.html.erb +19 -0
  150. data/app/views/shared/admin/_list_with_priority.html.erb +19 -0
  151. data/app/views/shared/admin/_toggleable.html.erb +8 -0
  152. data/app/views/shared/entity/_list_of_errors.html.erb +7 -0
  153. data/app/views/shared/forms/errors.js.erb +5 -0
  154. data/config/initializers/carrierwave.rb +27 -0
  155. data/config/initializers/pluralization.rb +2 -0
  156. data/config/locales/biovision-ru.yml +90 -0
  157. data/config/locales/components-ru.yml +81 -0
  158. data/config/locales/track-ru.yml +40 -0
  159. data/config/locales/users-ru.yml +130 -0
  160. data/config/routes.rb +75 -0
  161. data/db/migrate/20191228000000_create_biovision_components.rb +72 -0
  162. data/db/migrate/20200224000000_create_track_component.rb +59 -0
  163. data/db/migrate/20200224000010_create_users_component.rb +189 -0
  164. data/db/migrate/20200404000000_create_simple_images.rb +54 -0
  165. data/lib/biovision.rb +9 -0
  166. data/lib/biovision/base_methods.rb +167 -0
  167. data/lib/biovision/engine.rb +40 -0
  168. data/lib/biovision/version.rb +5 -0
  169. data/lib/tasks/biovision_tasks.rake +4 -0
  170. metadata +392 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 817fb32980253517bb13eeff8c2d01ba994c82db093c58f8a770c212ecee25c6
4
+ data.tar.gz: b29d966a12f8dda98db8777e7f224001ee40f9f67c58c3192a5eda0d970e9e65
5
+ SHA512:
6
+ metadata.gz: 27904974e644b24f35aef5366e9e92927971a1c20e255b919724aadc27ac8854dcdb2f9dd2f83a0b8bec8358878bbdd36f877b721d29529f7336e6bf8e628f9b
7
+ data.tar.gz: 6eece2a2e1742e4438a949ff2718be4d16d03b4b767c0804c39243454d60967fe256722d81e2531c81c7f03e60245082d36d236d9593b029bec685bc58b62959
@@ -0,0 +1,20 @@
1
+ Copyright 2019 Maxim Khan-Magomedov
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,214 @@
1
+ # Biovision
2
+
3
+ Новая версия Biovision CMS. Используйте на свой страх и риск.
4
+
5
+ ## Добавления в `.gitignore`
6
+
7
+ ```
8
+ /public/uploads
9
+
10
+ /spec/examples.txt
11
+ /spec/support/uploads/*
12
+
13
+ .env
14
+ ```
15
+
16
+ ## После изменений в `.gitignore`
17
+
18
+ Далее, первым делом надо из папки sample в корне проекта `biovision` скопировать
19
+ файлы в корень своего проекта (прямо поверх того, что там уже есть).
20
+
21
+ Не забудь отредактировать `.env`, девелопернейм!
22
+
23
+ Ещё нужно поменять `example.com` на актуальное название.
24
+
25
+ Также стоит удалить `app/assets/application.css`, так как используется scss,
26
+ и локаль `config/locales/en.yml`, если не планируется использование английской
27
+ локали.
28
+
29
+ ## Добавления в `Gemfile`
30
+
31
+ ```ruby
32
+ gem 'dotenv-rails'
33
+
34
+ gem 'autoprefixer-rails', group: :production
35
+
36
+ gem 'biovision', git: 'https://github.com/Biovision/biovision.git'
37
+ # gem 'biovision', path: '/Users/maxim/Projects/Biovision/gems/biovision'
38
+
39
+ group :development, :test do
40
+ gem 'database_cleaner'
41
+ gem 'factory_bot_rails'
42
+ gem 'rspec-rails'
43
+ end
44
+
45
+ group :development do
46
+ gem 'mina'
47
+ end
48
+ ```
49
+
50
+ ## Изменения в `config/environments/production.rb`
51
+
52
+ Нужно раскомментировать строку `config.require_master_key = true` (на момент
53
+ написания это `19` строка).
54
+
55
+ Нужно выставить уровень сообщения об ошибках в `:warn`
56
+ (`config.log_level = :warn` в районе `54` строки).
57
+
58
+ ## Изменения в `app/mailers/application_mailer.rb`
59
+
60
+ Нужно удалить строку с отправителем по умолчанию
61
+ (`default from: 'from@example.com'`), иначе при отправке писем в бою будет
62
+ ошибка с неправильным отправителем, независимо от того, что написано
63
+ в конфигурации в `production.rb`.
64
+
65
+ ## Актуализация `config/database.yml`
66
+
67
+ В файле `config/database.yml` нужно поменять названия баз данных на актуальные:
68
+
69
+ ```yaml
70
+ default: &default
71
+ adapter: postgresql
72
+ encoding: unicode
73
+ pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
74
+
75
+ development:
76
+ <<: *default
77
+ database: example # Поменять на актуальное название
78
+
79
+ test:
80
+ <<: *default
81
+ database: example_test # Такое же, как в development, но с приставкой _test
82
+
83
+ production:
84
+ <<: *default
85
+ database: example # Такое же, как в development, например
86
+ username: example # Поменять на актуального пользователя
87
+ password: <%= ENV['DATABASE_PASSWORD'] %>
88
+ host: localhost
89
+ ```
90
+
91
+ ## Добавления в config/application.rb
92
+
93
+ Это добавляется в блок конфигурирования. Без этой настройки часовой пояс будет
94
+ задан как UTC.
95
+
96
+ ```ruby
97
+ config.time_zone = 'Moscow'
98
+ ```
99
+
100
+ ## Добавления в `config/application_controller.rb`
101
+
102
+ Добавить это в начале класса.
103
+
104
+ ```ruby
105
+ def default_url_options
106
+ params.key?(:locale) ? { locale: I18n.locale } : {}
107
+ end
108
+ ```
109
+
110
+ ## Добавления в `config/routes.rb`
111
+
112
+ ```ruby
113
+ concern :check do
114
+ post :check, on: :collection, defaults: { format: :json }
115
+ end
116
+
117
+ concern :toggle do
118
+ post :toggle, on: :member, defaults: { format: :json }
119
+ end
120
+
121
+ concern :priority do
122
+ post :priority, on: :member, defaults: { format: :json }
123
+ end
124
+
125
+ concern :removable_image do
126
+ delete :image, action: :destroy_image, on: :member, defaults: { format: :json }
127
+ end
128
+
129
+ concern :lock do
130
+ member do
131
+ put :lock, defaults: { format: :json }
132
+ delete :lock, action: :unlock, defaults: { format: :json }
133
+ end
134
+ end
135
+
136
+ scope '(:locale)', constraints: { locale: /ru|en/ } do
137
+ root 'index#index'
138
+ end
139
+ ```
140
+
141
+ ## Дополнения в config/puma.rb
142
+
143
+ Нужно обязательно закомментировать строку с портом, так как используется сокет.
144
+ На момент написания документации это `12` строка:
145
+ `port ENV.fetch("PORT") { 3000 }`
146
+
147
+ ```ruby
148
+ if ENV['RAILS_ENV'] == 'production'
149
+ shared_path = '/var/www/example.com/shared'
150
+ logs_dir = "#{shared_path}/log"
151
+
152
+ state_path "#{shared_path}/tmp/puma/state"
153
+ pidfile "#{shared_path}/tmp/puma/pid"
154
+ bind "unix://#{shared_path}/tmp/puma.sock"
155
+ stdout_redirect "#{logs_dir}/stdout.log", "#{logs_dir}/stderr.log", true
156
+
157
+ activate_control_app
158
+ end
159
+ ```
160
+
161
+ ## Перед запуском:
162
+
163
+ После установки приложения нужно накатить миграции (в консоли):
164
+
165
+ ```bash
166
+ rails db:create
167
+ rails railties:install:migrations
168
+ rails db:migrate
169
+ ```
170
+
171
+ Для удобства запуска на сервере:
172
+
173
+ ```bash
174
+ bundle binstubs bundler --force
175
+ bundle binstub puma
176
+ ```
177
+
178
+ Также имеет смысл запустить `EDITOR=vim rails credentials:edit`, чтобы создать
179
+ зашированный файл с ключом шифрования сессии (чтобы выйти из vim с сохранением,
180
+ надо набрать :wq).
181
+
182
+ ## Настройка отгрузки через mina
183
+
184
+ Для начала надо запустить в консоли `mina init`. После этого внести изменения
185
+ в `config/deploy.rb`.
186
+
187
+ В начале и середине файла раскомментировать то, что относится к `rbenv`.
188
+ Кроме того, следует проверить настройки соединения по SSH
189
+ (`set :user, 'developer`).
190
+
191
+ Для `shared_dirs` и `shared_files` задать примерно такой вид.
192
+
193
+ ```ruby
194
+ set :shared_dirs, fetch(:shared_dirs, []).push('public/uploads', 'tmp', 'log')
195
+ set :shared_files, fetch(:shared_files, []).push('config/master.key', '.env')
196
+ ```
197
+
198
+ На серверной стороне нужно создать папку для пумы и файла с ключом шифрования:
199
+
200
+ ```bash
201
+ mkdir -p /var/www/example.com/shared/tmp/puma
202
+ mkdir -p /var/www/example.com/shared/config
203
+ ```
204
+
205
+ После этого локально запустить `mina setup`. Для нормальной работы нужно
206
+ не забыть скопировать на сервер `.env` и `config/master.key`.
207
+
208
+ ```bash
209
+ scp .env biovision:/var/www/example.com/shared
210
+ scp config/master.key biovision:/var/www/example.com/shared/config
211
+ ```
212
+
213
+ ## License
214
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,22 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Biovision'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("spec/test_app/Rakefile", __dir__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+ load 'rails/tasks/statistics.rake'
21
+
22
+ require 'bundler/gem_tasks'
@@ -0,0 +1 @@
1
+ //= link_tree ../images
@@ -0,0 +1,4 @@
1
+ <svg version="1.1" viewBox="0 0 12 36" width="12px" height="36px" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Left arrow (wide)</title>
3
+ <polyline points="10,2 2,18 10,34" stroke="#333" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg version="1.1" viewBox="0 0 12 36" width="12px" height="36px" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Right arrow (wide)</title>
3
+ <polyline points="2,2 10,18 2,34" stroke="#333" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1 @@
1
+ <svg height="12px" version="1.1" viewBox="0 0 6 12" width="6px" xmlns="http://www.w3.org/2000/svg"><polyline points="4,1 1,5.5 4,10" fill="none" stroke="#f77" /></svg>
@@ -0,0 +1 @@
1
+ <svg height="12px" version="1.1" viewBox="0 0 6 12" width="6px" xmlns="http://www.w3.org/2000/svg"><polyline points="1,1 4,5.5 1,10" fill="none" stroke="#777" /></svg>
@@ -0,0 +1,26 @@
1
+ <svg version="1.1" viewBox="0 0 24 24" width="24px" height="24px" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Contact</title>
3
+ <defs>
4
+ <style type="text/css">
5
+ * { stroke-width: 1; }
6
+ .a { stroke: #777; }
7
+ .b { stroke: #555; }
8
+ .c { fill: #3aa; }
9
+ line { stroke-linecap: round; }
10
+ </style>
11
+ </defs>
12
+ <g class="a">
13
+ <rect x="1" y="1" width="15" height="10" fill="#fff"/>
14
+ <polyline points="1,1 9,5 16,1" fill="none"/>
15
+ </g>
16
+ <g class="b">
17
+ <rect x="7" y="6" width="10" height="17" rx="2" fill="#eee"/>
18
+ <line x1="10" y1="8" x2="14" y2="8" />
19
+ <circle cx="12.25" cy="21" r=".5"/>
20
+ <rect x="8" y="9.5" width="8.125" height="10" rx="1" ry="1" fill="#555" stroke="none" />
21
+ </g>
22
+ <g class="c">
23
+ <path d="M20,24 l-3.5,-8 q4,-8 7,0 z"/>
24
+ <circle cx="20.125" cy="15.25" r="1.5" fill="#f7a"/>
25
+ </g>
26
+ </svg>
@@ -0,0 +1,20 @@
1
+ <svg version="1.1" viewBox="0 0 24 24" width="24px" height="24px" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Content</title>
3
+ <defs>
4
+ <style type="text/css">
5
+ rect { stroke-width: 1; stroke: #aaa }
6
+ line { stroke-width: 1 }
7
+ </style>
8
+ </defs>
9
+ <rect x="5" y="2" width="10" height="16" fill="#ddd"/>
10
+ <rect x="7" y="4" width="10" height="16" fill="#eee"/>
11
+ <g>
12
+ <rect x="9" y="6" width="10" height="16" fill="#fff"/>
13
+ <line x1="11" y1="9" x2="14" y2="9" stroke="#111"/>
14
+ <line x1="11" y1="11" x2="17" y2="11" stroke="#555"/>
15
+ <line x1="11" y1="13" x2="17" y2="13" stroke="#555"/>
16
+ <line x1="11" y1="15" x2="16" y2="15" stroke="#555"/>
17
+ <line x1="11" y1="18" x2="17" y2="18" stroke="#555"/>
18
+ <line x1="11" y1="20" x2="17" y2="20" stroke="#555"/>
19
+ </g>
20
+ </svg>
@@ -0,0 +1,21 @@
1
+ <svg version="1.1" viewBox="0 0 24 24" width="24px" height="24px" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Users</title>
3
+ <defs>
4
+ <style type="text/css">
5
+ .a { stroke-width: 1; stroke: #aaa; fill: #eee; }
6
+ .b { stroke-width: 1.5; stroke: #333; fill: #777; }
7
+ </style>
8
+ </defs>
9
+ <g class="a">
10
+ <ellipse cx="6.5" cy="7" rx="2" ry="3.2"/>
11
+ <path d="M1,16 Q6.5,8 12,16 z" stroke-linejoin="round"/>
12
+ </g>
13
+ <g class="a">
14
+ <ellipse cx="18.5" cy="7" rx="2" ry="3.2"/>
15
+ <path d="M13,16 Q18.5,8 23,16 z" stroke-linejoin="round"/>
16
+ </g>
17
+ <g class="b">
18
+ <ellipse cx="12.5" cy="10" rx="3.5" ry="4.5"/>
19
+ <path d="M3,22 Q12,11 22,22 z" stroke-linejoin="round"/>
20
+ </g>
21
+ </svg>
@@ -0,0 +1,16 @@
1
+ <svg version="1.1" viewBox="0 0 24 24" width="24px" height="24px" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Key</title>
3
+ <defs>
4
+ <style type="text/css">
5
+ * { stroke: #ada33d; stroke-width: 1.5; }
6
+ line { stroke-linecap: round; }
7
+ </style>
8
+ </defs>
9
+ <g>
10
+ <circle cx="4" cy="20" r="3" fill="none"/>
11
+ <line x1="6" y1="18" x2="20" y2="4"/>
12
+ <line x1="19" y1="5" x2="21" y2="7"/>
13
+ <line x1="17" y1="7" x2="20" y2="10"/>
14
+ <line x1="14" y1="8" x2="16" y2="10"/>
15
+ </g>
16
+ </svg>
@@ -0,0 +1,15 @@
1
+ <svg height="24" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Log in</title>
3
+ <style>
4
+ * { stroke: #777; fill: none; }
5
+ .a { stroke-width: 1 }
6
+ .b { stroke-width: 2 }
7
+ </style>
8
+ <g>
9
+ <polyline points="9,7 9,2 22,2 22,22 9,22 9,17" class="b"/>
10
+ <g class="a">
11
+ <line x1="2" y1="12" x2="17" y2="12"/>
12
+ <polyline points="14,9 17,12 14,15"/>
13
+ </g>
14
+ </g>
15
+ </svg>
@@ -0,0 +1,15 @@
1
+ <svg height="24" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Log out</title>
3
+ <style>
4
+ * { stroke: #777; fill: none; }
5
+ .a { stroke-width: 1 }
6
+ .b { stroke-width: 2 }
7
+ </style>
8
+ <g>
9
+ <polyline points="9,7 9,2 22,2 22,22 9,22 9,17" class="b"/>
10
+ <g class="a">
11
+ <line x1="2" y1="12" x2="17" y2="12"/>
12
+ <polyline points="5,9 2,12 5,15"/>
13
+ </g>
14
+ </g>
15
+ </svg>
@@ -0,0 +1,14 @@
1
+ <svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <title>Error</title>
4
+ <style>
5
+ * { stroke: #fff }
6
+ line { stroke-linecap: round; stroke-width: 4 }
7
+ </style>
8
+ </defs>
9
+ <g>
10
+ <circle cx="16" cy="16" r="14" fill="red" stroke-width="2"/>
11
+ <line x1="11" y1="11" x2="21" y2="21"/>
12
+ <line x1="11" y1="21" x2="21" y2="11"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Information</title>
3
+ <g>
4
+ <circle cx="16" cy="16" r="14" fill="blue" stroke="#fff" stroke-width="2"/>
5
+ <circle cx="16" cy="10" r="2" fill="#fff"/>
6
+ <line x1="16" x2="16" y1="16" y2="23" stroke="#fff" stroke-width="4" stroke-linecap="round"/>
7
+ </g>
8
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <title>Success</title>
4
+ <style>
5
+ * { stroke: #fff }
6
+ </style>
7
+ </defs>
8
+ <g>
9
+ <circle cx="16" cy="16" r="14" fill="green" stroke-width="2"/>
10
+ <polyline points="10 17, 16 23, 22 11" fill="none" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
11
+ </g>
12
+ </svg>