trestle 0.8.4 → 0.8.11

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 (164) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +4 -0
  3. data/.travis.yml +14 -1
  4. data/Gemfile +6 -0
  5. data/README.md +15 -9
  6. data/app/assets/javascripts/trestle/admin.js +11 -10
  7. data/app/assets/javascripts/trestle/components/_confirmation.js +40 -0
  8. data/app/assets/javascripts/trestle/components/_datepicker.js +37 -0
  9. data/app/assets/javascripts/trestle/components/_dialog.js +136 -0
  10. data/app/assets/javascripts/trestle/{_errors.js → components/_errors.js} +2 -2
  11. data/app/assets/javascripts/trestle/components/_form.js +75 -0
  12. data/app/assets/javascripts/trestle/{_gallery.js → components/_gallery.js} +3 -3
  13. data/app/assets/javascripts/trestle/{_select.js → components/_select.js} +2 -2
  14. data/app/assets/javascripts/trestle/components/_sidebar.js +77 -0
  15. data/app/assets/javascripts/trestle/{_table.js → components/_table.js} +1 -1
  16. data/app/assets/javascripts/trestle/components/_tabs.js +25 -0
  17. data/app/assets/javascripts/trestle/components/_tooltips.js +19 -0
  18. data/app/assets/javascripts/trestle/core/_contexts.js +13 -0
  19. data/app/assets/javascripts/trestle/core/_cookies.js +24 -0
  20. data/app/assets/javascripts/trestle/core/_events.js +39 -0
  21. data/app/assets/javascripts/trestle/core/_l10n.js +23 -0
  22. data/app/assets/javascripts/trestle/core/_visit.js +10 -0
  23. data/app/assets/stylesheets/trestle/components/_alerts.scss +28 -0
  24. data/app/assets/stylesheets/trestle/components/_avatar.scss +23 -1
  25. data/app/assets/stylesheets/trestle/components/_breadcrumbs.scss +12 -0
  26. data/app/assets/stylesheets/trestle/components/_buttons.scss +111 -1
  27. data/app/assets/stylesheets/trestle/components/_content.scss +53 -21
  28. data/app/assets/stylesheets/trestle/components/_datepicker.scss +28 -0
  29. data/app/assets/stylesheets/trestle/components/_fields.scss +17 -0
  30. data/app/assets/stylesheets/trestle/components/_input-group.scss +26 -1
  31. data/app/assets/stylesheets/trestle/components/_modal.scss +108 -0
  32. data/app/assets/stylesheets/trestle/components/_navigation.scss +104 -14
  33. data/app/assets/stylesheets/trestle/components/_pagination.scss +3 -3
  34. data/app/assets/stylesheets/trestle/components/_scopes.scss +11 -2
  35. data/app/assets/stylesheets/trestle/components/_sidebar.scss +3 -2
  36. data/app/assets/stylesheets/trestle/components/_table.scss +34 -10
  37. data/app/assets/stylesheets/trestle/components/_tags.scss +9 -0
  38. data/app/assets/stylesheets/trestle/components/_timestamp.scss +4 -1
  39. data/app/assets/stylesheets/trestle/components/_toolbars.scss +55 -0
  40. data/app/assets/stylesheets/trestle/components/_wells.scss +9 -1
  41. data/app/assets/stylesheets/trestle/core/_defaults.scss +21 -6
  42. data/app/assets/stylesheets/trestle/core/_layout.scss +8 -0
  43. data/app/assets/stylesheets/trestle/core/_mixins.scss +11 -0
  44. data/app/assets/stylesheets/trestle/core/_typography.scss +39 -0
  45. data/app/controllers/concerns/trestle/controller/breadcrumbs.rb +21 -0
  46. data/app/controllers/concerns/trestle/controller/callbacks.rb +21 -0
  47. data/app/controllers/concerns/trestle/controller/dialog.rb +16 -0
  48. data/app/controllers/concerns/trestle/controller/helpers.rb +18 -0
  49. data/app/controllers/concerns/trestle/controller/layout.rb +16 -0
  50. data/app/controllers/concerns/trestle/controller/location.rb +15 -0
  51. data/app/controllers/trestle/application_controller.rb +6 -30
  52. data/app/helpers/trestle/avatar_helper.rb +9 -2
  53. data/app/helpers/trestle/flash_helper.rb +15 -0
  54. data/app/helpers/trestle/form_helper.rb +8 -5
  55. data/app/helpers/trestle/format_helper.rb +7 -3
  56. data/app/helpers/trestle/headings_helper.rb +27 -0
  57. data/app/helpers/trestle/hook_helper.rb +13 -4
  58. data/app/helpers/trestle/i18n_helper.rb +14 -0
  59. data/app/helpers/trestle/panel_helper.rb +24 -0
  60. data/app/helpers/trestle/tab_helper.rb +2 -2
  61. data/app/helpers/trestle/table_helper.rb +41 -2
  62. data/app/helpers/trestle/timestamp_helper.rb +49 -7
  63. data/app/helpers/trestle/toolbars_helper.rb +34 -0
  64. data/app/helpers/trestle/url_helper.rb +72 -8
  65. data/app/views/layouts/trestle/admin.html.erb +3 -5
  66. data/app/views/trestle/application/_dialog.html.erb +34 -0
  67. data/app/views/trestle/application/_header.html.erb +22 -20
  68. data/app/views/trestle/application/_layout.html.erb +1 -1
  69. data/app/views/trestle/application/_tabs.html.erb +8 -2
  70. data/app/views/trestle/{application → flash}/_alert.html.erb +7 -2
  71. data/app/views/trestle/flash/_debug.html.erb +8 -0
  72. data/app/views/trestle/flash/_flash.html.erb +7 -0
  73. data/app/views/trestle/resource/_scopes.html.erb +1 -1
  74. data/app/views/trestle/resource/edit.html.erb +8 -10
  75. data/app/views/trestle/resource/index.html.erb +16 -4
  76. data/app/views/trestle/resource/new.html.erb +6 -6
  77. data/app/views/trestle/resource/show.html.erb +8 -10
  78. data/app/views/trestle/shared/_sidebar.html.erb +10 -7
  79. data/app/views/trestle/shared/_title.html.erb +14 -0
  80. data/app/views/trestle/table/_table.html.erb +4 -6
  81. data/bower.json +1 -1
  82. data/config/locales/cs.rb +18 -0
  83. data/config/locales/cs.yml +95 -0
  84. data/config/locales/en.yml +65 -36
  85. data/config/locales/es-MX.yml +94 -0
  86. data/config/locales/es.yml +94 -0
  87. data/config/locales/fr.rb +18 -0
  88. data/config/locales/fr.yml +84 -0
  89. data/config/locales/lv.rb +18 -0
  90. data/config/locales/lv.yml +94 -0
  91. data/config/locales/nl.rb +18 -0
  92. data/config/locales/nl.yml +82 -0
  93. data/config/locales/pl.rb +18 -0
  94. data/config/locales/pl.yml +85 -0
  95. data/config/locales/pt-BR.rb +18 -0
  96. data/config/locales/pt-BR.yml +84 -0
  97. data/config/locales/zh-CN.rb +18 -0
  98. data/config/locales/zh-CN.yml +94 -0
  99. data/gemfiles/rails-4.2.gemfile +16 -0
  100. data/gemfiles/rails-5.0.gemfile +16 -0
  101. data/gemfiles/rails-5.1.gemfile +16 -0
  102. data/gemfiles/rails-5.2.gemfile +16 -0
  103. data/gemfiles/rails-edge.gemfile +17 -0
  104. data/lib/generators/trestle/install/templates/trestle.rb.erb +18 -2
  105. data/lib/generators/trestle/resource/templates/admin.rb.erb +2 -2
  106. data/lib/trestle/adapters/active_record_adapter.rb +2 -6
  107. data/lib/trestle/adapters/adapter.rb +40 -15
  108. data/lib/trestle/adapters/sequel_adapter.rb +2 -6
  109. data/lib/trestle/admin/builder.rb +42 -12
  110. data/lib/trestle/admin/controller.rb +3 -1
  111. data/lib/trestle/admin.rb +84 -3
  112. data/lib/trestle/breadcrumb.rb +16 -1
  113. data/lib/trestle/configurable.rb +6 -0
  114. data/lib/trestle/configuration.rb +28 -5
  115. data/lib/trestle/display.rb +1 -1
  116. data/lib/trestle/engine.rb +10 -4
  117. data/lib/trestle/form/automatic.rb +6 -3
  118. data/lib/trestle/form/builder.rb +5 -1
  119. data/lib/trestle/form/field.rb +1 -1
  120. data/lib/trestle/form/fields/date_picker.rb +2 -2
  121. data/lib/trestle/form/fields/form_control.rb +14 -4
  122. data/lib/trestle/form/fields/form_group.rb +14 -3
  123. data/lib/trestle/form/fields/select.rb +5 -1
  124. data/lib/trestle/form/fields/tag_select.rb +1 -1
  125. data/lib/trestle/form/renderer.rb +2 -2
  126. data/lib/trestle/form.rb +7 -3
  127. data/lib/trestle/hook.rb +27 -0
  128. data/lib/trestle/model_name.rb +64 -0
  129. data/lib/trestle/navigation/group.rb +16 -0
  130. data/lib/trestle/navigation/item.rb +11 -1
  131. data/lib/trestle/navigation.rb +24 -6
  132. data/lib/trestle/options.rb +7 -5
  133. data/lib/trestle/reloader.rb +1 -1
  134. data/lib/trestle/resource/adapter_methods.rb +62 -0
  135. data/lib/trestle/resource/builder.rb +43 -17
  136. data/lib/trestle/resource/collection.rb +68 -0
  137. data/lib/trestle/resource/controller.rb +70 -33
  138. data/lib/trestle/resource.rb +97 -105
  139. data/lib/trestle/scope.rb +13 -3
  140. data/lib/trestle/tab.rb +4 -0
  141. data/lib/trestle/table/actions_column.rb +41 -31
  142. data/lib/trestle/table/automatic.rb +1 -2
  143. data/lib/trestle/table/builder.rb +2 -2
  144. data/lib/trestle/table/column.rb +40 -9
  145. data/lib/trestle/table/row.rb +18 -2
  146. data/lib/trestle/table.rb +18 -2
  147. data/lib/trestle/toolbar/builder.rb +52 -0
  148. data/lib/trestle/toolbar/context.rb +39 -0
  149. data/lib/trestle/toolbar.rb +43 -0
  150. data/lib/trestle/version.rb +1 -1
  151. data/lib/trestle.rb +9 -4
  152. data/trestle.gemspec +5 -3
  153. data/vendor/assets/bower_components/trestle/select2/dist/js/select2.full.js +90 -69
  154. data/vendor/assets/javascripts/trestle/flatpickr.js.erb +2 -0
  155. data/vendor/assets/stylesheets/trestle/magnific-popup.scss +13 -1
  156. metadata +99 -22
  157. data/app/assets/javascripts/trestle/_confirmation.js +0 -23
  158. data/app/assets/javascripts/trestle/_datepicker.js +0 -22
  159. data/app/assets/javascripts/trestle/_form.js +0 -6
  160. data/app/assets/javascripts/trestle/_sidebar.js +0 -52
  161. data/app/assets/javascripts/trestle/_tabs.js +0 -13
  162. data/app/assets/javascripts/trestle/_tooltips.js +0 -3
  163. data/app/helpers/trestle/title_helper.rb +0 -26
  164. data/app/views/trestle/application/_flash.html.erb +0 -11
