treemap21 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9825a658dbeae9c6fb7f654e5143cf31f2c2d293336be852fceb8fd750d28349
4
- data.tar.gz: c31d5ec01707166babfb0b6d2ed7fa5e100d522cf6b6f70cc79a7bdb6d6006bf
3
+ metadata.gz: c6d4cea411a212554b648adda8cc3ef97caeb9bc777930fae4812d6cfff3531a
4
+ data.tar.gz: d53d6fae22338a229522fa0e3ff80797708fea28e856456f705a3bc4a0cd81d2
5
5
  SHA512:
6
- metadata.gz: fa4c065777f472807dd2d166fbcc3bbc9c39a911f9aed9d8d575550c9b38d691473434b647204b3e4e0548b61597db085d3429c4467658d15481912308b4168f
7
- data.tar.gz: 8d1b5af64e797c1daab98a0a8636920678f6de19e58c1ddb89dd1b96447b00d130cf3d0682ef3a397a5939fac63df4c25d9337988ce9d3fd6f2aff6f49513ecc
6
+ metadata.gz: 9e97f1cf05c2c1c55147c4f010459e40ab4d8ceded089d14fb081d6d91ab773af3be2bb0922dee7bfcb4f5f9d0c4bde257273e033c23c23da0d2aa05110a0572
7
+ data.tar.gz: d597f34903c1c95d0d403dc3c93028d27e06284c0037b880e4bb18a18032ab9fcf512f32073a22011a2b13f3c7aa640e7b32b1f5fb456e866265dbda44272388
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/lib/treemap21.rb CHANGED
@@ -2,29 +2,40 @@
2
2
 
3
3
  # file: treemap21.rb
4
4
 
5
-
6
5
  require 'rexle'
7
6
 
8
7
 
9
8
  class Treemap21
9
+
10
+ attr_reader :to_html
10
11
 
11
12
  def initialize(a, orientation: :landscape, debug: false)
12
13
 
13
14
  @a, @orientation, @debug = a, orientation, debug
14
-
15
+ @to_html = build_html()
16
+
15
17
  end
18
+
19
+ private
16
20
 
17
- def to_html()
18
-
19
- doc3 = Rexle.new("<div class='cbox'/>")
21
+ def build_html()
22
+
23
+ # used for the box id
24
+ @counter, @count = 2, 1
25
+
26
+ doc3 = Rexle.new("<div id='box1' class='cbox'/>")
20
27
  doc = mapper(doc3, @a, orientation: @orientation)
21
28
  boxes = doc.root.xml pretty: true
29
+
30
+ cbox_css = @a.length.times.with_index.map do |i|
31
+ hex = 3.times.map { rand(60..250).to_s(16) }.join
32
+ "#cbox%s {background-color: #%s}" % [i+1, hex]
33
+ end
22
34
 
23
35
  <<EOF
24
36
  <html>
25
37
  <head>
26
38
  <style>
27
-
28
39
  .cbox, .long, .cbox1, .cbox1 a {
29
40
  width: 100%;
30
41
  height: 100%;
@@ -38,10 +49,15 @@ class Treemap21
38
49
  align-items: center;
39
50
  }
40
51
 
