superconductor 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.rspec +3 -0
  4. data/.ruby-version +1 -0
  5. data/.scss-lint.yml +21 -0
  6. data/.travis.yml +5 -0
  7. data/.yardopts +1 -0
  8. data/Cargo.lock +679 -0
  9. data/Cargo.toml +25 -0
  10. data/Gemfile +4 -0
  11. data/Guardfile +70 -0
  12. data/LICENSE.txt +21 -0
  13. data/Makefile +4 -0
  14. data/README.md +58 -0
  15. data/Rakefile +9 -36
  16. data/assets/__pm.js +424 -0
  17. data/assets/__pm.scss +261 -0
  18. data/assets/_buttons.scss +50 -0
  19. data/assets/_checkbox.scss +59 -0
  20. data/assets/_colors.scss +15 -0
  21. data/assets/_details.scss +54 -0
  22. data/assets/_pm_commits.scss +171 -0
  23. data/assets/_pm_setup.scss +7 -0
  24. data/assets/_pm_tasks.scss +280 -0
  25. data/assets/_tokens.scss +56 -0
  26. data/bin/console +14 -0
  27. data/bin/make +2 -0
  28. data/bin/rake +17 -0
  29. data/bin/release +5 -0
  30. data/bin/setup +8 -0
  31. data/bin/start +5 -0
  32. data/config.ru +10 -0
  33. data/config/properties.yml +37 -0
  34. data/extconf.rb +2 -0
  35. data/lib/superconductor.rb +35 -1
  36. data/lib/superconductor/documentation.rb +34 -0
  37. data/lib/superconductor/middleware.rb +71 -0
  38. data/lib/superconductor/version.rb +1 -1
  39. data/src/lib.rs +101 -0
  40. data/src/server.rs +176 -0
  41. data/src/state/mod.rs +5 -0
  42. data/src/state/state.rs +233 -0
  43. data/src/state/xml.rs +380 -0
  44. data/src/task.rs +129 -0
  45. data/src/view.rs +396 -0
  46. data/superconductor.gemspec +41 -0
  47. metadata +173 -116
  48. data/MIT-LICENSE +0 -20
  49. data/README.rdoc +0 -3
  50. data/app/assets/javascripts/jquery-linedtextarea.js +0 -126
  51. data/app/assets/javascripts/superconductor.js +0 -2
  52. data/app/assets/javascripts/superconductor/panel.js.coffee +0 -42
  53. data/app/assets/stylesheets/jquery-linedtextarea.css +0 -68
  54. data/app/assets/stylesheets/scaffold.css +0 -56
  55. data/app/assets/stylesheets/superconductor.css +0 -4
  56. data/app/assets/stylesheets/superconductor/panel.css.scss +0 -142
  57. data/app/controllers/file_controller.rb +0 -24
  58. data/app/helpers/superconductor/panel_helper.rb +0 -2
  59. data/app/models/superconductor.rb +0 -5
  60. data/app/models/superconductor/exception.rb +0 -0
  61. data/app/views/superconductor/_panel.html.erb +0 -130
  62. data/app/views/superconductor/_panel.js.erb +0 -0
  63. data/config/routes.rb +0 -6
  64. data/lib/superconductor/engine.rb +0 -24
  65. data/lib/tasks/superconductor_tasks.rake +0 -4
  66. data/test/dummy/README.rdoc +0 -261
  67. data/test/dummy/Rakefile +0 -7
  68. data/test/dummy/app/assets/javascripts/application.js +0 -15
  69. data/test/dummy/app/assets/stylesheets/application.css +0 -13
  70. data/test/dummy/app/controllers/application_controller.rb +0 -3
  71. data/test/dummy/app/helpers/application_helper.rb +0 -2
  72. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  73. data/test/dummy/config.ru +0 -4
  74. data/test/dummy/config/application.rb +0 -56
  75. data/test/dummy/config/boot.rb +0 -10
  76. data/test/dummy/config/database.yml +0 -25
  77. data/test/dummy/config/environment.rb +0 -5
  78. data/test/dummy/config/environments/development.rb +0 -37
  79. data/test/dummy/config/environments/production.rb +0 -67
  80. data/test/dummy/config/environments/test.rb +0 -37
  81. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  82. data/test/dummy/config/initializers/inflections.rb +0 -15
  83. data/test/dummy/config/initializers/mime_types.rb +0 -5
  84. data/test/dummy/config/initializers/secret_token.rb +0 -7
  85. data/test/dummy/config/initializers/session_store.rb +0 -8
  86. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  87. data/test/dummy/config/locales/en.yml +0 -5
  88. data/test/dummy/config/routes.rb +0 -58
  89. data/test/dummy/public/404.html +0 -26
  90. data/test/dummy/public/422.html +0 -26
  91. data/test/dummy/public/500.html +0 -25
  92. data/test/dummy/public/favicon.ico +0 -0
  93. data/test/dummy/script/rails +0 -6
  94. data/test/integration/navigation_test.rb +0 -10
  95. data/test/superconductor_test.rb +0 -7
  96. data/test/test_helper.rb +0 -10
  97. data/test/unit/helpers/superconductor/panel_helper_test.rb +0 -4
