-
Notifications
You must be signed in to change notification settings - Fork 0
/
regioncalc.coffee
82 lines (76 loc) · 2.09 KB
/
regioncalc.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
unit = ({ id, class:cls, from, into }, child) ->
param = { class:'unit', style:'' }
if id then param.id = id
if cls then param.class += ' ' + cls
if from
param.style += "-webkit-flow-from:#{from}; flow-from:#{from}; "
if into
param.style += "-webkit-flow-into:#{into}; flow-into:#{into}; "
div param, child
m =
unit: unit
id: ({ id, in1 }) ->
div class:'id', =>
unit class:'connector', from:in1, into:id
orand: ({ id, in1, in2 }) ->
div class:'orand', =>
unit class:'connector', from:in1, into:id
unit class:'connector', from:in2, into:id
or: ({ id, in1, in2 }) ->
div class:'or', =>
@orand id:"#{id}_orand", in1:in1, in2:in2
unit class:'connector', from:"#{id}_orand", into:id
unit from:"#{id}_orand"
and: ({ id, in1, in2 }) ->
div class:'and', =>
@orand id:id, in1:in1, in2:in2
unit from:id
not: ({ id, in1 }) ->
div class:'not', =>
unit class:'connector', from:in1, into:id
unit class:'plus', id:"#{id}_plus", into:id
unit into:id
unit into:id
unit from:id
unit class:'minus', id:"#{id}_minus", from:id
style """
##{id}_minus::region(##{id}_plus) {
margin-top: #{-2 * @size}px;
}
"""
script """
Region('##{id}_minus').addRegionRule('##{id}_plus', {
marginTop: '#{-2 * @size}px'
});
"""
dup: ({ id, in1 }) ->
div class:'dup', =>
unit class:'connector', from:in1, into:id
unit class:'unit2', into:id
unit into:id
unit into:id
unit class:'unit2', from:id
unit class:'unit2', from:id
in: ({ id }) ->
unit id:id, class:'in', into:id
out: ({ id, in1 }) ->
unit id:id, class:'out', from:in1
init: (@size=100) ->
style """
.unit {
width: #{@size}px;
height: #{@size}px;
-webkit-region-break-inside: avoid;
break-inside: avoid;
}
.unit.in {
height: 0;
}
.unit.connector {
height: auto;
max-height: #{@size}px;
}
.unit.unit2 {
height: #{2 * @size}px;
}
"""