aureus 1.3.1 → 2.1.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.
Files changed (137) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -1
  3. data/Gemfile +9 -8
  4. data/Gemfile.lock +105 -104
  5. data/README.md +80 -0
  6. data/Rakefile +3 -16
  7. data/app/assets/javascripts/aureus/index.js +78 -20
  8. data/app/assets/stylesheets/aureus/index.scss +3 -35
  9. data/app/assets/stylesheets/aureus/skin/default.scss +52 -0
  10. data/app/assets/stylesheets/aureus/theme.scss +7 -0
  11. data/app/assets/stylesheets/aureus/theme/base.scss +19 -0
  12. data/app/assets/stylesheets/aureus/theme/content.scss +65 -0
  13. data/app/assets/stylesheets/aureus/{form.scss → theme/form.scss} +27 -27
  14. data/app/assets/stylesheets/aureus/theme/messages.scss +16 -0
  15. data/app/assets/stylesheets/aureus/theme/navigation.scss +42 -0
  16. data/app/assets/stylesheets/aureus/theme/table.scss +121 -0
  17. data/app/assets/stylesheets/aureus/theme/toolbar.scss +80 -0
  18. data/aureus.gemspec +21 -12
  19. data/config.ru +10 -0
  20. data/lib/aureus.rb +22 -18
  21. data/lib/aureus/components/box.rb +58 -0
  22. data/lib/aureus/components/content.rb +19 -0
  23. data/lib/aureus/components/data_table.rb +169 -0
  24. data/lib/aureus/components/listing.rb +43 -0
  25. data/lib/aureus/components/messages.rb +27 -0
  26. data/lib/aureus/components/navigation.rb +48 -0
  27. data/lib/aureus/components/row.rb +69 -0
  28. data/lib/aureus/components/simple_map.rb +21 -0
  29. data/lib/aureus/components/toolbar.rb +124 -0
  30. data/lib/aureus/engine.rb +8 -2
  31. data/lib/aureus/helper.rb +56 -55
  32. data/lib/aureus/renderable.rb +4 -12
  33. data/lib/aureus/version.rb +2 -2
  34. data/lib/generators/aureus/devise_i18n/devise_i18n_generator.rb +17 -12
  35. data/{config → lib/generators/aureus/devise_i18n}/locales/devise_base.de.yml +0 -0
  36. data/{config → lib/generators/aureus/devise_i18n}/locales/devise_base.en.yml +1 -1
  37. data/{config → lib/generators/aureus/devise_i18n}/locales/devise_mail.de.yml +1 -1
  38. data/{config → lib/generators/aureus/devise_i18n}/locales/devise_mail.en.yml +1 -1
  39. data/{config → lib/generators/aureus/devise_i18n}/locales/devise_ui.de.yml +0 -0
  40. data/{config → lib/generators/aureus/devise_i18n}/locales/devise_ui.en.yml +0 -0
  41. data/lib/generators/aureus/devise_invitable_i18n/devise_invitable_i18n_generator.rb +25 -0
  42. data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_base.de.yml +11 -0
  43. data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_base.en.yml +11 -0
  44. data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_mail.de.yml +9 -0
  45. data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_mail.en.yml +9 -0
  46. data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_ui.de.yml +12 -0
  47. data/lib/generators/aureus/devise_invitable_i18n/locales/devise_invitable_ui.en.yml +12 -0
  48. data/lib/generators/aureus/devise_invitable_views/devise_invitable_views_generator.rb +23 -0
  49. data/lib/generators/aureus/devise_invitable_views/templates/devise/invitations/edit.html.haml +9 -0
  50. data/lib/generators/aureus/devise_invitable_views/templates/devise/invitations/new.html.haml +8 -0
  51. data/lib/generators/aureus/devise_invitable_views/templates/devise/mailer/invitation_instructions.html.haml +5 -0
  52. data/lib/generators/aureus/devise_views/devise_views_generator.rb +17 -15
  53. data/lib/generators/aureus/devise_views/templates/devise/confirmations/new.html.haml +5 -5
  54. data/lib/generators/aureus/devise_views/templates/devise/mailer/confirmation_instructions.html.haml +3 -3
  55. data/lib/generators/aureus/devise_views/templates/devise/mailer/reset_password_instructions.html.haml +5 -5
  56. data/lib/generators/aureus/devise_views/templates/devise/mailer/unlock_instructions.html.haml +4 -4
  57. data/lib/generators/aureus/devise_views/templates/devise/passwords/edit.html.haml +7 -7
  58. data/lib/generators/aureus/devise_views/templates/devise/passwords/new.html.haml +5 -5
  59. data/lib/generators/aureus/devise_views/templates/devise/registrations/edit.html.haml +9 -9
  60. data/lib/generators/aureus/devise_views/templates/devise/registrations/new.html.haml +7 -7
  61. data/lib/generators/aureus/devise_views/templates/devise/sessions/new.html.haml +7 -7
  62. data/lib/generators/aureus/devise_views/templates/devise/shared/_links.html.haml +6 -6
  63. data/lib/generators/aureus/devise_views/templates/devise/unlocks/new.html.haml +5 -5
  64. data/lib/generators/aureus/layout/layout_generator.rb +10 -10
  65. data/lib/generators/aureus/layout/templates/layout.html.haml +8 -8
  66. data/lib/generators/aureus/views/templates/views/_form.html.haml +3 -3
  67. data/lib/generators/aureus/views/templates/views/_item.html.haml +2 -2
  68. data/lib/generators/aureus/views/templates/views/_list.html.haml +8 -8
  69. data/lib/generators/aureus/views/templates/views/edit.html.haml +4 -4
  70. data/lib/generators/aureus/views/templates/views/index.html.haml +3 -3
  71. data/lib/generators/aureus/views/templates/views/new.html.haml +4 -4
  72. data/lib/generators/aureus/views/templates/views/show.html.haml +4 -4
  73. data/lib/generators/aureus/views/views_generator.rb +70 -68
  74. data/spec/controllers/all_spec.rb +19 -0
  75. data/spec/internal/app/assets/javascripts/application.js +9 -0
  76. data/spec/internal/app/assets/stylesheets/application.scss +5 -0
  77. data/spec/internal/app/controllers/all_controller.rb +14 -0
  78. data/spec/internal/app/controllers/resources_controller.rb +2 -0
  79. data/spec/{lib/helper → internal/app/models}/resource.rb +0 -0
  80. data/spec/internal/app/views/all/centered.html.haml +5 -0
  81. data/spec/internal/app/views/all/index.html.haml +39 -0
  82. data/spec/internal/app/views/layouts/application.html.haml +24 -0
  83. data/spec/internal/app/views/layouts/naked.html.haml +10 -0
  84. data/spec/internal/config/database.yml +3 -0
  85. data/spec/internal/config/routes.rb +5 -0
  86. data/spec/internal/db/schema.rb +10 -0
  87. data/spec/internal/log/.gitignore +1 -0
  88. data/spec/internal/public/favicon.ico +0 -0
  89. data/spec/lib/generators/devise_i18n_spec.rb +19 -0
  90. data/spec/lib/generators/devise_invitable_i18n_spec.rb +19 -0
  91. data/spec/lib/generators/devise_invitable_views_spec.rb +19 -0
  92. data/spec/lib/generators/devise_views_spec.rb +25 -0
  93. data/spec/lib/generators/layout_spec.rb +17 -0
  94. data/spec/lib/generators/views_spec.rb +26 -0
  95. data/spec/requests/all_spec.rb +12 -0
  96. data/spec/spec_helper.rb +15 -0
  97. metadata +219 -78
  98. data/.rspec +0 -2
  99. data/Guardfile +0 -4
  100. data/Readme.md +0 -370
  101. data/TODO.md +0 -11
  102. data/app/assets/images/aureus/background.png +0 -0
  103. data/app/assets/images/aureus/topbar.png +0 -0
  104. data/app/assets/javascripts/aureus/defaults.js +0 -30
  105. data/app/assets/javascripts/aureus/extensions.js +0 -42
  106. data/app/assets/javascripts/aureus/functions.js +0 -67
  107. data/app/assets/javascripts/aureus/plugins/jquery-calendrical.js +0 -508
  108. data/app/assets/javascripts/aureus/plugins/jquery-datatables.js +0 -11838
  109. data/app/assets/javascripts/aureus/plugins/jquery-qtip.js +0 -15
  110. data/app/assets/stylesheets/aureus/base.scss +0 -48
  111. data/app/assets/stylesheets/aureus/content.scss +0 -100
  112. data/app/assets/stylesheets/aureus/mixins.scss +0 -43
  113. data/app/assets/stylesheets/aureus/navigation.scss +0 -43
  114. data/app/assets/stylesheets/aureus/reset.scss +0 -50
  115. data/app/assets/stylesheets/aureus/table.scss +0 -153
  116. data/app/assets/stylesheets/aureus/topbar.scss +0 -89
  117. data/app/assets/stylesheets/aureus/ui.scss +0 -98
  118. data/lib/aureus/box.rb +0 -54
  119. data/lib/aureus/content.rb +0 -15
  120. data/lib/aureus/data_table.rb +0 -148
  121. data/lib/aureus/listing.rb +0 -39
  122. data/lib/aureus/map.rb +0 -17
  123. data/lib/aureus/messages.rb +0 -23
  124. data/lib/aureus/navigation.rb +0 -42
  125. data/lib/aureus/row.rb +0 -65
  126. data/lib/aureus/toolbar.rb +0 -99
  127. data/spec/lib/helper/schema.rb +0 -6
  128. data/spec/lib/render_spec.rb +0 -16
  129. data/spec/lib/spec_helper.rb +0 -21
  130. data/spec/lib/views/box.haml +0 -14
  131. data/spec/lib/views/content.haml +0 -2
  132. data/spec/lib/views/datatable.haml +0 -11
  133. data/spec/lib/views/listing.haml +0 -5
  134. data/spec/lib/views/messages.haml +0 -2
  135. data/spec/lib/views/navigation.haml +0 -4
  136. data/spec/lib/views/row.haml +0 -28
  137. data/spec/lib/views/toolbar.haml +0 -11