@@ -0,0 +1,39 @@
1
+ // The ready function sets up a callback to run on each page load.
2
+ //
3
+ // Trestle.ready(function() {
4
+ // ...
5
+ // });
6
+ //
7
+ Trestle.ready = function(callback) {
8
+ $(Trestle).on('load', callback);
9
+ };
10
+
11
+ // The init function sets up a callback to run on each page load, as well as when elements are added to the page
12
+ // dynamically (e.g. via a modal). It is used to initialize dynamic elements such as date pickers, although it is
13
+ // preferable if they can be set up using event delegation on the document element.
14
+ //
15
+ // The callback is triggered with the applicable root/container element as the second argument.
16
+ //
17
+ // Trestle.init(function(e, root) {
18
+ // $(root).find('...');
19
+ // });
20
+ //
21
+ Trestle.init = function(callback) {
22
+ $(Trestle).on('init', callback);
23
+ };
24
+
25
+ // Initialize all elements within the document on page load.
26
+ Trestle.ready(function() {
27
+ $(Trestle).trigger('init', document);
28
+ });
29
+
30
+ // Trigger the page load events.
31
+ if (Trestle.turbolinks) {
32
+ $(document).on('turbolinks:load', function() {
33
+ $(Trestle).trigger("load");
34
+ });
35
+ } else {
36
+ $(document).ready(function() {
37
+ $(Trestle).trigger("load");
38
+ });
39
+ }
@@ -0,0 +1,23 @@
1
+ (function() {
2
+
3
+ // Some of Flatpickr's locale names differ from Rails. This maps the Rails I18n locale to their Flatpickr equivalent.
4
+ var FlatpickrLocaleConversions = { ca: "cat", el: "gr", nb: "no", vi: "vn" };
5
+
6
+ // Sets up localization for Trestle and its dependencies, in particular Flatpickr.
7
+ // This method accepts a list of locales in descending order of priority.
8
+ //
9
+ // Trestle.localize('es-MX', 'es', 'en');
10
+ //
11
+ Trestle.localize = function() {
12
+ for (var i = 0; i < arguments.length; ++i) {
13
+ var locale = arguments[i];
14
+ var flatpickrLocale = FlatpickrLocaleConversions[locale] || locale;
15
+
16
+ if (flatpickr.l10ns[flatpickrLocale]) {
17
+ flatpickr.localize(flatpickr.l10ns[flatpickrLocale]);
18
+ break;
19
+ }
20
+ }
21
+ };
22
+
23
+ })();
@@ -0,0 +1,10 @@
1
+ // The visit function is used to direct the user to the given URL. It is provided as an abstraction as the redirection
2
+ // is handled differently depending on whether or not Turbolinks is enabled.
3
+ //
4
+ // Trestle.visit("/admin/pages");
5
+ //
6
+ if (Trestle.turbolinks) {
7
+ Trestle.visit = function(url) { Turbolinks.visit(url); };
8
+ } else {
9
+ Trestle.visit = function(url) { document.location = url; };
10
+ }
@@ -22,6 +22,10 @@
22
22
  margin-bottom: 0;
