ProMotion-XLForm 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +40 -0
- data/lib/ProMotion/XLForm/xl_form.rb +60 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02a3b9031223eeed2b269133801248640428cda1
|
4
|
+
data.tar.gz: c1122c6fb0bfc8b6b2ea35724f427fb9be5eb3d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a89a59030b0d934598ed8570e1e1ce98da593527fa8ab24c608100f99acf53c34018ee26af9ba0e652a55fc7d4dd59c8dd858c712d35b95eb6222e5b0da0faf
|
7
|
+
data.tar.gz: c2ad9973c172fc545d8a74d95b2a2a4d190dc497540812ae90946812c8c842d6025221b66a85060c662f17f713a0c4fd44a2f1793fca66a52b5f7db4446cd886
|
data/README.md
CHANGED
@@ -248,6 +248,46 @@ You can add validators to cells.
|
|
248
248
|
|
249
249
|
Finally, you can provide a PM::Validator with a `valid?(cell)` method.
|
250
250
|
|
251
|
+
### Make a row or section invisible depending on other rows values
|
252
|
+
[You can show/hide cells](https://github.com/xmartlabs/XLForm#make-a-row-or-section-invisible-depending-on-other-rows-values) depending on a cell value with a predicate
|
253
|
+
|
254
|
+
```ruby
|
255
|
+
{
|
256
|
+
title: 'Hide and seek',
|
257
|
+
cells: [
|
258
|
+
{
|
259
|
+
title: 'Switch me',
|
260
|
+
type: :switch,
|
261
|
+
name: :hide_and_seek,
|
262
|
+
value: true
|
263
|
+
},
|
264
|
+
{
|
265
|
+
title: 'Appear when switch is on',
|
266
|
+
name: :show_me,
|
267
|
+
type: :info,
|
268
|
+
visible: {
|
269
|
+
# the cell name wich will "trigger" the visibility
|
270
|
+
name: :hide_and_seek,
|
271
|
+
|
272
|
+
# the operand. Valid operands are :equal, :not_equal, :contains, :not_contains
|
273
|
+
is: :equal,
|
274
|
+
|
275
|
+
# the value which trigger the visibility
|
276
|
+
value: true }
|
277
|
+
},
|
278
|
+
{
|
279
|
+
title: 'Appear when switch is off',
|
280
|
+
name: :hide_me,
|
281
|
+
type: :info,
|
282
|
+
|
283
|
+
# you can also write it this way
|
284
|
+
visible: ':hide_and_seek == false'
|
285
|
+
# also valid ':some_text contains "a text"'
|
286
|
+
# ':some_text not contains "a text"'
|
287
|
+
}
|
288
|
+
]
|
289
|
+
}
|
290
|
+
```
|
251
291
|
|
252
292
|
|
253
293
|
## Todo
|
@@ -128,6 +128,66 @@ module ProMotion
|
|
128
128
|
|
129
129
|
cell.disabled = !cell_data[:enabled] if cell_data[:enabled]
|
130
130
|
|
131
|
+
# row visible
|
132
|
+
if cell_data[:visible]
|
133
|
+
predicate = cell_data[:visible]
|
134
|
+
if predicate.is_a?(Hash)
|
135
|
+
tag = predicate[:name]
|
136
|
+
operand = case predicate[:is]
|
137
|
+
when :equal
|
138
|
+
'=='
|
139
|
+
when :not_equal
|
140
|
+
'!='
|
141
|
+
when :contains
|
142
|
+
'contains'
|
143
|
+
when :not_contains
|
144
|
+
'not contains'
|
145
|
+
else
|
146
|
+
predicate[:is]
|
147
|
+
end
|
148
|
+
value = predicate[:value]
|
149
|
+
else
|
150
|
+
match = /(:?[a-zA-Z_]+)\s+(==|!=|contains|not contains)\s+(.*)/.match(predicate)
|
151
|
+
if match and match.length == 4
|
152
|
+
# todo better than ignore ?
|
153
|
+
tag = match[1]
|
154
|
+
operand = match[2]
|
155
|
+
value = match[3]
|
156
|
+
if value =~ /"(.*)"/
|
157
|
+
value = value[1, value.length - 2]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
if tag and operand
|
163
|
+
if tag.is_a?(Symbol)
|
164
|
+
tag = tag.to_s
|
165
|
+
elsif tag.start_with?(':')
|
166
|
+
tag[0] = ''
|
167
|
+
end
|
168
|
+
value = case value
|
169
|
+
when 'true', :true, true
|
170
|
+
0
|
171
|
+
when 'false', :false, false
|
172
|
+
1
|
173
|
+
when String
|
174
|
+
"\"#{value}\""
|
175
|
+
else
|
176
|
+
value
|
177
|
+
end
|
178
|
+
|
179
|
+
if operand == 'contains'
|
180
|
+
cell.hidden = "$#{tag} contains[c] #{value}"
|
181
|
+
elsif operand == 'not contains'
|
182
|
+
cell.hidden = "not($#{tag} contains[c] #{value})"
|
183
|
+
else
|
184
|
+
cell.hidden = "$#{tag} #{operand} #{value}"
|
185
|
+
end
|
186
|
+
else
|
187
|
+
mp "#{cell_data[:visible]} can not be parsed", force_color: :red
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
131
191
|
# validators
|
132
192
|
if cell_data[:validators]
|
133
193
|
validators = cell_data[:validators]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ProMotion-XLForm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Michotte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ProMotion
|