admission 0.2.1 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,8 @@
1
1
  $border-color: black;
2
- $border-color2: #91287b;
3
- $bg-color: #feebff;
2
+ //$border-color2: #6d3291;
3
+ $border-color2: #4a207e;
4
+ $bg-color: #eee6ff;
5
+ $bg-selected: #d5c3fc;
4
6
 
5
7
  $border: 5;
6
8
 
@@ -22,18 +24,25 @@ html, body {
22
24
  body {
23
25
  margin: 0;
24
26
  align-items: center;
25
- justify-content: center;
27
+ //justify-content: center;
26
28
  background-color: #717171;
29
+ overflow-y: scroll;
27
30
  }
28
31
 
29
32
  #admission-visualisation {
30
33
  flex: 0 0;
31
34
  max-width: 100%;
32
35
  max-height: 100%;
33
- background-color: $bg-color;
34
36
 
35
37
  .splash-message {
36
38
  padding: px(2 * $border);
39
+ background-color: $bg-color;
40
+ margin: px(10 * $border) 0;
41
+ }
42
+
43
+ .admission-app-container {
44
+ background-color: $bg-color;
45
+ margin: px(10 * $border) 0;
37
46
  }
38
47
 
39
48
  .panels-list {
@@ -46,16 +55,19 @@ body {
46
55
  margin: px($border);
47
56
  margin-left: 0;
48
57
  padding: px(2 * $border);
49
- border: 3px outset $border-color;
58
+ border: 2px solid $border-color;
50
59
  cursor: pointer;
51
60
  font-weight: bold;
52
61
  &:first-of-type { margin-left: px($border); }
53
62
 
54
63
  &.active {
55
- border-color: $border-color2;
56
- border-style: inset;
64
+ background-color: $bg-selected;
65
+ border-style: solid;
57
66
  color: $border-color2;
58
67
  }
68
+ &:hover {
69
+ background-color: $bg-selected;
70
+ }
59
71
  }
60
72
  }
61
73
 
@@ -63,13 +75,6 @@ body {
63
75
  padding: px($border);
64
76
  }
65
77
 
66
- .controls-row {
67
- > * {
68
- display: inline-block;
69
- margin-left: px($border);
70
- &:first-child { margin-left: 0; }
71
- }
72
- }
73
78
  }
74
79
 
75
80
  .flex-column {
@@ -90,18 +95,34 @@ body {
90
95
  }
91
96
  }
92
97
 
98
+ .check_box {
99
+ display: inline-block;
100
+ padding: px($border);
101
+ border: 1px solid $border-color;
102
+ background-color: white;
103
+ &.checked { background-color: $bg-selected; }
104
+ &:hover { cursor: pointer }
105
+ }
106
+
93
107
  .button {
108
+ display: inline-block;
94
109
  padding: px($border);
95
110
  margin: 0;
96
111
  border: 1px solid $border-color;
97
112
  border-radius: 0;
98
113
  background-color: white;
99
114
  &:hover {
100
- background-color: white;
115
+ background-color: $bg-selected;
116
+ cursor: pointer;
117
+ }
118
+
119
+ &.small {
120
+ font-size: 80%;
121
+ padding: px($border / 2);
101
122
  }
102
123
  }
103
124
 