41
- .cbox1 a { text-decoration: none; color: #010; font-family: helvetica, arial}
52
+ .cbox1 a {
53
+ text-decoration: none;
54
+ color: #010;
55
+ font-family: helvetica, arial;
56
+ color: #115;
57
+ }
58
+
42
59
  .cbox1 a:hover { background-color: rgba(255,255,255,0.2); color: #902}
43
-
44
- .cbox1 span { background-color: transparent; }
60
+ .cbox1 span { background-color: transparent; color2: #300 }
45
61
 
46
62
  .c10 {font-size: 8em}
47
63
  .c9 {font-size: 7.5em}
@@ -54,6 +70,8 @@ class Treemap21
54
70
  .c2 {font-size: 2.4em}
55
71
  .c1 {font-size: 1.6em}
56
72
  .c0 {font-size: 1.1em}
73
+
74
+ #{cbox_css.join("\n")}
57
75
 
58
76
  </style>
59
77
  </head>
@@ -67,15 +85,20 @@ class Treemap21
67
85
  EOF
68
86
  end
69
87
 
70
- private
71
-
72
88
  def add_box(text, url=nil, attr={}, cfont)
73
-
74
- a = attr.map {|key, value| "%s: %s" % [key, value]}
75
- h = {class: 'cbox1 ' + cfont, style: a.join('; ')}
89
+
76
90
  span = Rexle::Element.new('span', value: text)
91
+
92
+ a = attr.map {|key, value| "%s: %s" % [key, value]}
93
+
94
+ h = {
95
+ id: 'cbox' + @count.to_s,
96
+ class: 'cbox1 ' + cfont,
97
+ style: a.join('; ')
98
+ }
99
+ @count = @count + 1
100
+
77
101
  doc = Rexle::Element.new('div', attributes: h)
78
-
79
102
 
80
103
  if url then
81
104
  anchor = Rexle::Element.new('a', attributes: {href: url})
@@ -91,7 +114,7 @@ EOF
91
114
  end
92
115
 
93
116
  def mapper(doc, a, orientation: :landscape, total: 100)
94
-
117
+
95
118
  if @debug then
96
119
  puts 'orientation: ' + orientation.inspect
97
120
  puts 'total: ' + total.inspect
@@ -104,20 +127,18 @@ EOF
104
127
  @canvas_height = 100; @canvas_width = @canvas_height / 2
105
128
  'cbox'
106
129
  end
107
-
108
- bgcolor = 3.times.map { rand(60..250).to_s(16) }.join
109
130
 
110
131
  # find the largest box
111
- a2 = a.sort_by {|_, percent, _| percent}.reverse
132
+ a2 = a.sort_by {|_, percent, _| percent}
112
133
  puts 'a2.first: ' + a2.first.inspect if @debug
113
- title, percent, url = a2.first
134
+ title, percent, url = a2.pop
114
135
 
115
136
  remainder = total - percent
116
137
  # how much space does the largest box take?
117
- rem = 100 / (total / percent.to_f)
118
- rem2 = 100 - rem
138
+ rpct = 100 / (total / percent.to_f)
139
+ rem_pct = 100 - rpct
119
140
 
120
- new_orientation = if rem <= 30 then
141
+ new_orientation = if rpct.round <= 33 and rpct.round >= 3 then
121
142
  orientation
122
143
  else
123
144
  orientation == :landscape ? :portrait : :landscape
@@ -125,27 +146,21 @@ EOF
125
146
 
126
147
  puts 'new_orientation: ' + new_orientation.inspect if @debug
127
148
 
128
- dimension = orientation == :landscape ? :width : :height
129
-
130
- style = {
131
- :"background-color" => '#' + bgcolor,
132
- dimension => rem.round.to_s + '%'
133
- }
149
+ dimension = orientation == :landscape ? :width : :height
150
+ style = { dimension => rpct.round.to_s + '%' }
134
151
 
135
152
  e = add_box(title, url, style, ("c%02d" % percent).to_s[0..-2])
136
153
  puts 'e: ' + e.inspect if @debug
137
154
 
138
155
  doc.root.add e
139
156
 
140
- if a2.length > 1 then
141
-
142
- dim2 = orientation == :landscape ? 'width' : 'height'
143
- doc3 = Rexle.new("<div class='%s' style='%s: %s%%'/>" % [klass, dim2,
144
- rem2.round.to_s])
157
+ if a2.any? then
145
158
 
146
- doc2 = mapper(doc3, a2[1..-1], orientation: new_orientation,
147
- total: remainder)
159
+ doc3 = Rexle.new("<div id='box%s' class='%s' style='%s: %s%%'/>" % \
160
+ [@counter, klass, dimension, rem_pct.round.to_s])
161
+ @counter += 1
148
162
 
163
+ doc2 = mapper(doc3, a2, orientation: new_orientation, total: remainder)
149
164
  doc.root.add doc2.root
150
165
 
151
166
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: treemap21
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,7 +35,7 @@ cert_chain:
35
35
  12lnvOZUZbofT7ctIMQL18INESoDYcmiH9r34KV6UCK9H/Ifm5CPKEYee8nilRM+
36
36
  yIv4TcA8Psh7eTn7IAvLK4C0
37
37
  -----END CERTIFICATE-----
38
- date: 2021-05-10 00:00:00.000000000 Z
38
+ date: 2021-05-11 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rexle
metadata.gz.sig CHANGED
Binary file