@@ -1,35 +1,3 @@
1
- //= depend_on reset
2
- //= depend_on mixins
3
- //= depend_on base
4
- //= depend_on topbar
5
- //= depend_on navigation
6
- //= depend_on content
7
- //= depend_on table
8
- //= depend_on form
9
- //= depend_on ui
10
-
11
- $asset_app_background: image-path('aureus/background.png');
12
- $asset_topbar_background: image-path('aureus/topbar.png');
13
-
14
- $asset_icon_sort: image-path('aureus/icon-sort.png');
15
- $asset_icon_sort_abc_asc: image-path('aureus/icon-sort-abc-asc.png');
16
- $asset_icon_sort_abc_desc: image-path('aureus/icon-sort-abc-desc.png');
17
-
18
- $asset_icon_pencil: image-path("aureus/icon-pencil.png");
19
- $asset_icon_cross: image-path("aureus/icon-cross.png");
20
- $asset_icon_eye: image-path("aureus/icon-eye.png");
21
- $asset_icon_refresh: image-path("aureus/icon-refresh.png");
22
- $asset_icon_print: image-path("aureus/icon-print.png");
23
-
24
- $color_main_dark: darken($color_main,15);
25
- $color_warn_dark: darken($color_warn,15);
26
-
27
- @import "reset";
28
- @import "mixins";
29
- @import "base";
30
- @import "topbar";
31
- @import "navigation";
32
- @import "content";
33
- @import "table";
34
- @import "form";
35
- @import "ui";
1
+ //= require normalize-rails/normalize
2
+ //= require leaflet
3
+ //= require mapbox
@@ -0,0 +1,52 @@
1
+ $color-background: #ccc;
2
+ $color-font-default: #fff;
3
+
4
+ $color-notice: #3dbc13;
5
+ $color-alert: #ffbb20;
6
+ $color-error: #ff1a1a;
7
+
8
+ $color-box-background: #fff;
9
+ $color-box-header: #00334c;
10
+ $color-box-title: #fff;
11
+ $color-box-button: #fff;
12
+ $color-box-button-hover: #0a89cf;
13
+ $color-box-footer: #59483c;
14
+
15
+ $color-form-hints: #666;
16
+ $color-form-labels: #000;
17
+ $color-form-field-border: #ccc;
18
+ $color-form-field-border-focus: #1e1e1e;
19
+ $color-form-field-text: #000;
20
+ $color-form-button: #59483c;
21
+ $color-form-button-hover: #0a89cf;
22
+ $color-form-button-text: #fff;
23
+
24
+ $color-navigation: #59483c;
25
+ $color-navigation-title: #fff;
26
+ $color-navigation-button: #c6b78d;
27
+ $color-navigation-button-hover: #000;
28
+ $color-navigation-button-text: #000;
29
+ $color-navigation-button-text-hover: #fff;
30
+
31
+ $color-table-head-background: #1e1e1e;
32
+ $color-table-head-border: #59483c;
33
+ $color-table-border: #c6b78d;
34
+ $color-table-link: #00334c;
35
+ $color-table-link-hover: #000;
36
+ $color-table-list-head: #444;
37
+
38
+ $color-toolbar: #1e1e1e;
39
+ $color-toolbar-title: #fff;
40
+ $color-toolbar-info: #59483c;
41
+ $color-toolbar-link: #fff;
42
+ $color-toolbar-link-hover: #c6b78d;
43
+
44
+ $icon-sort: image-path("aureus/icon-sort.png");
45
+ $icon-sort_abc_asc: image-path("aureus/icon-sort-abc-asc.png");
46
+ $icon-sort_abc_desc: image-path("aureus/icon-sort-abc-desc.png");
47
+
48
+ $icon-pencil: image-path("aureus/icon-pencil.png");
49
+ $icon-cross: image-path("aureus/icon-cross.png");
50
+ $icon-eye: image-path("aureus/icon-eye.png");
51
+ $icon-refresh: image-path("aureus/icon-refresh.png");
52
+ $icon-print: image-path("aureus/icon-print.png");
@@ -0,0 +1,7 @@
1
+ @import 'aureus/theme/base';
2
+ @import 'aureus/theme/messages';
3
+ @import 'aureus/theme/toolbar';
4
+ @import 'aureus/theme/navigation';
5
+ @import 'aureus/theme/content';
6
+ @import 'aureus/theme/table';
7
+ @import 'aureus/theme/form';
@@ -0,0 +1,19 @@
1
+ body {
2
+ margin: 0;
3
+ font-size: 14px;
4
+ font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
5
+ color: $color-font-default;
6
+ background-color: $color-background;
7
+ min-width: 1000px;
8
+ }
9
+
10
+ a {
11
+ color: $color-font-default;
12
+ }
13
+
14
+ .translation_missing {
15
+ padding: 0 !important;
16
+ margin: 0 !important;
17
+ color: $color-error !important;
18
+ text-decoration: line-through !important;
19
+ }
@@ -0,0 +1,65 @@
1
+ .aureus-content {
2
+ padding: 20px;
3
+ overflow: hidden;
4
+ .row {
5
+ margin-bottom: 20px;
6
+ overflow: hidden;
7
+ }
8
+ .column {
9
+ float: left;
10
+ overflow: hidden;
11
+ }
12
+ .box {
13
+ background-color: $color-box-background;
14
+ h3 {
15
+ background-color: $color-box-header;
16
+ margin: 0;
17
+ padding: 14px 20px;
18
+ span {
19
+ color: $color-box-title;
20
+ font-size: 16px;
21
+ font-weight: normal;
22
+ }
23
+ a {
24
+ float: right;
25
+ cursor: pointer;
26
+ display: inline-block;
27
+ color: $color-box-button;
28
+ text-decoration: none;
29
+ font-size: 12px;
30
+ padding: 2px 10px;
31
+ margin-left: 5px;
32
+ border: 1px solid $color-box-button;
33
+ }
34
+ a:hover {
35
+ color: $color-box-button-hover;
36
+ border-color: $color-box-button-hover;
37
+ }
38
+ }
39
+ .datatable-wrapper {
40
+ overflow: auto;
41
+ overflow-x: scoll;
42
+ }
43
+ .content {
44
+ margin: 0;
45
+ padding: 12px;
46
+ }
47
+ .foot {
48
+ padding: 10px 20px;
49
+ background-color: $color-box-footer;
50
+ }
51
+ }
52
+ .centered {
53
+ margin: 0 auto;
54
+ margin-top: 15%;
55
+ float: none !important;
56
+ width: 400px;
57
+ }
58
+ hr {
59
+ width: 100%;
60
+ border: 0;
61
+ height: 20px;
62
+ padding: 0;
63
+ margin: 0;
64
+ }
65
+ }
@@ -1,59 +1,59 @@
1
1
  form {
2
+ ul {
3
+ padding: 0;
4
+ margin: 0;
5
+ }
2
6
  li {
3
7
  list-style: none;
4
- margin: 7px 0px;
8
+ margin-top: 10px;
5
9
  .inline-errors {
6
- color: $color_warn;
10
+ color: $color-error;
11
+ margin-top: 2px;
12
+ }
13
+ abbr {
14
+ border: 0 !important;
15
+ padding-left: 3px;
7
16
  }
8
17
  }
18
+ li:first-child, li:nth-of-type(1) {
19
+ margin-top: 0;
20
+ }
9
21
  p {
10
22
  margin: 7px 0px;
11
23
  font-size: 14px;
12
- color: #666;
13
- }
14
- p.inline-hints {
15
- color: #999;
16
- }
17
- p.hint {
18
- color: $color_main;
24
+ color: $color-form-hints;
19
25
  }
20
26
  label {
21
27
  display: block;
22
28
  margin-bottom: 2px;
23
- color: #555;
29
+ color: $color-form-labels;
24
30
  font-size: 14px;
25
31
  }
26
32
  input[type="text"], input[type=password], input[type=email], input[type=tel], textarea, select[multiple=multiple] {
27
- border: 1px solid #ccc;
33
+ border: 1px solid $color-form-field-border;
28
34
  box-sizing: border-box;
29
- font-family: $font-family;
30
35
  font-size: 14px;
31
36
  padding: 5px;
32
37
  outline: none;
33
- color: black;
38
+ color: $color-form-field-text;
34
39
  width: 100%;
35
- :focus {
36
- border: 1px solid #999;
37
- @include box-shadow(0,0,4px,#999);
40
+ &:focus {
41
+ border: 1px solid $color-form-field-border-focus;
38
42
  }
39
43
  }
40
44
  button, input[type=submit] {
41
45
  border: 0;
42
46
  font-size: 12px;
43
- font-weight: bold;
44
47
  padding: 7px 14px;
45
- text-transform: uppercase;
46
- color: white;
47
- text-shadow: -1px -1px 0 black;
48
+ color: $color-form-button-text;
48
49
  cursor: pointer;
49
- @include border-radius(3px);
50
- font-family: $font-family;
51
- @include gradient(#444,#222);
52
- }
53
- button:hover, input[type=submit]:hover {
54
- @include gradient($color_main,$color_main_dark);
50
+ background-color: $color-form-button;
51
+ font-weight: bold;
52
+ &:hover {
53
+ background-color: $color-form-button-hover;
54
+ }
55
55
  }
56
56
  input[type=checkbox], input[type=radio] {
57
57
  margin-right: 7px;
58
58
  }
59
- }
59
+ }
@@ -0,0 +1,16 @@
1
+ .aureus-messages {
2
+ .error, .notice, .alert {
3
+ margin: 0;
4
+ padding: 10px 40px;
5
+ color: black;
6
+ }
7
+ .alert {
8
+ background-color: $color-alert;
9
+ }
10
+ .error {
11
+ background-color: $color-error;
12
+ }
13
+ .notice {
14
+ background-color: $color-notice;
15
+ }
16
+ }
@@ -0,0 +1,42 @@
1
+ .aureus-navigation {
2
+ padding: 20px 40px;
3
+ overflow: hidden;
4
+ background-color: $color-navigation;
5
+ h2 {
6
+ margin: 0;
7
+ padding: 0;
8
+ float: left;
9
+ span {
10
+ font-weight: normal;
11
+ color: $color-navigation-title;
12
+ font-size: 28px;
13
+ overflow: hidden;
14
+ }
15
+ }
16
+ ul {
17
+ padding: 0;
18
+ margin: 0;
19
+ float: right;
20
+ li {
21
+ display: inline-block;
22
+ position: relative;
23
+ margin: 0;
24
+ margin-left: 6px;
25
+ padding: 7px 10px;
26
+ background-color: $color-navigation-button;
27
+ a {
28
+ cursor: pointer;
29
+ display: inline;
30
+ color: $color-navigation-button-text;
31
+ text-decoration: none;
32
+ font-size: 16px;
33
+ }
34
+ &:hover {
35
+ background-color: $color-navigation-button-hover;
36
+ a, span {
37
+ color: $color-navigation-button-text-hover;
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,121 @@
1
+ .datatable, .simple-table {
2
+ width: 100%;
3
+ border-spacing: 0;
4
+ thead {
5
+ tr {
6
+ background-color: $color-table-head-background;
7
+ th {
8
+ padding: 10px 10px;
9
+ padding-right: 30px;
10
+ text-align: left;
11
+ font-weight: normal;
12
+ font-size: 14px;
13
+ color: white;
14
+ border-left: 1px solid $color-table-head-border;
15
+ &:first-child {
16
+ padding-left: 20px;
17
+ }
18
+ &:last-child {
19
+ padding-right: 20px;
20
+ }
21
+ }
22
+ th:first-child {
23
+ border-left: 0;
24
+ }
25
+ th.sorting {
26
+ background-image: url($icon-sort);
27
+ background-repeat: no-repeat;
28
+ background-position: center right;
29
+ }
30
+ th.sorting_asc {
31
+ background-image: url($icon-sort_abc_asc);
32
+ background-repeat: no-repeat;
33
+ background-position: center right;
34
+ }
35
+ th.sorting_desc {
36
+ background-image: url($icon-sort_abc_desc);
37
+ background-repeat: no-repeat;
38
+ background-position: center right;
39
+ }
40
+ th.center {
41
+ text-align: center;
42
+ }
43
+ }
44
+ }
45
+ tbody {
46
+ td, th {
47
+ text-align: left;
48
+ border-top: 1px solid $color-table-border;
49
+ border-left: 1px solid $color-table-border;
50
+ padding: 12px 10px;
51
+ font-size: 14px;
52
+ color: black;
53
+ a {
54
+ color: $color-table-link;
55
+ }
56
+ a:hover {
57
+ color: $color-table-link-hover;
58
+ }
59
+ &:first-child {
60
+ padding-left: 20px;
61
+ }
62
+ &:last-child {
63
+ padding-right: 20px;
64
+ }
65
+ }
66
+ tr:first-child td, tr:first-child th {
67
+ border-top: 0;
68
+ }
69
+ td:first-child, th:first-child {
70
+ border-left: 0;
71
+ }
72
+ td.center {
73
+ text-align: center;
74
+ }
75
+ th {
76
+ border-right: 1px solid $color-table-border;
77
+ font-size: 12px;
78
+ color: $color-table-list-head;
79
+ }
80
+ td.buttons {
81
+ width: 1px;
82
+ white-space: nowrap;
83
+ text-align: right;
84
+ vertical-align: middle;
85
+ a {
86
+ cursor: pointer;
87
+ display: inline-block;
88
+ padding: 3px 10px 3px;
89
+ border: 1px solid black;
90
+ margin: 0 2px;
91
+ opacity: 0.5;
92
+ text-decoration: none;
93
+ height: 16px;
94
+ background-repeat: no-repeat;
95
+ background-position: center;
96
+ font-size: 14px;
97
+ &:hover {
98
+ opacity: 1;
99
+ }
100
+ }
101
+ a.edit, a.destroy, a.show, a.recover, a.print, a.icon {
102
+ width: 16px;
103
+ }
104
+ a.edit {
105
+ background-image: url($icon-pencil);
106
+ }
107
+ a.destroy {
108
+ background-image: url($icon-cross);
109
+ }
110
+ a.show {
111
+ background-image: url($icon-eye);
112
+ }
113
+ a.recover {
114
+ background-image: url($icon-refresh);
115
+ }
116
+ a.print {
117
+ background-image: url($icon-print);
118
+ }
119
+ }
120
+ }
121
+ }