caracal 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +7 -0
- data/README.md +11 -0
- data/lib/caracal/core/models/table_cell_model.rb +4 -3
- data/lib/caracal/core/models/table_model.rb +1 -1
- data/lib/caracal/renderers/document_renderer.rb +38 -3
- data/lib/caracal/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5e775f349922d6591347d38de57b4211581c75d1b1b1fe08f67d887d68833a6b
|
4
|
+
data.tar.gz: 635e787f52491c8f06ff3dcb32cd0d573a4abc7b44aa693dc8421a74108942e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20b0fd3d486e99180c7a871610ba7d619d75cefc2116cb54e3920ed8bf2c036a6d93789df6570dde608cc68ece8693e272da093ad5ac26dad8962804c35f2171
|
7
|
+
data.tar.gz: d69653b8075ec87ab191cf07d4bc1090fb0822b3ae05a1f24d9edfd8ac3476efa2291c46a21c8194dca4d99505fee569cf1ddaf85a4f03dce7ae1de3857cc486
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,15 @@
|
|
1
|
+
#### v1.2.0
|
2
|
+
|
3
|
+
* Enhancements
|
4
|
+
* Added colspan and rowspan functionality to table styling feature. (@ViktorKopychko)
|
5
|
+
|
6
|
+
|
1
7
|
#### v1.1.2
|
2
8
|
|
3
9
|
* Enhancements
|
4
10
|
* Added font size options for page numbers. (@cfacello)
|
5
11
|
|
12
|
+
|
6
13
|
#### v1.1.1
|
7
14
|
|
8
15
|
* Enhancements
|
data/README.md
CHANGED
@@ -639,6 +639,17 @@ docx.table [['Header 1','Header 2'],['Cell 1', 'Cell 2']], border_size: 4 do
|
|
639
639
|
end
|
640
640
|
```
|
641
641
|
|
642
|
+
It is possible to merge cells vertically and horizontally using the `rowspan` and `colspan` options in `cell_style` method e.g.
|
643
|
+
|
644
|
+
```ruby
|
645
|
+
docx.table [['11', '1213', '14'], ['21', '22', '23', '24']] do
|
646
|
+
cell_style rows[0][0], rowspan: 2
|
647
|
+
cell_style rows[0][1], colspan: 2
|
648
|
+
cell_style rows[0][2], rowspan: 2
|
649
|
+
end
|
650
|
+
```
|
651
|
+
|
652
|
+
*Note: content of cells 21 and 24 will disappear*
|
642
653
|
|
643
654
|
### Table Cells
|
644
655
|
|
@@ -25,6 +25,8 @@ module Caracal
|
|
25
25
|
attr_reader :cell_width
|
26
26
|
attr_reader :cell_margins
|
27
27
|
attr_reader :cell_vertical_align
|
28
|
+
attr_reader :cell_rowspan
|
29
|
+
attr_reader :cell_colspan
|
28
30
|
|
29
31
|
# initialization
|
30
32
|
def initialize(options={}, &block)
|
@@ -118,7 +120,7 @@ module Caracal
|
|
118
120
|
#=============== SETTERS ==============================
|
119
121
|
|
120
122
|
# integers
|
121
|
-
[:width].each do |m|
|
123
|
+
[:width, :colspan, :rowspan].each do |m|
|
122
124
|
define_method "#{ m }" do |value|
|
123
125
|
instance_variable_set("@cell_#{ m }", value.to_i)
|
124
126
|
end
|
@@ -145,7 +147,6 @@ module Caracal
|
|
145
147
|
end
|
146
148
|
end
|
147
149
|
|
148
|
-
|
149
150
|
#=============== VALIDATION ===========================
|
150
151
|
|
151
152
|
def valid?
|
@@ -159,7 +160,7 @@ module Caracal
|
|
159
160
|
private
|
160
161
|
|
161
162
|
def option_keys
|
162
|
-
[:background, :margins, :width, :vertical_align]
|
163
|
+
[:background, :margins, :width, :vertical_align, :rowspan, :colspan]
|
163
164
|
end
|
164
165
|
|
165
166
|
end
|
@@ -319,23 +319,42 @@ module Caracal
|
|
319
319
|
end
|
320
320
|
xml['w'].tblGrid do
|
321
321
|
model.rows.first.each do |tc|
|
322
|
-
|
322
|
+
(tc.cell_colspan || 1).times do
|
323
|
+
xml['w'].gridCol({ 'w:w' => tc.cell_width })
|
324
|
+
end
|
323
325
|
end
|
324
326
|
xml['w'].tblGridChange({ 'w:id' => '0' }) do
|
325
327
|
xml['w'].tblGrid do
|
326
328
|
model.rows.first.each do |tc|
|
327
|
-
|
329
|
+
(tc.cell_colspan || 1).times do
|
330
|
+
xml['w'].gridCol({ 'w:w' => tc.cell_width })
|
331
|
+
end
|
328
332
|
end
|
329
333
|
end
|
330
334
|
end
|
331
335
|
end
|
336
|
+
|
337
|
+
rowspan_hash = {}
|
332
338
|
model.rows.each do |row|
|
333
339
|
xml['w'].tr do
|
334
|
-
row.
|
340
|
+
row.each_with_index do |tc, tc_index|
|
335
341
|
xml['w'].tc do
|
336
342
|
xml['w'].tcPr do
|
337
343
|
xml['w'].shd({ 'w:fill' => tc.cell_background })
|
338
344
|
xml['w'].vAlign({ 'w:val' => tc.cell_vertical_align })
|
345
|
+
|
346
|
+
# applying rowspan
|
347
|
+
if tc.cell_rowspan && tc.cell_rowspan > 0
|
348
|
+
rowspan_hash[tc_index] = tc.cell_rowspan - 1
|
349
|
+
xml['w'].vMerge({ 'w:val' => 'restart' })
|
350
|
+
elsif rowspan_hash[tc_index] && rowspan_hash[tc_index] > 0
|
351
|
+
xml['w'].vMerge({ 'w:val' => 'continue' })
|
352
|
+
rowspan_hash[tc_index] -= 1
|
353
|
+
end
|
354
|
+
|
355
|
+
# applying colspan
|
356
|
+
xml['w'].gridSpan({ 'w:val' => tc.cell_colspan }) if tc.cell_colspan
|
357
|
+
|
339
358
|
xml['w'].tcMar do
|
340
359
|
%w(top left bottom right).each do |d|
|
341
360
|
xml['w'].method_missing "#{ d }", { 'w:w' => tc.send("cell_margin_#{ d }").to_f, 'w:type' => 'dxa' }
|
@@ -349,6 +368,22 @@ module Caracal
|
|
349
368
|
end
|
350
369
|
end
|
351
370
|
end
|
371
|
+
|
372
|
+
# we need to adjust rowspan indexes as they depend on previous row colspans
|
373
|
+
adjusted_rowspan_hash = {}
|
374
|
+
rowspan_hash.each do |rowspan_cell_index, rowspan_value|
|
375
|
+
adjusted_rowspan_cell_index = rowspan_cell_index
|
376
|
+
row.each_with_index do |tc, tc_index|
|
377
|
+
if tc.cell_colspan && tc.cell_colspan >= 1
|
378
|
+
if tc_index < rowspan_cell_index
|
379
|
+
adjusted_rowspan_cell_index += tc.cell_colspan - 1
|
380
|
+
end
|
381
|
+
end
|
382
|
+
end
|
383
|
+
adjusted_rowspan_hash[adjusted_rowspan_cell_index] = rowspan_value
|
384
|
+
end
|
385
|
+
|
386
|
+
rowspan_hash = adjusted_rowspan_hash
|
352
387
|
end
|
353
388
|
end
|
354
389
|
|
data/lib/caracal/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caracal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trade Infomatics
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-05-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -231,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
231
|
version: '0'
|
232
232
|
requirements: []
|
233
233
|
rubyforge_project:
|
234
|
-
rubygems_version: 2.6
|
234
|
+
rubygems_version: 2.7.6
|
235
235
|
signing_key:
|
236
236
|
specification_version: 4
|
237
237
|
summary: Fast, professional Microsoft Word (docx) writer for Ruby.
|