23
23
  }
24
24
 
25
+ a {
26
+ color: white;
27
+ }
28
+
25
29
  @include mobile {
26
30
  padding: 5px 10px;
27
31
 
@@ -57,3 +61,27 @@
57
61
  }
58
62
  }
59
63
  }
64
+
65
+ .toggle-debug-errors {
66
+ &:hover, &:focus {
67
+ text-decoration: none;
68
+ }
69
+
70
+ &:after {
71
+ @extend .ion;
72
+ content: $ionicon-var-chevron-down;
73
+ font-size: 10px;
74
+ margin-left: 5px;
75
+ }
76
+ }
77
+
78
+ .debug-errors {
79
+ overflow: hidden;
80
+
81
+ ul {
82
+ list-style: none;
83
+ margin: 5px 0 0 0;
84
+ padding: 0 0 0 5px;
85
+ border-left: 4px solid rgba(white, 0.25);
86
+ }
87
+ }
@@ -1,10 +1,11 @@
1
1
  .avatar {
2
2
  display: inline-block;
3
+ position: relative;
3
4
 
4
5
  width: 40px;
5
6
  height: 40px;
6
7
 
7
- background: #fafafa;
8
+ background: #ccc;
8
9
  border-radius: 50%;
9
10
  box-shadow: rgba(black, 0.25) 0 1px 0;
10
11
 
@@ -14,5 +15,26 @@
14
15
  height: 100%;
15
16
  object-fit: cover;
16
17
  border-radius: 50%;
18
+
19
+ position: relative;
20
+ z-index: 1;
21
+ }
22
+
23
+ .avatar-fallback {
24
+ position: absolute;
25
+ top: 0;
26
+ bottom: 0;
27
+ left: 0;
28
+ right: 0;
29
+ border-radius: 50%;
30
+
31
+ color: white;
32
+
33
+ display: flex;
34
+ align-items: center;
35
+ justify-content: center;
36
+
37
+ font-size: 11px;
38
+ font-weight: 500;
17
39
  }