data/assets/__pm.scss ADDED
@@ -0,0 +1,261 @@
1
+ @import 'colors';
2
+ @import 'pm_tasks';
3
+ @import 'pm_commits';
4
+ @import 'pm_setup';
5
+
6
+ #__pm__panel {
7
+ @import 'checkbox';
8
+ @import 'details';
9
+ @import 'buttons';
10
+ @import 'tokens';
11
+
12
+ background: linear-gradient(top, $color0, mix($color0, $color3, 75%));
13
+ //background: -webkit-linear-gradient(top, $color0, mix($color0, $color3, 75%));
14
+ background-color: $color0;
15
+ border-bottom: 0;
16
+ $grey1: #B8B7B7;
17
+ $grey2: #E5E5E5;
18
+ $grey3: #A3A3A3;
19
+ border-color: $grey1 $grey2 $grey3;
20
+ border-style: solid;
21
+ border-width: 1px;
22
+ bottom: 0;
23
+ color: $color5;
24
+ font-family: 'Helvetica Neue', 'Gill Sans', 'Lucida Grande', sans-serif;
25
+ font-size: 10pt;
26
+ font-weight: 400;
27
+ height: 50%;
28
+ left: 0;
29
+ line-height: 2em;
30
+ opacity: 0;
31
+ pointer-events: none;
32
+ position: fixed;
33
+ right: 0;
34
+ transform: scale(1.015);
35
+ transition: all 250ms ease-out;
36
+
37
+ * {
38
+ box-sizing: border-box;
39
+ margin: 0;
40
+ padding: 0;
41
+ }
42
+
43
+ .no-transition {
44
+ transition: none; // !important;
45
+ }
46
+
47
+ &.open {
48
+ opacity: 1;
49
+ pointer-events: auto;
50
+ transform: scale(1);
51
+ }
52
+
53
+ &.blocking,
54
+ &.blocking * {
55
+ pointer-events: none;
56
+ }
57
+
58
+ ul {
59
+ padding-left: 5pt;
60
+ }
61
+
62
+ hr {
63
+ border: dotted $color4 0;
64
+ border-bottom-width: 1px;
65
+ }
66
+
67
+ $grey: darken($color-base, 25%);
68
+
69
+ textarea,
70
+ input[type=text],
71
+ input[type=email],
72
+ input[type=number],
73
+ .select {
74
+ border: solid $grey 1px;
75
+ display: block;
76
+ font-family: inherit;
77
+ font-size: 1em;
78
+ line-height: 2em;
79
+ padding: 0 0.5em;
80
+ width: 100%;
81
+
82
+ &:focus {
83
+ box-shadow: 0 0 0.1em $color2;
84
+ }
85
+ }
86
+
87
+ textarea {
88
+ height: 10em;
89
+ line-height: 1.25em;
90
+ padding: 0.5em;
91
+ resize: none;
92
+ }
93
+
94
+ .select {
95
+ height: 2em;
96
+ position: relative;
97
+
98
+ > input {
99
+ border: 0;
100
+ height: calc(2em - 3px);
101
+ margin: 0 4em 0 -0.5em;
102
+ position: absolute;
103
+ width: calc(100% - 2.1em);
104
+ z-index: 1;
105
+ }
106
+
107
+ > select {
108
+ height: 2em;
109
+ left: 0;
110
+ opacity: 0;
111
+ position: absolute;
112
+ top: 0;
113
+ width: 100%;
114
+ z-index: 0;
115
+ }
116
+
117
+ &:focus {
118
+ box-shadow: 0 0 0.1em $color2;
119
+ }
120
+
121
+ &::before {
122
+ border-left: solid $grey 1px;
123
+ content: '\025BE';
124
+ line-height: 2em;
125
+ position: absolute;
126
+ right: 0;
127
+ text-align: center;
128
+ width: 2em;
129
+ }
130
+ }
131
+
132
+ menu {
133
+ background-color: $color0;
134
+ border: solid $grey 1px;
135
+ box-shadow: 2pt 2pt 2pt $grey;
136
+ cursor: default;
137
+ display: block;
138
+ margin-left: -5pt;
139
+ margin-top: -5pt;
140
+ min-width: 100pt;
141
+ position: fixed;
142
+ z-index: 10;
143
+ }
144
+
145
+ menuitem {
146
+ display: block;
147
+ padding-left: 5pt;
148
+
149
+ &:hover {
150
+ background-color: $color3;
151
+ color: $color-base;
152
+ }
153
+
154
+ &.warning {
155
+ color: $color1;
156
+ }
157
+
158
+ &.warning:hover {
159
+ background-color: $color1;
160
+ color: $color-base;
161
+ }
162
+ }
163
+
164
+ .diff {
165
+ max-height: 100%;
166
+ max-width: 67%;
167
+ overflow-y: scroll;
168
+
169
+ ol.lines,
170
+ pre {
171
+ float: left;
172
+ font-family: 'Andale Mono', "Monaco", monospace;
173
+ font-size: 10pt;
174
+ font-weight: 100;
175
+ line-height: 1.15em;
176
+ width: calc(100% - 3em);
177
+ }
178
+
179
+ ol.lines {
180
+ background-color: $color3;
181
+ color: $color4;
182
+ padding-left: 5pt;
183
+ width: 3em;
184
+ }
185
+
186
+ img {
187
+ display: block;
188
+ margin: 1em 0;
189
+ max-height: 100%;
190
+ max-width: calc(100% - 1em);
191
+ }
192
+
193
+ pre {
194
+ font-size: calc(1em + 1px);
195
+ white-space: pre-wrap;
196
+ width: 100%;
197
+
198
+ label {
199
+ background-color: $color0;
200
+ color: $color5;
201
+ display: block;
202
+ line-height: 2em;
203
+ margin-left: calc(-1em);
204
+ }
205
+
206
+ label::before {
207
+ content: '≡';
208
+ font-size: 1.5em;
209
+ margin: 0 0.5em;
210
+ }
211
+
212
+ .meta {
213
+ display: none;
214
+ }
215
+
216
+ .sub {
217
+ background-color: $color1;
218
+ position: relative;
219
+ }
220
+
221
+ .sub::before {
222
+ background-color: lighten($color1, 10%);
223
+ content: '<';
224
+ display: block;
225
+ left: -1em;
226
+ position: absolute;
227
+ text-align: center;
228
+ top: 0;
229
+ width: 1em;
230
+ }
231
+
232
+ .add {
233
+ background-color: $color2;
234
+ position: relative;
235
+ }
236
+
237
+ .add::before {
238
+ background-color: lighten($color2, 10%);
239
+ border-radius: 0.25 0 0 0.25em;
240
+ content: '>';
241
+ display: block;
242
+ left: -1em;
243
+ position: absolute;
244
+ text-align: center;
245
+ top: 0;
246
+ width: 1em;
247
+ }
248
+
249
+ code {
250
+ $bound: darken($color4, 10%);
251
+ background-color: $color4;
252
+ //background-image: -webkit-linear-gradient(left, $color4, $color4 80em, $bound 80.1em, $bound);
253
+ background-image: linear-gradient(left, $color4, $color4 80em, $bound 80.1em, $bound);
254
+ color: $color0;
255
+ display: block;
256
+ padding-left: calc(1em);
257
+ }
258
+ }
259
+ }
260
+
261
+ }
@@ -0,0 +1,50 @@
1
+ @import 'colors';
2
+
3
+ button,
4
+ input[type="submit"],
5
+ .button {
6
+ $color: $color0;
7
+ $altcolor: lighten($color, 7%);
8
+ $invert: invert(grayscale($color));
9
+ background-color: $color;
10
+ border: solid mix($invert, $color, 25%) 1px;
11
+ border-radius: 2pt;
12
+ border-style: solid;
13
+ border-width: 1px;
14
+ box-shadow: inset 0 1em 0.15em $altcolor;
15
+ color: $invert;
16
+ cursor: pointer;
17
+ font-size: 1em;
18
+ font-weight: bold;
19
+ height: 2.5em;
20
+ margin: 0.25em 0;
21
+ padding: 0 1em;
22
+ transition: background-color 250ms, box-shadow 250ms;
23
+
24
+ &:focus {
25
+ outline: -webkit-focus-ring-color auto 5px;
26
+ }
27
+
28
+ &:hover {
29
+ background-color: darken($color, 5%);
30
+ box-shadow: inset 0 1em 0.15em darken($altcolor, 5%);
31
+ }
32
+
33
+ &:active {
34
+ color: $color4;
35
+ }
36
+
37
+ &.button--tiny {
38
+ font-size: 0.75em;
39
+ height: 1.75em;
40
+ margin: 0.1em;
41
+ padding: 0 0.5em;
42
+ }
43
+
44
+ &.button--medium {
45
+ font-size: 0.75em;
46
+ height: 2.3em;
47
+ margin: 0.1em;
48
+ padding: 0 0.5em;
49
+ }
50
+ }
@@ -0,0 +1,59 @@
1
+ @import 'colors';
2
+
3
+ input[type="checkbox"] {
4
+ display: none;
5
+
6
+ + label {
7
+ cursor: pointer;
8
+ position: relative;
9
+
10
+ &::before {
11
+ background-color: $color0;
12
+ border: solid 1px $color4;
13
+ border-radius: 1pt;
14
+ content: '';
15
+ display: inline-block;
16
+ height: 1em;
17
+ margin-right: 0.25em;
18
+ text-align: right;
19
+ vertical-align: middle;
20
+ width: 1em;
21
+ }
22
+
23
+ &:hover {
24
+ &::before {
25
+ background-color: darken($color0, 5%);
26
+ }
27
+ }
28
+ }
29
+
30
+ &:checked + label {
31
+ &::after {
32
+ content: '✔';
33
+ font-family: "Lucida Console", monospace;
34
+ left: 0;
35
+ line-height: 1.4em;
36
+ position: absolute;
37
+ text-align: center;
38
+ top: 0;
39
+ width: 1.1em;
40
+ }
41
+ }
42
+
43
+ &.delete {
44
+ + label {
45
+ color: $color1;
46
+ }
47
+
48
+ &:checked + label {
49
+ &::before {
50
+ background-color: $color1;
51
+ }
52
+
53
+ &::after {
54
+ color: $color0;
55
+ content: '✖';
56
+ }
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,15 @@
1
+ $color-base: #FFF;
2
+
3
+ $color0: #F7F9FA;
4
+ $color1: #DF151A;
5
+ $color2: #4F57AA;
6
+ $color3: #72818B;
7
+ $color4: #454857;
8
+ $color5: #020303;
9
+
10
+ $color-done: #00CBE7;
11
+ $color-in-progress: #00DA3C;
12
+ $color-in-review: #F4F328;
13
+ $color-blocked: #DF151A;
14
+ $color-sprint: #F7F9FA;
15
+ $color-backlog: #454857;
@@ -0,0 +1,54 @@
1
+ @import 'colors';
2
+
3
+ fieldset.details {
4
+ border: 0;
5
+ min-height: 2em;
6
+
7
+ > * {
8
+ max-height: 0;
9
+ transition: max-height 250ms, padding 250ms 1ms;
10
+ }
11
+
12
+ > ul { padding: 0 0.5em; }
13
+
14
+ legend {
15
+ cursor: pointer;
16
+
17
+ &::before {
18
+ content: '\25B6';
19
+ display: inline-block;
20
+ line-height: 1em;
21
+ margin-right: 0.5em;
22
+ transition: transform 250ms ease-in-out;
23
+ }
24
+
25
+ &:focus {
26
+ outline: -webkit-focus-ring-color auto 5px;
27
+
28
+ &::before {
29
+ transform: translate(1pt, 0);
30
+ }
31
+ }
32
+
33
+ &:active {
34
+ &::before {
35
+ text-shadow: none;
36
+ }
37
+ }
38
+ }
39
+
40
+ &.open {
41
+ > * { max-height: 50vh; }
42
+ > ul { padding: 0.5em; }
43
+ legend {
44
+ text-shadow: none;
45
+
46
+ &::before {
47
+ text-shadow: none;
48
+ transform: rotate(90deg);
49
+ }
50
+ }
51
+
52
+ legend::after { display: none; }
53
+ }
54
+ }
@@ -0,0 +1,171 @@
1
+ @import 'colors';
2
+
3
+ #__pm__panel {
4
+
5
+ dl.properties {
6
+ line-height: 2em;
7
+ margin: 1em;
8
+ min-height: calc(100% - 5em);
9
+ position: -webkit-sticky;
10
+ position: sticky;
11
+ top: 0;
12
+ z-index: -1;
13
+
14
+ .property {
15
+ margin-bottom: 1em;
16
+
17
+ &.property--inline {
18
+ display: flex;
19
+
20
+ textarea {
21
+ height: 5em;
22
+ }
23
+ }
24
+
25
+ dt {
26
+ min-width: 8em;
27
+ }
28
+
29
+ dd {
30
+ width: 100%;
31
+ }
32
+ }
33
+ }
34
+
35
+ #__pm__commit {
36
+ display: block;
37
+ height: 100%;
38
+ overflow: auto;
39
+ }
40
+
41
+ #__pm__new_commit {
42
+ background-color: $color0;
43
+ line-height: 3em;
44
+ min-height: 3em;
45
+ position: relative;
46
+
47
+ ul#__pm__new_commit__actions {
48
+ display: flex;
49
+ list-style-type: none;
50
+ position: absolute;
51
+ right: 0;
52
+ top: 0;
53
+ }
54
+
55
+ input[type='submit'] {
56
+ margin-left: 5pt;
57
+ }
58
+ }
59
+
60
+ #__pm__commit__changes {
61
+ ul {
62
+ list-style-type: none;
63
+ line-height: 1.5em;
64
+ margin-bottom: 1.5em;
65
+ height: calc(100% - 4.5em);
66
+ overflow: hidden;
67
+ li button {
68
+ float: right;
69
+ clear: right;
70
+ }
71
+ label[for='__pm__changes_all'] {
72
+ color: #A3A3A3;
73
+ line-height: 2.5em;
74
+ }
75
+ }
76
+ }
77
+
78
+ #__pm__task {
79
+ background-color: $color0;
80
+ position: absolute;
81
+ top: 0;
82
+ right: 0pt;
83
+ bottom: 0;
84
+ border-left: solid 1px #A3A3A3;
85
+ padding: 5pt;
86
+ width: 33%;
87
+ min-width: 300pt;
88
+ overflow-y: scroll;
89
+ z-index: 2;
90
+ input[type="submit"] {
91
+ float: right;
92
+ }
93
+ #__pm__commit__message {
94
+ height: 2.4em;
95
+ transition: height 100ms ease-in-out;
96
+ &:focus { height: calc(25% - 2.5em); }
97
+ }
98
+ }
99
+
100
+ ul#__pm__commits {
101
+ list-style-type: none;
102
+ padding: 0;
103
+ > li {
104
+ margin-bottom: 0.5em;
105
+ padding: 0;
106
+ line-height: 1.4em;
107
+ clear: left;
108
+ > * {
109
+ margin: 0 0.25em 0 5em;
110
+ }
111
+ img {
112
+ float: left;
113
+ width: 4em;
114
+ height: 4em;
115
+ max-width: 4em;
116
+ margin: 0.25em;
117
+ border: solid 1px $color4;
118
+ border-radius: 2pt;
119
+ }
120
+ &:first-child blockquote {
121
+ border-top: none;
122
+ padding-top: 0;
123
+ }
124
+ blockquote {
125
+ border-top: dotted $color4 1px;
126
+ padding-top: 0.5em;
127
+ .user__name {
128
+ margin-right: 0.5em;
129
+ font-weight: bold;
130
+ font-size: 0.9em;
131
+ text-decoration: none;
132
+ color: $color3;
133
+ }
134
+ }
135
+ time {
136
+ font-size: 0.9em;
137
+ color: $color3;
138
+ }
139
+ button.attachments {
140
+ margin: 0.5em;
141
+ float: right;
142
+ }
143
+ dl.tasks {
144
+ margin: 0.5em 0 0.5em 5em;
145
+ dt { font-size: 0.9em; font-weight: bold; }
146
+ ul.properties {
147
+ line-height: 1.75em;
148
+ list-style-type: none;
149
+ padding: 0;
150
+ li {
151
+ .name { width: 5em; }
152
+ .name::after { display: inline; content: ':'; }
153
+ .before { position: relative; }
154
+ .before { padding-right: 1em; }
155
+ .before::after { display: inline; line-height: 1.25em; font-size: 1.5em; position: absolute; right: -0.5em; content: '⇒'; }
156
+ .before + .after { padding-left: 1.25em; }
157
+ }
158
+ }
159
+ }
160
+ &.continuous {
161
+ clear: none;
162
+ img { display: none; }
163
+ blockquote {
164
+ .user__name { display: none; }
165
+ }
166
+ &:not(:last-child) time { display: none; }
167
+ }
168
+ }
169
+ &::after { content: ''; display: block; clear: both; }
170
+ }
171
+ }