104
- .controls-select {
125
+ .select_box {
105
126
  > ._inputs {
106
127
  display: flex;
107
128
  > input {
@@ -117,27 +138,111 @@ body {
117
138
  > ._dropdown {
118
139
  position: relative;
119
140
  > ul {
141
+ z-index: 1;
120
142
  background-color: white;
121
143
  position: absolute;
122
- width: 100%;
144
+ max-width: 300%;
123
145
  border: 1px solid $border-color;
124
- border-top: none;
125
146
  list-style-type: none;
126
147
  margin: 0;
127
148
  padding: 0;
149
+ top: -1px;
128
150
  > li {
129
151
  @include no-select();
130
152
  padding: px($border);
131
153
  border: 1px solid transparent;
154
+ overflow: hidden;
132
155
  &.selected {
133
156
  background-color: $border-color2;
134
157
  color: white;
135
158
  }
136
159
  &:hover {
137
- background-color: $bg-color;
160
+ background-color: $bg-selected;
161
+ color: inherit;
138
162
  }
139
163
  }
140
164
  }
141
165
  }
142
166
 
167
+ }
168
+
169
+ .controls {
170
+ > .controls-group {
171
+ margin-left: px($border);
172
+ border-left: 1px solid $border-color;
173
+ padding-left: px($border);
174
+
175
+ &:first-child {
176
+ margin-left: 0;
177
+ border-left: none;
178
+ padding-left: 0;
179
+ }
180
+ }
181
+ }
182
+
183
+ .controls-group {
184
+ display: inline-block;
185
+ margin: px($border) 0;
186
+ > * {
187
+ display: inline-block;
188
+ margin-left: px($border);
189
+ &:first-child { margin-left: 0; }
190
+ }
191
+ }
192
+
193
+ .nested-list {
194
+ $_color: black;
195
+
196
+ width: 500px;
197
+ padding: px($border) 0 0 0;
198
+ list-style-type: none;
199
+ margin: 0 0 0 px($border);
200
+ z-index: 0;
201
+
202
+ .nested-list-content {
203
+ display: inline-block;
204
+ .icon {
205
+ margin-left: px($border);
206
+ }
207
+ .content {
208
+ margin-left: px($border);
209
+ }
210
+ }
211
+
212
+ position: relative;
213
+ &:before {
214
+ content: '';
215
+ position: absolute;
216
+ display: block;
217
+ width: 0;
218
+ top: 0;
219
+ bottom: 0;
220
+ left: 0;
221
+ border-left: 1px solid $_color;
222
+ }
223
+
224
+ > li {
225
+ padding-left: px(3*$border);
226
+ line-height: 1.5em;
227
+
228
+ position: relative;
229
+ &:before {
230
+ content: '';
231
+ position: absolute;
232
+ display: block;
233
+ width: px(3*$border);
234
+ height: 0;
235
+ margin-top: px(1);
236
+ top: 0.75em;
237
+ left: 0;
238
+ border-top: 1px solid $_color;
239
+ }
240
+ &:last-child:before {
241
+ background-color: $bg-color;
242
+ height: auto;
243
+ top: 0.75em;
244
+ bottom: 0;
245
+ }
246
+ }
247
+
143
248
  }
@@ -1,10 +1,18 @@
1
1
  var path = require('path');
2
+ var UglifyJSPlugin = require('uglifyjs-webpack-plugin');
3
+
4
+ var production_build = process.env.BUILD === 'dist';
5
+
6
+ var plugins = [];
7
+ if (production_build) {
8
+ plugins.push(new UglifyJSPlugin({output: {ascii_only: true}}));
9
+ }
2
10
 
3
11
  module.exports = {
4
12
  entry: './index.jsx',
5
13
  output: {
6
- filename: 'admission_visualisation.js',
7
- path: path.resolve(__dirname, 'build')
14
+ filename: 'app.js',
15
+ path: path.resolve(__dirname, (production_build ? 'dist' : 'build'))
8
16
  },
9
17
 
10
18
  module: {
@@ -28,5 +36,7 @@ module.exports = {
28
36
 
29
37
  resolve: {
30
38
  extensions: ['.js', '.jsx']
31
- }
39
+ },
40
+
41
+ plugins: plugins
32
42
  };
@@ -2878,6 +2878,10 @@ source-list-map@^1.1.1:
2878
2878
  version "1.1.2"
2879
2879
  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1"
2880
2880
 
2881
+ source-list-map@^2.0.0:
2882
+ version "2.0.0"
2883
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
2884
+
2881
2885
  source-map-support@^0.4.2:
2882
2886
  version "0.4.15"
2883
2887
  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1"
@@ -3106,10 +3110,27 @@ uglify-js@^2.8.27:
3106
3110
  optionalDependencies:
3107
3111
  uglify-to-browserify "~1.0.0"
3108
3112
 
3113
+ uglify-js@^2.8.29:
3114
+ version "2.8.29"
3115
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
3116
+ dependencies:
3117
+ source-map "~0.5.1"
3118
+ yargs "~3.10.0"
3119
+ optionalDependencies:
3120
+ uglify-to-browserify "~1.0.0"
3121
+
3109
3122
  uglify-to-browserify@~1.0.0:
3110
3123
  version "1.0.2"
3111
3124
  resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
3112
3125
 
3126
+ uglifyjs-webpack-plugin@^0.4.6:
3127
+ version "0.4.6"
3128
+ resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
3129
+ dependencies:
3130
+ source-map "^0.5.6"
3131
+ uglify-js "^2.8.29"
3132
+ webpack-sources "^1.0.1"
3133
+
3113
3134
  uid-number@^0.0.6:
3114
3135
  version "0.0.6"
3115
3136
  resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
@@ -3187,6 +3208,13 @@ webpack-sources@^0.2.3:
3187
3208
  source-list-map "^1.1.1"
3188
3209
  source-map "~0.5.3"
3189
3210
 
3211
+ webpack-sources@^1.0.1:
3212
+ version "1.0.1"
3213
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf"
3214
+ dependencies:
3215
+ source-list-map "^2.0.0"
3216
+ source-map "~0.5.3"
3217
+
3190
3218
  webpack@^2.6.1:
3191
3219
  version "2.6.1"
3192
3220
  resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: admission
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - doooby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-09 00:00:00.000000000 Z
11
+ date: 2017-07-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: update-me
14
14
  email: zelazk.o@email.cz
@@ -23,8 +23,8 @@ files:
23
23
  - LICENSE
24
24
  - README.md
25
25
  - admission.gemspec
26
+ - bin/build
26
27
  - bin/rspec
27
- - bin/server.rb
28
28
  - lib/admission.rb
29
29
  - lib/admission/ability.rb
30
30
  - lib/admission/admission.rb
@@ -35,7 +35,7 @@ files:
35
35
  - lib/admission/resource_arbitration.rb
36
36
  - lib/admission/status.rb
37
37
  - lib/admission/version.rb
38
- - lib/admission/visualisation.rb
38
+ - lib/admission/visualisation_app.rb
39
39
  - spec/integration/_helper.rb
40
40
  - spec/integration/action_arbitrating_spec.rb
41
41
  - spec/integration/resource_arbitrating_spec.rb
@@ -55,12 +55,17 @@ files:
55
55
  - visualisation/actions/index.js
56
56
  - visualisation/components/app_container.jsx
57
57
  - visualisation/components/input_with_select.jsx
58
+ - visualisation/components/nested_list_row.jsx
58
59
  - visualisation/components/privilege_select.jsx
59
60
  - visualisation/components/privileges_panel.jsx
61
+ - visualisation/components/rules_panel.jsx
60
62
  - visualisation/dist/.gitkeep
63
+ - visualisation/dist/app.js
64
+ - visualisation/helpers.js
61
65
  - visualisation/index.jsx
62
66
  - visualisation/package.json
63
67
  - visualisation/reducers/index.js
68
+ - visualisation/server.rb
64
69
  - visualisation/style.scss
65
70
  - visualisation/webpack.config.js
66
71
  - visualisation/yarn.lock
data/bin/server.rb DELETED
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- # Set up gems listed in the Gemfile.
5
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
6
- require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
7
-
8
- require 'rack'
9
- require 'byebug'
10
-
11
- require_relative '../lib/admission'
12
- require_relative '../lib/admission/visualisation'
13
- require_relative '../spec/test_context/index'
14
-
15
- Admission::Visualisation.set :js_entry,
16
- Admission::Visualisation::ASSETS_PATH.join('build', 'admission_visualisation.js')
17
-
18
- Admission::Visualisation.set :admission_data,
19
- {
20
- order: PRIVILEGES_ORDER,
21
- rules: ACTIONS_RULES,
22
- arbitrator: Admission::Arbitration
23
- }
24
-
25
-
26
- Rack::Handler::WEBrick.run Admission::Visualisation
@@ -1,81 +0,0 @@
1
- require 'sinatra/base'
2
- require 'sinatra/json'
3
- require 'haml'
4
- require 'pathname'
5
-
6
- class Admission::Visualisation < Sinatra::Base
7
- ASSETS_PATH = Pathname.new(__FILE__).join('..', '..', '..', 'visualisation')
8
-
9
- enable :inline_templates
10
-
11
- set :js_entry, ASSETS_PATH.join('dist', 'admission_visualisation.js')
12
-
13
- get '/' do
14
- haml :index
15
- end
16
-
17
- get '/admission_visualisation.js' do
18
- send_file settings.js_entry
19
- end
20
-
21
- get '/admission_data' do
22
- json Admission::Visualisation.admission_data_to_js(
23
- **settings.admission_data)
24
- end
25
-
26
- def self.admission_data_to_js order:, rules:, arbitrator:, **_
27
- js_data = {}
28
-
29
- top_levels = []
30
- privileges = order.values.inject Array.new do |arr, levels|
31
- tops, others = levels.to_a.partition{|key, _| key == :'^'}
32
- tops.first[1].tap{|privilege| top_levels << privilege.text_key}
33
-
34
- others.each do |_, privilege|
35
- arr << {name: privilege.name, level: privilege.level,
36
- inherits: privilege.inherited && privilege.inherited.map(&:text_key)}
37
- end
38
-
39
- arr
40
- end
41
- js_data[:top_levels] = top_levels
42
- js_data[:privileges] = privileges
43
-
44
- rules = if arbitrator == Admission::Arbitration
45
- rules.to_a.map do |scope, index|
46
-
47
- index = index.to_a.map do |privilege, rule|
48
- if rule.is_a? Proc
49
- rule = 'proc'
50
- end
51
-
52
- [privilege.text_key, rule]
53
- end
54
-
55
- [scope, Hash[index]]
56
- end
57
-
58
- else
59
- raise "not implemented for #{arbitrator.name}"
60
-
61
- end
62
- js_data[:rules] = Hash[rules]
63
-
64
- js_data
65
- end
66
-
67
- end
68
-
69
- __END__
70
-
71
- @@ layout
72
- !!! 5
73
- %html
74
- %head
75
- %title= 'Admission'
76
- %body.flex-column
77
- = yield
78
-
79
- @@ index
80
- #admission-visualisation(data-url="/admission_data")
81
- %script(src="/admission_visualisation.js")