fleetio_spark 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +43 -0
  4. data/app/assets/javascripts/spark/_cookie.js +23 -0
  5. data/app/assets/javascripts/spark/_esvg.js +73 -0
  6. data/app/assets/javascripts/spark/_icons.js +19 -0
  7. data/app/assets/javascripts/spark/_modal.js +421 -0
  8. data/app/assets/javascripts/spark/_search.js +79 -0
  9. data/app/assets/javascripts/spark/_sidebar.js +13 -0
  10. data/app/assets/javascripts/spark/_stack.js +248 -0
  11. data/app/assets/javascripts/spark/_tree.js +68 -0
  12. data/app/assets/javascripts/spark/shims/_dataset.js +241 -0
  13. data/app/assets/javascripts/spark/spark.js +31 -0
  14. data/app/assets/stylesheets/spark/_icons.scss +15 -0
  15. data/app/assets/stylesheets/spark/_index.scss +5 -0
  16. data/app/assets/stylesheets/spark/components/_index.scss +6 -0
  17. data/app/assets/stylesheets/spark/components/_modal.scss +73 -0
  18. data/app/assets/stylesheets/spark/components/_nav-menu.scss +102 -0
  19. data/app/assets/stylesheets/spark/components/_sidebar.scss +280 -0
  20. data/app/assets/stylesheets/spark/components/_tooltip.scss +42 -0
  21. data/app/assets/stylesheets/spark/components/_tree-nav.scss +13 -0
  22. data/app/assets/stylesheets/spark/components/header/_app-admin-header.scss +82 -0
  23. data/app/assets/stylesheets/spark/components/header/_app-nav-header.scss +154 -0
  24. data/app/assets/stylesheets/spark/components/header/_index.scss +5 -0
  25. data/app/assets/stylesheets/spark/components/header/_search-results.scss +29 -0
  26. data/app/assets/stylesheets/spark/components/header/_search.scss +195 -0
  27. data/app/assets/stylesheets/spark/components/header/_trial-status.scss +43 -0
  28. data/app/assets/stylesheets/spark/core/_animations.scss +154 -0
  29. data/app/assets/stylesheets/spark/core/_base.scss +11 -0
  30. data/app/assets/stylesheets/spark/core/_colors.scss +94 -0
  31. data/app/assets/stylesheets/spark/core/_index.scss +7 -0
  32. data/app/assets/stylesheets/spark/core/_layout.scss +39 -0
  33. data/app/assets/stylesheets/spark/core/_mixins.scss +86 -0
  34. data/app/assets/stylesheets/spark/core/_text.scss +5 -0
  35. data/app/assets/stylesheets/spark/core/_vars.scss +76 -0
  36. data/app/assets/stylesheets/spark/form/_base.scss +124 -0
  37. data/app/assets/stylesheets/spark/form/_check-switch.scss +99 -0
  38. data/app/assets/stylesheets/spark/form/_index.scss +2 -0
  39. data/app/assets/stylesheets/spark/spark.scss +1 -0
  40. data/app/assets/svgs/spark/add.svg +3 -0
  41. data/app/assets/svgs/spark/admin-user.svg +5 -0
  42. data/app/assets/svgs/spark/chevron-down.svg +3 -0
  43. data/app/assets/svgs/spark/chevron-up.svg +3 -0
  44. data/app/assets/svgs/spark/close.svg +3 -0
  45. data/app/assets/svgs/spark/contact.svg +6 -0
  46. data/app/assets/svgs/spark/dashboard.svg +3 -0
  47. data/app/assets/svgs/spark/fuel.svg +3 -0
  48. data/app/assets/svgs/spark/inspection.svg +3 -0
  49. data/app/assets/svgs/spark/issue.svg +3 -0
  50. data/app/assets/svgs/spark/leaderboard.svg +5 -0
  51. data/app/assets/svgs/spark/logo.svg +1 -0
  52. data/app/assets/svgs/spark/map.svg +4 -0
  53. data/app/assets/svgs/spark/nav-menu.svg +5 -0
  54. data/app/assets/svgs/spark/part.svg +6 -0
  55. data/app/assets/svgs/spark/place.svg +5 -0
  56. data/app/assets/svgs/spark/question.svg +10 -0
  57. data/app/assets/svgs/spark/reminder.svg +3 -0
  58. data/app/assets/svgs/spark/report.svg +5 -0
  59. data/app/assets/svgs/spark/search.svg +3 -0
  60. data/app/assets/svgs/spark/service.svg +3 -0
  61. data/app/assets/svgs/spark/settings.svg +3 -0
  62. data/app/assets/svgs/spark/trip.svg +4 -0
  63. data/app/assets/svgs/spark/vehicle.svg +3 -0
  64. data/app/assets/svgs/spark/vendor.svg +4 -0
  65. data/app/helpers/spark/application_helper.rb +42 -0
  66. data/app/helpers/spark/icon_helper.rb +40 -0
  67. data/app/helpers/spark/input_helper.rb +163 -0
  68. data/app/helpers/spark/menu_helper.rb +113 -0
  69. data/app/helpers/spark/modal_helper.rb +52 -0
  70. data/app/helpers/spark/nav_menu_helper.rb +167 -0
  71. data/app/helpers/spark/tag_helper.rb +27 -0
  72. data/app/helpers/spark/trial_helper.rb +23 -0
  73. data/app/views/layouts/spark/application.html.slim +28 -0
  74. data/app/views/layouts/spark/blank.html.slim +9 -0
  75. data/app/views/layouts/spark/default.html.slim +13 -0
  76. data/config/autoprefixer.yml +4 -0
  77. data/config/esvg.yml +20 -0
  78. data/lib/fleetio_spark.rb +14 -0
  79. data/lib/fleetio_spark/helper.rb +163 -0
  80. data/lib/fleetio_spark/version.rb +3 -0
  81. data/public/spark-0.1.0.css +1442 -0
  82. data/public/spark-0.1.0.css.gz +0 -0
  83. data/public/spark-0.1.0.js +11927 -0
  84. data/public/spark-0.1.0.js.gz +0 -0
  85. metadata +211 -0