18
40
  }
@@ -3,6 +3,14 @@
3
3
  background-color: transparent;
4
4
  font-size: 12px;
5
5
 
6
+ > li + li:before {
7
+ content: "/";
8
+
9
+ @include mobile {
10
+ padding: 0 2px;
11
+ }
12
+ }
13
+
6
14
  .active, .active a {
7
15
  font-weight: normal;
8
16
  color: $breadcrumb-active-color;
@@ -11,4 +19,8 @@
11
19
  text-decoration: none;
12
20
  }
13
21
  }
22
+
23
+ @include mobile {
24
+ font-size: 11px;
25
+ }
14
26
  }
@@ -1,6 +1,110 @@
1
+ @mixin button-child-visible($prefix, $selector) {
2
+ &.#{$prefix}-visible-xs,
3
+ &.#{$prefix}-visible-sm,
4
+ &.#{$prefix}-visible-md,
5
+ &.#{$prefix}-visible-lg {
6
+ #{$selector} { display: none; }
7
+ }
8
+
9
+ &.#{$prefix}-visible-xs {
10
+ @media (max-width: $screen-xs-max) {
11
+ #{$selector} { display: inline-block; }
12
+ @content;
13
+ }
14
+ }
15
+
16
+ &.#{$prefix}-visible-sm {
17
+ @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
18
+ #{$selector} { display: inline-block; }
19
+ @content;
20
+ }
21
+ }
22
+
23
+ &.#{$prefix}-visible-md {
24
+ @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
25
+ #{$selector} { display: inline-block; }
26
+ @content;
27
+ }
28
+ }
29
+
30
+ &.#{$prefix}-visible-lg {
31
+ @media (min-width: $screen-lg-min) {
32
+ #{$selector} { display: inline-block; }
33
+ @content;
34
+ }
35
+ }
36
+ }
37
+
38
+ @mixin button-child-hidden($prefix, $selector) {
39
+ &.#{$prefix}-hidden-xs {
40
+ @media (max-width: $screen-xs-max) {
41
+ #{$selector} { display: none; }
42
+ @content;
43
+ }
44
+ }
45
+
46
+ &.#{$prefix}-hidden-sm {
47
+ @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
48
+ #{$selector} { display: none; }
49
+ @content;
50
+ }
51
+ }
52
+
53
+ &.#{$prefix}-hidden-md {
54
+ @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
55
+ #{$selector} { display: none; }
56
+ @content;
57
+ }
58
+ }
59
+
60
+ &.#{$prefix}-hidden-lg {
61
+ @media (min-width: $screen-lg-min) {
62
+ #{$selector} { display: none; }
63
+ @content;
64
+ }
65
+ }
66
+ }
67
+
1
68
  .btn {
2
- border: none;
69
+ border-width: 0;
3
70
  box-shadow: none;
71
+
72
+ &.loading {
73
+ &::before {
74
+ @extend .fa;
75
+ @extend .fa-spin;
76
+ content: $fa-var-spinner;
77
+ margin-right: 10px;
78
+ }
79
+ }
80
+
81
+ > i + .btn-label {
82
+ margin-left: 5px;
83
+ }
84
+
85
+ &.icon-visible-xs,
86
+ &.icon-visible-sm,
87
+ &.icon-visible-md,
88
+ &.icon-visible-lg {
89
+ > i + .btn-label {
90
+ margin-left: 0;
91
+ }
92
+ }
93
+
94
+ @include button-child-visible('icon', '> i') {
95
+ > i + .btn-label {
96
+ margin-left: 5px;
97
+ }
98
+ };
99
+
100
+ @include button-child-hidden('icon', '> i') {
101
+ > i + .btn-label {
102
+ margin-left: 0;
103
+ }
104
+ };
105
+
106
+ @include button-child-visible('label', '> .btn-label');
107
+ @include button-child-hidden('label', '> .btn-label');
4
108
  }
