caracal 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.
|