@@ -0,0 +1,42 @@
1
+ .has-tooltip {
2
+ cursor: pointer;
3
+ &:before, &:after {
4
+ opacity: 0;
5
+ transition: none;
6
+ }
7
+ &:before { content: ""; }
8
+ &:after {
9
+ content: attr(aria-label);
10
+ font-size: 0;
11
+ }
12
+ }
13
+ .has-tooltip:focus, .has-tooltip:hover {
14
+ position: relative;
15
+ z-index: 1;
16
+ &:before, &:after {
17
+ opacity: 1;
18
+ position: absolute;
19
+ left: 50%;
20
+ transform: translate3d(-50%, 0, 0);
21
+ z-index: 100000;
22
+ pointer-events: none;
23
+ animation: fade-in .2s ease-in;
24
+ animation-fill-mode: forwards;
25
+ }
26
+ &:after {
27
+ -webkit-font-smoothing: subpixel-antialiased;
28
+ top: calc(100% + 6px);
29
+ background-color: rgba(#000, 0.8);
30
+ color: #fff;
31
+ white-space: nowrap;
32
+ font-size: 10px;
33
+ line-height: 1.5em;
34
+ padding: 5px 8px;
35
+ border-radius: 4px;
36
+ }
37
+ &:before {
38
+ top: 100%;
39
+ content: "";
40
+ //@include triangle(up, rgba(#000, 0.8), 6px);
41
+ }
42
+ }
@@ -0,0 +1,13 @@
1
+ [role=tree] {
2
+
3
+ [role=group] {
4
+ overflow: hidden;
5
+ }
6
+
7
+ [role=treeitem][aria-expanded=false] > [role=group] {
8
+ max-height: 0;
9
+ }
10
+ [role=treeitem][aria-expanded=true] .expand-icon {
11
+ transform: rotate(180deg);
12
+ }
13
+ }
@@ -0,0 +1,82 @@
1
+ .app-admin-header {
2
+ display: flex;
3
+ align-items: center;
4
+ height: $app-admin-header-height;
5
+ background-color: $fl-yellow-100;
6
+ border-top: 3px solid $fl-yellow-900;
7
+ border-bottom: 1px solid $fl-yellow-300;
8
+ padding: 0 $pad-lg;
9
+ position: fixed;
10
+ z-index: 1050;
11
+ top: 0;
12
+ right: 0;
13
+ left: 0;
14
+ color: $fl-yellow-900;
15
+ font-size: 12px;
16
+
17
+ // When the app-header is present, elements need to be shifted down the page
18
+ ~ * { top: $app-admin-header-height; }
19
+ ~ .app-container {
20
+ min-height: calc(100vh - #{$app-admin-header-height});
21
+ }
22
+ ~ .sidebar-nav .nav-wrapper {
23
+ height: calc(100% - #{$app-admin-header-height});
24
+ }
25
+
26
+ .admin-user {
27
+ display: inline-flex;
28
+ align-items: center;
29
+ min-width: 0;
30
+
31
+ .icon {
32
+ margin-right: $pad-base;
33
+ flex-shrink: 0;
34
+ }
35
+
36
+ strong {
37
+ margin-right: $pad-sm;
38
+ font-weight: 600;
39
+ }
40
+
41
+ span {
42
+ white-space: nowrap;
43
+ overflow: hidden;
44
+ text-overflow: ellipsis;
45
+ }
46
+ }
47
+
48
+ .actions {
49
+ margin-left: auto;
50
+
51
+ > a {
52
+ color: inherit;
53
+ margin-left: $pad-base;
54
+ text-decoration: none;
55
+
56
+ @include at-least($width-xs) {
57
+ margin-left: $pad-lg;
58
+ }
59
+ }
60
+
61
+ .back-to-admin {
62
+ padding: $pad-sm $pad-base;
63
+ background-color: $fl-yellow-300;
64
+ border-radius: 3px;
65
+ transition: background-color $duration $timing;
66
+ white-space: nowrap;
67
+
68
+ &:hover {
69
+ background-color: $fl-yellow-400;
70
+ }
71
+ }
72
+
73
+ .close-admin-header {
74
+ display: none;
75
+ padding: 4px;
76
+
77
+ @include at-least($width-xs) {
78
+ display: inline-block;
79
+ }
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,154 @@
1
+ // Top Main Navbar
2
+ .app-nav-header {
3
+ display: flex;
4
+ align-items: center;
5
+ height: $app-nav-header-height;
6
+ border-bottom: 1px solid $fl-gray-100;
7
+ background-color: $fl-white;
8
+ padding: 0 $pad-lg;
9
+ position: fixed;
10
+ z-index: 1040;
11
+ top: 0;
12
+ right: 0;
13
+ left: 0;
14
+
15
+ @include at-least( $width-sm ) {
16
+ padding: 0 $pad-xl;
17
+ }
18
+
19
+ .sidebar-nav-toggle {
20
+ @include circular-button(32px);
21
+ flex-shrink: 0;
22
+ color: $fl-gray-500;
23
+ margin-left: -$pad-base;
24
+ margin-right: $pad-lg;
25
+ transition: all $duration $timing;
26
+
27
+ &:hover {
28
+ color: $fl-gray-700;
29
+ border-radius: 50%;
30
+ background-color: $fl-gray-50;
31
+ }
32
+ }
33
+
34
+ .app-navbar-logo {
35
+ display: flex;
36
+ margin-right: $pad-lg;
37
+
38
+ @include at-least($width-sm) {
39
+ margin-right: $pad-xl;
40
+ }
41
+ }
42
+
43
+ // Styles for Top Navbar Dropdown Menus
44
+ .dropdown-menu {
45
+ border: 1px solid transparent;
46
+ max-height: 85vh;
47
+ overflow-y: auto;
48
+ min-width: 260px;
49
+ @include elevation(4);
50
+ border-radius: 6px;
51
+ margin-top: $pad-base;
52
+ margin-right: -$pad-base;
53
+ padding: $pad-md $pad-base;
54
+ font-size: 14px;
55
+
56
+ .divider { margin: $pad-base; }
57
+
58
+ > li {
59
+ > a {
60
+ border-radius: 3px;
61
+ padding: 5px $pad-base 6px;
62
+ }
63
+
64
+ // Existing Material icons styling (will replace with svg in future)
65
+ i {
66
+ font-size: 16px;
67
+ margin-right: $pad-md;
68
+ }
69
+ .pull-right {
70
+ i {
71
+ font-size: 14px;
72
+ margin-right: 0;
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+
79
+ .app-nav-actions {
80
+ display: flex;
81
+ align-items: center;
82
+ margin-left: auto;
83
+
84
+ .modal-active + & {
85
+ position: absolute;
86
+ right: $pad-xl;
87
+ z-index: -1;
88
+ }
89
+
90
+ > .dropdown {
91
+ margin: 0 $pad-base;
92
+
93
+ &:last-of-type {
94
+ margin-right: 0;
95
+ }
96
+ }
97
+
98
+ .dropdown-menu {
99
+ left: auto;
100
+ right: 0;
101
+ }
102
+
103
+ .quick-add-btn,
104
+ .help-menu-btn {
105
+ @include circular-button(32px);
106
+ color: $fl-gray-500;
107
+ border: 1px solid $fl-gray-100;
108
+ transition-property: color, border-color;
109
+ transition-duration: $duration;
110
+ transition-timing-function: $timing;
111
+
112
+ &:hover,
113
+ &:focus {
114
+ color: $fl-gray-700;
115
+ border-color: $fl-gray-300;
116
+ }
117
+ }
118
+
119
+ .help-menu-btn {
120
+ // New announcement indicator dot
121
+ &.new-announcements {
122
+ &:before {
123
+ content: '';
124
+ display: block;
125
+ position: absolute;
126
+ width: 9px;
127
+ height: 9px;
128
+ border-radius: 50%;
129
+ top: 0;
130
+ right: 0;
131
+ background-color: $fl-yellow-600;
132
+ box-shadow: 0 0 0 2px $fl-white;
133
+ z-index: 10;
134
+ }
135
+ }
136
+
137
+ + .dropdown-menu .new-announcements {
138
+ font-weight: 500;
139
+ color: $fl-yellow-600;
140
+
141
+ &:hover,
142
+ &:focus {
143
+ color: $fl-yellow-600;
144
+ background-color: $fl-yellow-25;
145
+ }
146
+
147
+ .badge-dot i {
148
+ color: inherit;
149
+ font-size: 10px;
150
+ margin-right: $pad-xs;
151
+ }
152
+ }
153
+ }
154
+ }
@@ -0,0 +1,5 @@
1
+ @import "app-nav-header";
2
+ @import "app-admin-header";
3
+ @import "trial-status";
4
+ @import "search";
5
+ @import "search-results";
@@ -0,0 +1,29 @@
1
+ .search-result {
2
+ color: $fl-gray-800;
3
+ line-height: 1.1em;
4
+
5
+ &-heading {
6
+ font-size: 14px;
7
+ font-weight: 500;
8
+ margin-bottom: 5px;
9
+ }
10
+
11
+ &-body {
12
+ font-size: 12px;
13
+ //color: $fl-gray-600;
14
+ }
15
+
16
+ &-meta {
17
+ font-size: 12px;
18
+ color: $fl-gray-400;
19
+ }
20
+
21
+ mark {
22
+ color: mix($fl-blue-800, $fl-gray-800);
23
+ background-color: rgba($fl-blue-100, .45);
24
+ padding: 0 2px;
25
+ margin: 0 -1px;
26
+ border-radius: 2px;
27
+ }
28
+
29
+ }
@@ -0,0 +1,195 @@
1
+ .search-panel {
2
+ width: 100%;
3
+ background: $fl-white;
4
+ margin-right: $pad-lg;
5
+ transform-style: preserve-3d;
6
+ transform: translateZ(0);
7
+
8
+ .modal-is-opening {
9
+ animation: fade-in $duration * 2 $timing;
10
+ }
11
+ .modal-is-closing {
12
+ animation-duration: $duration-short;
13
+ }
14
+
15
+ &.modal-active {
16
+ position: absolute;
17
+ left: 16px;
18
+ width: calc( 100% - 32px );
19
+ margin-right: 0;
20
+
21
+ label {
22
+ border: {
23
+ color: transparent;
24
+ radius: 5px;
25
+ }
26
+ }
27
+ }
28
+
29
+ @include at-least( $width-sm ) {
30
+ margin-right: $pad-xl;
31
+ }
32
+
33
+ @include at-least( $width-base ) {
34
+ max-width: $search-width;
35
+ position: relative;
36
+ transition: max-width $duration $timing;
37
+
38
+ &.modal-active {
39
+ position: relative;
40
+ max-width: $search-width-active;
41
+ left: 0; right: 0;
42
+ }
43
+ .modal-is-closing {
44
+ animation: fade-out $duration / 2 $timing;
45
+ }
46
+ }
47
+
48
+ label {
49
+ display: flex;
50
+ justify-content: center;
51
+ position: relative;
52
+ z-index: 1001;
53
+ border: 1px solid $fl-gray-100;
54
+ border-radius: 32px;
55
+ padding: 0 $pad-md;
56
+ transition: border $timing $duration;
57
+ background: none;
58
+ margin: 0;
59
+ }
60
+
61
+ input {
62
+ font-size: 15px;
63
+ }
64
+
65
+ .clear-search {
66
+ background: none;
67
+ border: none;
68
+ appearance: none;
69
+ color: transparent;
70
+ cursor: pointer;
71
+ position: relative;
72
+ width: 15px;
73
+ padding: $pad-sm $pad-base;
74
+ opacity: 0;
75
+ transition: opacity $timing $duration;
76
+
77
+ &:after, &:before {
78
+ content: "";
79
+ position: absolute;
80
+ top: 50%;
81
+ right: 50%;
82
+ display: block;
83
+ width: 15px;
84
+ height: 2px;
85
+ background: $fl-gray-100;
86
+ transition: background-color $timing $duration;
87
+ }
88
+ &:before {
89
+ transform: translate(50%, -50%) rotate(-45deg);
90
+ }
91
+ &:after {
92
+ transform: translate(50%, -50%) rotate(45deg);
93
+ }
94
+ &:hover:after, &:hover:before {
95
+ background: $fl-gray-500;
96
+ }
97
+ }
98
+
99
+ &.modal-active .clear-search {
100
+ opacity: 1;
101
+ }
102
+
103
+ select {
104
+ appearance: none;
105
+ border: none;
106
+ padding: 0 $pad-md;
107
+ cursor: pointer;
108
+ background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 7 20'%3E%3Cpolygon fill='%237A7B7C' points='3.5,14 0,8 7,8'/%3E%3C/svg%3E") calc(100% - 14px) 50% / 7px 18px no-repeat;
109
+ }
110
+
111
+ .modal-panel {
112
+ @include elevation(4);
113
+ background: $fl-white;
114
+ border-radius: 8px;
115
+ padding-top: 38px;
116
+ top: 1px;
117
+ left: -$pad-sm;
118
+ right: -$pad-sm;
119
+
120
+ &:before {
121
+ content: "";
122
+ position: absolute;
123
+ left: 0; top: 37px; right: 0;
124
+ height: 15px;
125
+ z-index: 1;
126
+ border-top: 1px solid $fl-gray-100;
127
+ //background-image: linear-gradient( to bottom, white, rgba(#fff, .45), rgba(#fff, 0) );
128
+ }
129
+ &-header {
130
+ background: $fl-gray-25;
131
+ }
132
+ }
133
+
134
+ .svg-search {
135
+ width: 14px;
136
+ height: 14px;
137
+ fill: $fl-gray-500;
138
+ position: relative;
139
+ top: .1em;
140
+ -webkit-transform-style: preserve-3d;
141
+ }
142
+
143
+ kbd {
144
+ display: inline-block;
145
+ height: 18px;
146
+ line-height: 18px;
147
+ padding: 0 4px;
148
+ text-align: center;
149
+ border: 1px solid $fl-gray-100;
150
+ border-radius: 4px;
151
+ background: #fff;
152
+ position: relative;
153
+ color: inherit;
154
+ box-shadow: none;
155
+ font-size: inherit;
156
+
157
+ &:after {
158
+ position: absolute;
159
+ content: "";
160
+ top: 3px;
161
+ border-radius: 4px;
162
+ left: -1px;
163
+ right: -1px;
164
+ z-index: -1;
165
+ bottom: -3px;
166
+ border: 1px solid $fl-gray-100;
167
+ }
168
+ }
169
+ }
170
+
171
+ @keyframes search-open {
172
+ 0% {
173
+ opacity: 0;
174
+ transform: translateY(-10px) perspective(300px);
175
+ }
176
+ 20% { opacity: 1; }
177
+ 100% {
178
+ opacity: 1;
179
+ transform: translateY(0px) perspective(300px);
180
+ }
181
+ }
182
+
183
+ @keyframes search-close {
184
+ 0% {
185
+ opacity: 1;
186
+ transform: translateY(0px) perspective(300px);
187
+ }
188
+ 80% {
189
+ opacity: 0;
190
+ }
191
+ 100% {
192
+ opacity: 0;
193
+ transform: translateY(-10px) perspective(300px);
194
+ }
195
+ }