5
109
 
6
110
  .btn-delete {
@@ -11,3 +115,9 @@
11
115
  background: $btn-danger-bg;
12
116
  }
13
117
  }
118
+
119
+ .btn-new-resource {
120
+ .btn-label {
121
+ @include sr-only;
122
+ }
123
+ }
@@ -1,38 +1,32 @@
1
1
  .content-header {
2
- @extend .clearfix;
2
+ display: flex;
3
+ justify-content: space-between;
4
+
3
5
  background: $content-header-background;
4
- padding: 5px 20px;
6
+ padding: 20px;
5
7
 
6
8
  h1 {
7
9
  font-weight: 300;
10
+ margin-top: 0;
8
11
  }
9
12
 
10
- .btn-toolbar {
11
- @extend .pull-right;
12
- clear: right;
13
+ .breadcrumb {
14
+ margin-bottom: 0;
13
15
  }
14
16
 
15
- .primary-toolbar {
16
- margin-top: 16px;
17
+ .content-header-title {
18
+ margin: 5px 0;
19
+ }
17
20
 
18
- .btn {
19
- @extend .btn-lg;
20
- font-size: 20px;
21
- padding: 8px 16px;
22
- border-radius: $border-radius-base;
23
- }
21
+ .btn-toolbar {
22
+ text-align: right;
24
23
  }
25
24
 
26
25
  .secondary-toolbar {
27
26
  margin-top: 8px;
28
27
 
29
- .btn {
30
- font-size: 12px;
31
- padding: 4px 10px;
32
-
33
- i {
34
- font-size: 11px;
35
- }
28
+ @include mobile {
29
+ margin-top: 6px;
36
30
  }
37
31
  }
38
32
  }
@@ -59,6 +53,26 @@
59
53
  min-width: 0;
60
54
  }
61
55
 
56
+ .main-content-header,
57
+ .main-content-footer {
58
+ display: flex;
59
+ justify-content: space-between;
60
+ }
61
+
62
+ .main-content-header {
63
+ margin: -20px -20px 20px !important;
64
+ padding: $main-content-header-padding;
65
+ background: $main-content-header-background;
66
+ border-bottom: $main-content-header-border;
67
+ }
68
+
69
+ .main-content-footer {
70
+ margin: 20px -20px -20px !important;
71
+ padding: $main-content-footer-padding;
72
+ background: $main-content-footer-background;
73
+ border-top: $main-content-footer-border;
74
+ }
75
+
62
76
  .main-content,
63
77
  .main-content-sidebar,
64
78
  .tab-pane {
@@ -84,7 +98,7 @@
84
98
 
85
99
  @include mobile {
86
100
  .content-header {
87
- padding: 0 10px;
101
+ padding: 10px;
88
102
  }
89
103
 
90
104
  .main-content-area {
@@ -105,4 +119,22 @@
105
119
  .main-content-sidebar {
106
120
  padding: 15px;
107
121
  }
122
+
123
+ .main-content-header,
124
+ .main-content-footer {
125
+ flex-direction: column;
126
+ align-items: center;
127
+ }
128
+
129
+ .main-content-header {
130
+ margin: -15px -15px 15px !important;
131
+ padding-left: 15px;
132
+ padding-right: 15px;
133
+ }
134
+
135
+ .main-content-footer {
136
+ margin: 15px -15px -15px !important;
137
+ padding-left: 15px;
138
+ padding-right: 15px;
139
+ }
108
140
  }
@@ -1,3 +1,31 @@
1
+ .clear-datepicker {
2
+ position: absolute;
3
+ top: 0;
4
+ right: 0;
5
+ z-index: 4;
6
+
7
+ width: 34px;
8
+ height: 34px;
9
+ line-height: 34px;
10
+ text-align: center;
11
+
12
+ color: #ccc;
13
+
14
+ &:hover, &:focus {
15
+ color: #aaa;
16
+ }
17
+
18
+ &::before {
19
+ @extend .fa;
20
+ content: $fa-var-times;
21
+ }
22
+
23
+ input[value=""] ~ &,
24
+ input:not([value]) ~ & {
25
+ display: none;
26
+ }
27
+ }
28
+
1
29
  .flatpickr-calendar {
2
30
  background: $theme-bg;
3
31
 
@@ -1,3 +1,20 @@
1
+ .form-group {
2
+ position: relative;
3
+ }
4
+
5
+ .help-block {
6
+ font-size: 13px;
7
+
8
+ @media (min-width: $screen-sm-min) {
9
+ &.floating {
10
+ position: absolute;
11
+ top: 0;
12
+ right: 0;
13
+ margin: 2px 0;
14
+ }
15
+ }
16
+ }
17
+
1
18
  .select2-container--bootstrap {
2
19
  // This is required to ensure the select field is rendered at full width
3
20
  // within Bootstrap tabs that are hidden when the page is first loaded.
@@ -2,10 +2,35 @@
2
2
 
3
3
  .input-group {
4
4
  display: flex;
5
+
6
+ .field_with_errors {
7
+ flex: 1;
8
+
9
+ .form-control {
10
+ border-radius: $input-border-radius;
11
+ }
12
+
13
+ &:not(:last-child) .form-control {
14
+ border-top-right-radius: 0;
15
+ border-bottom-right-radius: 0;
16
+ }
17
+
18
+ &:not(:first-child) .form-control {
19
+ border-top-left-radius: 0;
20
+ border-bottom-left-radius: 0;
21
+ }
22
+ }
5
23
  }
6
24
 
7
- .input-group-addon {
25
+ .input-group-addon,
26
+ .input-group-btn {
8
27
  width: auto;
9
28
  display: flex;
10
29
  align-items: center;
11
30
  }
31
+
32
+ .input-group-btn {
33
+ > .btn {
34
+ border-width: 1px;
35
+ }
36
+ }
@@ -0,0 +1,108 @@
1
+ .modal {
2
+ &.background {
3
+ .modal-dialog {
4
+ transform: scale(0.9);
5
+ opacity: 0.75;
6
+ }
7
+ }
8
+ }
9
+
10
+ .modal-content {
11
+ border: none;
12
+ border-radius: 0;
13
+
14
+ .modal.loading & {
15
+ min-height: 100px;
16
+
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+
21
+ &:after {
22
+ @extend .fa;
23
+ @extend .fa-spin;
24
+ content: $fa-var-spinner;
25
+
26
+ font-size: 32px;
27
+ opacity: 0.25;
28
+ }
29
+ }
30
+ }
31
+
32
+ .modal-header {
33
+ background: $theme-bg;
34
+ border-bottom: none;
35
+
36
+ .close {
37
+ opacity: 0.75;
38
+
39
+ &, &:hover, &:focus {
40
+ color: white;
41
+ }
42
+
43
+ &:hover, &:focus {
44
+ opacity: 1;
45
+ }
46
+ }
47
+
48
+ .modal.error & {
49
+ background: $error-bg;
50
+ }
51
+ }
52
+
53
+ .modal-title {
54
+ font-size: 18px;
55
+ font-weight: 500;
56
+ text-shadow: rgba(black, 0.5) 0 1px 1px;
57
+ color: white;
58
+ }
59
+
60
+ .modal-tabs .nav-tabs {
61
+ background: $body-bg;
62
+ padding: 10px 15px 0 15px;
63
+ }
64
+
65
+ .modal-flash {
66
+ .alert {
67
+ margin-bottom: 0;
68
+ border-radius: 0;
69
+ border-width: 0 0 1px 0;
70
+
71
+ padding-top: 10px;
72
+ padding-bottom: 10px;
73
+
74
+ .alert-icon {
75
+ font-size: 40px;
76
+ margin-right: 15px;
77
+ }
78
+
79
+ h3 {
80
+ font-size: 18px;
81
+ }
82
+
83
+ p {
84
+ font-size: 13px;
85
+ }
86
+ }
87
+ }
88
+
89
+ .modal-body {
90
+ @extend .tab-content;
91
+
92
+ pre.exception {
93
+ max-height: 75vh;
94
+ }
95
+ }
96
+
97
+ .modal-footer {
98
+ background: $modal-footer-background;
99
+ border-color: $modal-footer-border-color;
100
+
101
+ .primary-toolbar {
102
+ float: right;
103
+ }
104
+
105
+ .secondary-toolbar {
106
+ float: left;
107
+ }
108
+ }