Support table cell color (#249)

* feat: Add shd writer

* feat: Support shd

* fix: clippy

* 0.0.154
main
bokuweb 2021-03-18 19:02:28 +09:00 committed by GitHub
parent 3075ffb506
commit 20361dac2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 523 additions and 18 deletions

View File

@ -53,6 +53,7 @@ mod run_property;
mod run_property_default; mod run_property_default;
mod section; mod section;
mod section_property; mod section_property;
mod shading;
mod spacing; mod spacing;
mod start; mod start;
mod style; mod style;
@ -140,6 +141,7 @@ pub use run_property::*;
pub use run_property_default::*; pub use run_property_default::*;
pub use section::*; pub use section::*;
pub use section_property::*; pub use section_property::*;
pub use shading::*;
pub use spacing::*; pub use spacing::*;
pub use start::*; pub use start::*;
pub use style::*; pub use style::*;

View File

@ -0,0 +1,53 @@
use serde::Serialize;
use crate::documents::BuildXML;
use crate::types::*;
use crate::xml_builder::*;
// INFO: Theme is not supported now.
#[derive(Serialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct Shading {
pub shd_type: ShdType,
pub color: String,
pub fill: String,
}
impl Default for Shading {
fn default() -> Self {
Shading {
shd_type: ShdType::Clear,
color: "auto".to_owned(),
fill: "FFFFFF".to_owned(),
}
}
}
impl Shading {
pub fn new() -> Shading {
Shading::default()
}
pub fn color(mut self, color: impl Into<String>) -> Shading {
self.color = color.into();
self
}
pub fn fill(mut self, fill: impl Into<String>) -> Shading {
self.fill = fill.into();
self
}
pub fn shd_type(mut self, shd_type: ShdType) -> Shading {
self.shd_type = shd_type;
self
}
}
impl BuildXML for Shading {
fn build(&self) -> Vec<u8> {
XMLBuilder::new()
.shd(&self.shd_type.to_string(), &self.color, &self.fill)
.build()
}
}

View File

@ -68,6 +68,11 @@ impl TableCell {
self self
} }
pub fn shading(mut self, s: Shading) -> TableCell {
self.property = self.property.shading(s);
self
}
pub fn vertical_align(mut self, t: VAlignType) -> TableCell { pub fn vertical_align(mut self, t: VAlignType) -> TableCell {
self.property = self.property.vertical_align(t); self.property = self.property.vertical_align(t);
self self
@ -156,7 +161,10 @@ mod tests {
#[test] #[test]
fn test_cell() { fn test_cell() {
let b = TableCell::new().build(); let b = TableCell::new().build();
assert_eq!(str::from_utf8(&b).unwrap(), r#"<w:tc><w:tcPr /><w:p w14:paraId="12345678"><w:pPr><w:rPr /></w:pPr></w:p></w:tc>"#); assert_eq!(
str::from_utf8(&b).unwrap(),
r#"<w:tc><w:tcPr /><w:p w14:paraId="12345678"><w:pPr><w:rPr /></w:pPr></w:p></w:tc>"#
);
} }
#[test] #[test]
@ -177,7 +185,7 @@ mod tests {
.grid_span(2); .grid_span(2);
assert_eq!( assert_eq!(
serde_json::to_string(&c).unwrap(), serde_json::to_string(&c).unwrap(),
r#"{"children":[{"type":"paragraph","data":{"id":"12345678","children":[{"type":"run","data":{"runProperty":{"sz":null,"szCs":null,"color":null,"highlight":null,"underline":null,"bold":null,"boldCs":null,"italic":null,"italicCs":null,"vanish":null,"spacing":null,"fonts":null},"children":[{"type":"text","data":{"preserveSpace":true,"text":"Hello"}}]}}],"property":{"runProperty":{"sz":null,"szCs":null,"color":null,"highlight":null,"underline":null,"bold":null,"boldCs":null,"italic":null,"italicCs":null,"vanish":null,"spacing":null,"fonts":null},"style":null,"numberingProperty":null,"alignment":null,"indent":null,"lineHeight":null},"hasNumbering":false}}],"property":{"width":null,"borders":null,"gridSpan":2,"verticalMerge":null,"verticalAlign":null,"textDirection":null},"hasNumbering":false}"# r#"{"children":[{"type":"paragraph","data":{"id":"12345678","children":[{"type":"run","data":{"runProperty":{"sz":null,"szCs":null,"color":null,"highlight":null,"underline":null,"bold":null,"boldCs":null,"italic":null,"italicCs":null,"vanish":null,"spacing":null,"fonts":null},"children":[{"type":"text","data":{"preserveSpace":true,"text":"Hello"}}]}}],"property":{"runProperty":{"sz":null,"szCs":null,"color":null,"highlight":null,"underline":null,"bold":null,"boldCs":null,"italic":null,"italicCs":null,"vanish":null,"spacing":null,"fonts":null},"style":null,"numberingProperty":null,"alignment":null,"indent":null,"lineHeight":null},"hasNumbering":false}}],"property":{"width":null,"borders":null,"gridSpan":2,"verticalMerge":null,"verticalAlign":null,"textDirection":null,"shading":null},"hasNumbering":false}"#
); );
} }
} }

View File

@ -14,6 +14,7 @@ pub struct TableCellProperty {
vertical_merge: Option<VMerge>, vertical_merge: Option<VMerge>,
vertical_align: Option<VAlign>, vertical_align: Option<VAlign>,
text_direction: Option<TextDirection>, text_direction: Option<TextDirection>,
shading: Option<Shading>,
} }
impl TableCellProperty { impl TableCellProperty {
@ -46,6 +47,11 @@ impl TableCellProperty {
self self
} }
pub fn shading(mut self, s: Shading) -> Self {
self.shading = Some(s);
self
}
pub fn set_borders(mut self, borders: TableCellBorders) -> Self { pub fn set_borders(mut self, borders: TableCellBorders) -> Self {
self.borders = Some(borders); self.borders = Some(borders);
self self
@ -76,6 +82,7 @@ impl Default for TableCellProperty {
vertical_merge: None, vertical_merge: None,
vertical_align: None, vertical_align: None,
text_direction: None, text_direction: None,
shading: None,
} }
} }
} }
@ -90,6 +97,7 @@ impl BuildXML for TableCellProperty {
.add_optional_child(&self.vertical_merge) .add_optional_child(&self.vertical_merge)
.add_optional_child(&self.vertical_align) .add_optional_child(&self.vertical_align)
.add_optional_child(&self.text_direction) .add_optional_child(&self.text_direction)
.add_optional_child(&self.shading)
.close() .close()
.build() .build()
} }
@ -140,6 +148,17 @@ mod tests {
); );
} }
#[test]
fn test_shd() {
let c = TableCellProperty::new()
.shading(Shading::new().shd_type(ShdType::Clear).fill("FF0000"));
let b = c.build();
assert_eq!(
str::from_utf8(&b).unwrap(),
r#"<w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="FF0000" /></w:tcPr>"#
);
}
#[test] #[test]
fn test_table_cell_prop_json() { fn test_table_cell_prop_json() {
let c = TableCellProperty::new() let c = TableCellProperty::new()
@ -148,7 +167,7 @@ mod tests {
.width(200, WidthType::DXA); .width(200, WidthType::DXA);
assert_eq!( assert_eq!(
serde_json::to_string(&c).unwrap(), serde_json::to_string(&c).unwrap(),
r#"{"width":{"width":200,"widthType":"DXA"},"borders":null,"gridSpan":3,"verticalMerge":"continue","verticalAlign":null,"textDirection":null}"# r#"{"width":{"width":200,"widthType":"DXA"},"borders":null,"gridSpan":3,"verticalMerge":"continue","verticalAlign":null,"textDirection":null,"shading":null}"#
); );
} }
@ -157,7 +176,7 @@ mod tests {
let c = TableCellProperty::new().vertical_align(VAlignType::Center); let c = TableCellProperty::new().vertical_align(VAlignType::Center);
assert_eq!( assert_eq!(
serde_json::to_string(&c).unwrap(), serde_json::to_string(&c).unwrap(),
r#"{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":"center","textDirection":null}"# r#"{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":"center","textDirection":null,"shading":null}"#
); );
} }
} }

View File

@ -76,7 +76,7 @@ mod tests {
let r = TableRow::new(vec![TableCell::new()]); let r = TableRow::new(vec![TableCell::new()]);
assert_eq!( assert_eq!(
serde_json::to_string(&r).unwrap(), serde_json::to_string(&r).unwrap(),
r#"{"cells":[{"children":[],"property":{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":null,"textDirection":null},"hasNumbering":false}],"hasNumbering":false,"property":{"gridAfter":null,"widthAfter":null,"rowHeight":null,"heightRule":null}}"# r#"{"cells":[{"children":[],"property":{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":null,"textDirection":null,"shading":null},"hasNumbering":false}],"hasNumbering":false,"property":{"gridAfter":null,"widthAfter":null,"rowHeight":null,"heightRule":null}}"#
); );
} }
} }

View File

@ -28,6 +28,7 @@ mod run;
mod run_property; mod run_property;
mod section_property; mod section_property;
mod settings; mod settings;
mod shading;
mod style; mod style;
mod styles; mod styles;
mod table; mod table;

View File

@ -0,0 +1,30 @@
use std::io::Read;
use std::str::FromStr;
use crate::types::*;
use xml::attribute::OwnedAttribute;
use xml::reader::EventReader;
use super::*;
impl ElementReader for Shading {
fn read<R: Read>(
_r: &mut EventReader<R>,
attrs: &[OwnedAttribute],
) -> Result<Self, ReaderError> {
let mut shd = Shading::new();
for a in attrs {
let local_name = &a.name.local_name;
if local_name == "val" {
if let Ok(val) = ShdType::from_str(&a.value) {
shd = shd.shd_type(val);
}
} else if local_name == "color" {
shd = shd.color(&a.value);
} else if local_name == "fill" {
shd = shd.fill(&a.value);
}
}
Ok(shd)
}
}

View File

@ -75,6 +75,11 @@ impl ElementReader for TableCell {
)?); )?);
} }
} }
XMLElement::Shading => {
if let Ok(shd) = Shading::read(r, &attributes) {
cell = cell.shading(shd);
}
}
XMLElement::TextDirection => { XMLElement::TextDirection => {
if let Some(a) = &attributes.get(0) { if let Some(a) = &attributes.get(0) {
if let Ok(v) = TextDirectionType::from_str(&a.value) if let Ok(v) = TextDirectionType::from_str(&a.value)
@ -139,7 +144,6 @@ mod tests {
<w:insideH w:val="single" w:sz="5" w:space="0" w:color="FF0000"/> <w:insideH w:val="single" w:sz="5" w:space="0" w:color="FF0000"/>
<w:insideV w:val="single" w:sz="2" w:space="0" w:color="000000"/> <w:insideV w:val="single" w:sz="2" w:space="0" w:color="000000"/>
</w:tcBorders> </w:tcBorders>
<w:shd w:fill="auto" w:val="clear"/>
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:r> <w:r>
@ -179,7 +183,6 @@ mod tests {
<w:tcPr> <w:tcPr>
<w:tcW w:w="6425" w:type="dxa"/> <w:tcW w:w="6425" w:type="dxa"/>
<w:vMerge /> <w:vMerge />
<w:shd w:fill="auto" w:val="clear"/>
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:r> <w:r>
@ -206,7 +209,6 @@ mod tests {
<w:tcPr> <w:tcPr>
<w:tcW w:w="6425" w:type="dxa"/> <w:tcW w:w="6425" w:type="dxa"/>
<w:vAlign w:val="bottom"/> <w:vAlign w:val="bottom"/>
<w:shd w:fill="auto" w:val="clear"/>
</w:tcPr> </w:tcPr>
<w:p> <w:p>
<w:r> <w:r>

View File

@ -50,6 +50,7 @@ pub enum XMLElement {
CommentExtended, CommentExtended,
CommentsExtended, CommentsExtended,
VAlign, VAlign,
Shading,
TextDirection, TextDirection,
Table, Table,
TableProperty, TableProperty,
@ -216,6 +217,7 @@ impl FromStr for XMLElement {
"commentRangeEnd" => Ok(XMLElement::CommentRangeEnd), "commentRangeEnd" => Ok(XMLElement::CommentRangeEnd),
"commentEx" => Ok(XMLElement::CommentExtended), "commentEx" => Ok(XMLElement::CommentExtended),
"commentsEx" => Ok(XMLElement::CommentsExtended), "commentsEx" => Ok(XMLElement::CommentsExtended),
"shd" => Ok(XMLElement::Shading),
"tbl" => Ok(XMLElement::Table), "tbl" => Ok(XMLElement::Table),
"tblPr" => Ok(XMLElement::TableProperty), "tblPr" => Ok(XMLElement::TableProperty),
"tr" => Ok(XMLElement::TableRow), "tr" => Ok(XMLElement::TableRow),

View File

@ -9,6 +9,7 @@ pub mod height_rule;
pub mod level_suffix_type; pub mod level_suffix_type;
pub mod page_margin; pub mod page_margin;
pub mod section_type; pub mod section_type;
pub mod shd_type;
pub mod spacing; pub mod spacing;
pub mod special_indent_type; pub mod special_indent_type;
pub mod style_type; pub mod style_type;
@ -29,6 +30,7 @@ pub use height_rule::*;
pub use level_suffix_type::*; pub use level_suffix_type::*;
pub use page_margin::*; pub use page_margin::*;
pub use section_type::*; pub use section_type::*;
pub use shd_type::*;
pub use spacing::*; pub use spacing::*;
pub use special_indent_type::*; pub use special_indent_type::*;
pub use style_type::*; pub use style_type::*;

View File

@ -0,0 +1,182 @@
use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
use wasm_bindgen::prelude::*;
use super::errors;
/*
<xsd:enumeration value="nil"/>
<xsd:enumeration value="clear"/>
<xsd:enumeration value="solid"/>
<xsd:enumeration value="horzStripe"/>
<xsd:enumeration value="vertStripe"/>
<xsd:enumeration value="reverseDiagStripe"/>
<xsd:enumeration value="diagStripe"/>
<xsd:enumeration value="horzCross"/>
<xsd:enumeration value="diagCross"/>
<xsd:enumeration value="thinHorzStripe"/>
<xsd:enumeration value="thinVertStripe"/>
<xsd:enumeration value="thinReverseDiagStripe"/>
<xsd:enumeration value="thinDiagStripe"/>
<xsd:enumeration value="thinHorzCross"/>
<xsd:enumeration value="thinDiagCross"/>
<xsd:enumeration value="pct5"/>
<xsd:enumeration value="pct10"/>
<xsd:enumeration value="pct12"/>
<xsd:enumeration value="pct15"/>
<xsd:enumeration value="pct20"/>
<xsd:enumeration value="pct25"/>
<xsd:enumeration value="pct30"/>
<xsd:enumeration value="pct35"/>
<xsd:enumeration value="pct37"/>
<xsd:enumeration value="pct40"/>
<xsd:enumeration value="pct45"/>
<xsd:enumeration value="pct50"/>
<xsd:enumeration value="pct55"/>
<xsd:enumeration value="pct60"/>
<xsd:enumeration value="pct62"/>
<xsd:enumeration value="pct65"/>
<xsd:enumeration value="pct70"/>
<xsd:enumeration value="pct75"/>
<xsd:enumeration value="pct80"/>
<xsd:enumeration value="pct85"/>
<xsd:enumeration value="pct87"/>
<xsd:enumeration value="pct90"/>
<xsd:enumeration value="pct95"/>
*/
#[wasm_bindgen]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
pub enum ShdType {
Nil,
Clear,
Solid,
HorzStripe,
VertStripe,
ReverseDiagStripe,
DiagStripe,
HorzCross,
DiagCross,
ThinHorzStripe,
ThinVertStripe,
ThinReverseDiagStripe,
ThinDiagStripe,
ThinHorzCross,
ThinDiagCross,
Pct5,
Pct10,
Pct12,
Pct15,
Pct20,
Pct25,
Pct30,
Pct35,
Pct37,
Pct40,
Pct45,
Pct50,
Pct55,
Pct60,
Pct62,
Pct65,
Pct70,
Pct75,
Pct80,
Pct85,
Pct87,
Pct90,
Pct95,
}
impl fmt::Display for ShdType {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
ShdType::Nil => write!(f, "nil"),
ShdType::Clear => write!(f, "clear"),
ShdType::Solid => write!(f, "solid"),
ShdType::HorzStripe => write!(f, "horzStripe"),
ShdType::VertStripe => write!(f, "vertStripe"),
ShdType::ReverseDiagStripe => write!(f, "reverseDiagStripe"),
ShdType::DiagStripe => write!(f, "diagStripe"),
ShdType::HorzCross => write!(f, "horzCross"),
ShdType::DiagCross => write!(f, "diagCross"),
ShdType::ThinHorzStripe => write!(f, "thinHorzStripe"),
ShdType::ThinVertStripe => write!(f, "thinVertStripe"),
ShdType::ThinReverseDiagStripe => write!(f, "thinReverseDiagStripe"),
ShdType::ThinDiagStripe => write!(f, "thinDiagStripe"),
ShdType::ThinHorzCross => write!(f, "thinHorzCross"),
ShdType::ThinDiagCross => write!(f, "thinDiagCross"),
ShdType::Pct5 => write!(f, "pct5"),
ShdType::Pct10 => write!(f, "pct10"),
ShdType::Pct12 => write!(f, "pct12"),
ShdType::Pct15 => write!(f, "pct15"),
ShdType::Pct20 => write!(f, "pct20"),
ShdType::Pct25 => write!(f, "pct25"),
ShdType::Pct30 => write!(f, "pct30"),
ShdType::Pct35 => write!(f, "pct35"),
ShdType::Pct37 => write!(f, "pct37"),
ShdType::Pct40 => write!(f, "pct40"),
ShdType::Pct45 => write!(f, "pct45"),
ShdType::Pct50 => write!(f, "pct50"),
ShdType::Pct55 => write!(f, "pct55"),
ShdType::Pct60 => write!(f, "pct60"),
ShdType::Pct62 => write!(f, "pct62"),
ShdType::Pct65 => write!(f, "pct65"),
ShdType::Pct70 => write!(f, "pct70"),
ShdType::Pct75 => write!(f, "pct75"),
ShdType::Pct80 => write!(f, "pct80"),
ShdType::Pct85 => write!(f, "pct85"),
ShdType::Pct87 => write!(f, "pct87"),
ShdType::Pct90 => write!(f, "pct90"),
ShdType::Pct95 => write!(f, "pct95"),
}
}
}
impl FromStr for ShdType {
type Err = errors::TypeError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"nil" => Ok(ShdType::Nil),
"clear" => Ok(ShdType::Clear),
"solid" => Ok(ShdType::Solid),
"horzStripe" => Ok(ShdType::HorzStripe),
"vertStripe" => Ok(ShdType::VertStripe),
"reverseDiagStripe" => Ok(ShdType::ReverseDiagStripe),
"diagStripe" => Ok(ShdType::DiagStripe),
"horzCross" => Ok(ShdType::HorzCross),
"diagCross" => Ok(ShdType::DiagCross),
"thinHorzStripe" => Ok(ShdType::ThinHorzStripe),
"thinVertStripe" => Ok(ShdType::ThinVertStripe),
"thinReverseDiagStripe" => Ok(ShdType::ThinReverseDiagStripe),
"thinDiagStripe" => Ok(ShdType::ThinDiagStripe),
"thinHorzCross" => Ok(ShdType::ThinHorzCross),
"thinDiagCross" => Ok(ShdType::ThinDiagCross),
"pct5" => Ok(ShdType::Pct5),
"pct10" => Ok(ShdType::Pct10),
"pct12" => Ok(ShdType::Pct12),
"pct15" => Ok(ShdType::Pct15),
"pct20" => Ok(ShdType::Pct20),
"pct25" => Ok(ShdType::Pct25),
"pct30" => Ok(ShdType::Pct30),
"pct35" => Ok(ShdType::Pct35),
"pct37" => Ok(ShdType::Pct37),
"pct40" => Ok(ShdType::Pct40),
"pct45" => Ok(ShdType::Pct45),
"pct50" => Ok(ShdType::Pct50),
"pct55" => Ok(ShdType::Pct55),
"pct60" => Ok(ShdType::Pct60),
"pct62" => Ok(ShdType::Pct62),
"pct65" => Ok(ShdType::Pct65),
"pct70" => Ok(ShdType::Pct70),
"pct75" => Ok(ShdType::Pct75),
"pct80" => Ok(ShdType::Pct80),
"pct85" => Ok(ShdType::Pct85),
"pct87" => Ok(ShdType::Pct87),
"pct90" => Ok(ShdType::Pct90),
"pct95" => Ok(ShdType::Pct95),
_ => Err(errors::TypeError::Unknown),
}
}
}

View File

@ -210,7 +210,7 @@ impl XMLBuilder {
closed_border_el!(border_tl2br, "w:tl2br"); closed_border_el!(border_tl2br, "w:tl2br");
closed_border_el!(border_tr2bl, "w:tr2bl"); closed_border_el!(border_tr2bl, "w:tr2bl");
closed!(shd, "w:shd", "w:fill", "w:val"); closed!(shd, "w:shd", "w:val", "w:color", "w:fill");
closed!(tab, "w:tab"); closed!(tab, "w:tab");
closed!(tab_with_pos, "w:tab", "w:val", "w:pos"); closed!(tab_with_pos, "w:tab", "w:val", "w:pos");

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -486,6 +486,10 @@ export class Docx {
cell = this.buildCellBorders(c, cell); cell = this.buildCellBorders(c, cell);
} }
if (typeof c.property.shading !== "undefined") {
cell = cell.shading(c.property.shading._color, c.property.shading._fill);
}
return cell; return cell;
} }

View File

@ -0,0 +1,5 @@
export type ShadingJSON = {
shd_type: string | null;
color: string;
fill: string;
};

View File

@ -2,6 +2,7 @@ import { ParagraphJSON } from "./paragraph";
import { BorderJSON } from "./border"; import { BorderJSON } from "./border";
import { HeightRule } from "../table-row"; import { HeightRule } from "../table-row";
import { TextDirectionType } from "../table-cell"; import { TextDirectionType } from "../table-cell";
import { ShadingJSON } from "./shading";
export type TableCellChildJSON = ParagraphJSON; export type TableCellChildJSON = ParagraphJSON;
@ -21,6 +22,7 @@ export type TableCellPropertyJSON = {
verticalAlign: "top" | "center" | "bottom" | null; verticalAlign: "top" | "center" | "bottom" | null;
textDirection: TextDirectionType | null; textDirection: TextDirectionType | null;
hasNumbering: boolean; hasNumbering: boolean;
shading: ShadingJSON | null;
}; };
export type TableRowPropertyJSON = { export type TableRowPropertyJSON = {

View File

@ -0,0 +1,13 @@
export class Shading {
_type: string = "clear";
_color: string = "auto";
_fill: string = "FFFFFF";
color(c: string) {
this._color = c;
}
fill(c: string) {
this._fill = c;
}
}

View File

@ -1,5 +1,6 @@
import { Paragraph } from "./paragraph"; import { Paragraph } from "./paragraph";
import { Table } from "./table"; import { Table } from "./table";
import { Shading } from "./shading";
import { TableCellBorders, PositionKeys } from "./table-cell-borders"; import { TableCellBorders, PositionKeys } from "./table-cell-borders";
import { TableCellBorderPosition, TableCellBorder } from "./table-cell-border"; import { TableCellBorderPosition, TableCellBorder } from "./table-cell-border";
import * as wasm from "./pkg"; import * as wasm from "./pkg";
@ -56,6 +57,7 @@ export type CellProperty = {
gridSpan?: number; gridSpan?: number;
width?: number; width?: number;
textDirection?: TextDirectionType; textDirection?: TextDirectionType;
shading?: Shading;
}; };
export class TableCell { export class TableCell {
@ -101,6 +103,14 @@ export class TableCell {
return this; return this;
} }
shading(color: string, fill: string) {
const s = new Shading();
s.color(color);
s.fill(fill);
this.property.shading = s;
return this;
}
textDirection(t: TextDirectionType) { textDirection(t: TextDirectionType) {
this.property.textDirection = t; this.property.textDirection = t;
return this; return this;

View File

@ -1,6 +1,6 @@
{ {
"name": "docx-wasm", "name": "docx-wasm",
"version": "0.0.153", "version": "0.0.154",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"browser": "dist/web/index.js", "browser": "dist/web/index.js",
"author": "bokuweb <bokuweb12@gmail.com>", "author": "bokuweb <bokuweb12@gmail.com>",

View File

@ -1,4 +1,5 @@
use super::*; use super::*;
use docx_rs::Shading;
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
#[wasm_bindgen] #[wasm_bindgen]
@ -52,6 +53,13 @@ impl TableCell {
self self
} }
pub fn shading(mut self, color: &str, fill: &str) -> TableCell {
// INFO: Now shd_type is fixed to `clear` from js
let s = Shading::new().color(color).fill(fill);
self.0.property = self.0.property.shading(s);
self
}
pub fn text_direction(mut self, t: docx_rs::TextDirectionType) -> TableCell { pub fn text_direction(mut self, t: docx_rs::TextDirectionType) -> TableCell {
self.0.property = self.0.property.text_direction(t); self.0.property = self.0.property.text_direction(t);
self self

View File

@ -1003,6 +1003,7 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": 5, "gridSpan": 5,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -1092,6 +1093,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": 3, "gridSpan": 3,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": "center", "verticalAlign": "center",
"verticalMerge": "restart", "verticalMerge": "restart",
@ -1170,6 +1176,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": "center", "verticalAlign": "center",
"verticalMerge": "restart", "verticalMerge": "restart",
@ -1259,6 +1270,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": 3, "gridSpan": 3,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": "center", "verticalAlign": "center",
"verticalMerge": "continue", "verticalMerge": "continue",
@ -1337,6 +1353,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": "center", "verticalAlign": "center",
"verticalMerge": "continue", "verticalMerge": "continue",
@ -1426,6 +1447,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": 2, "gridSpan": 2,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -1504,6 +1530,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -1593,6 +1624,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -1671,6 +1707,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": 2, "gridSpan": 2,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -1760,6 +1801,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -1838,6 +1884,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -1916,6 +1967,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2005,6 +2061,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2083,6 +2144,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2161,6 +2227,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2244,6 +2315,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2316,6 +2392,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2394,6 +2475,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2483,6 +2569,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2561,6 +2652,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -2639,6 +2735,11 @@ Object {
"tr2bl": null, "tr2bl": null,
}, },
"gridSpan": null, "gridSpan": null,
"shading": Object {
"color": "auto",
"fill": "auto",
"shdType": "Clear",
},
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9223,6 +9324,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9268,6 +9370,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9313,6 +9416,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9358,6 +9462,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9414,6 +9519,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9459,6 +9565,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9504,6 +9611,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9549,6 +9657,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9605,6 +9714,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9650,6 +9760,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9695,6 +9806,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -9740,6 +9852,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"shading": null,
"textDirection": null, "textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
@ -10362,6 +10475,38 @@ Object {
} }
`; `;
exports[`writer should write cell shading 1`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\"?>
<Relationships xmlns=\\"http://schemas.openxmlformats.org/package/2006/relationships\\">
<Relationship Id=\\"rId1\\" Type=\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\\" Target=\\"styles.xml\\" />
<Relationship Id=\\"rId2\\" Type=\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable\\" Target=\\"fontTable.xml\\" />
<Relationship Id=\\"rId3\\" Type=\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings\\" Target=\\"settings.xml\\" />
<Relationship Id=\\"rId4\\" Type=\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header\\" Target=\\"header1.xml\\" />
<Relationship Id=\\"rId5\\" Type=\\"http://schemas.microsoft.com/office/2011/relationships/commentsExtended\\" Target=\\"commentsExtended.xml\\" />
</Relationships>"
`;
exports[`writer should write cell shading 2`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" standalone=\\"yes\\"?>
<w:document xmlns:o=\\"urn:schemas-microsoft-com:office:office\\" xmlns:r=\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\\" xmlns:v=\\"urn:schemas-microsoft-com:vml\\" xmlns:w=\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\" xmlns:w10=\\"urn:schemas-microsoft-com:office:word\\" xmlns:wp=\\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\\" xmlns:wps=\\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\\" xmlns:wpg=\\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\\" xmlns:mc=\\"http://schemas.openxmlformats.org/markup-compatibility/2006\\" xmlns:wp14=\\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\\" xmlns:w14=\\"http://schemas.microsoft.com/office/word/2010/wordml\\" xmlns:w15=\\"http://schemas.microsoft.com/office/word/2012/wordml\\" mc:Ignorable=\\"w14 wp14\\">
<w:body><w:tbl><w:tblPr><w:tblW w:w=\\"0\\" w:type=\\"dxa\\" /><w:jc w:val=\\"left\\" /><w:tblBorders><w:top w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:left w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:bottom w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:right w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:insideH w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:insideV w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /></w:tblBorders><w:tblCellMar>
<w:top w:w=\\"55\\" w:type=\\"dxa\\" />
<w:left w:w=\\"54\\" w:type=\\"dxa\\" />
<w:bottom w:w=\\"55\\" w:type=\\"dxa\\" />
<w:right w:w=\\"55\\" w:type=\\"dxa\\" />
</w:tblCellMar><w:tblInd w:w=\\"0\\" w:type=\\"dxa\\" /></w:tblPr><w:tblGrid /><w:tr><w:trPr /><w:tc><w:tcPr><w:tcBorders><w:top w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:left w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:bottom w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:right w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:insideH w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /><w:insideV w:val=\\"single\\" w:sz=\\"2\\" w:space=\\"0\\" w:color=\\"000000\\" /></w:tcBorders><w:shd w:val=\\"clear\\" w:color=\\"auto\\" w:fill=\\"FF0000\\" /></w:tcPr><w:p w14:paraId=\\"00000001\\"><w:pPr><w:rPr /></w:pPr><w:r><w:rPr><w:rFonts /></w:rPr><w:t xml:space=\\"preserve\\">Hello!!</w:t></w:r></w:p></w:tc></w:tr></w:tbl><w:sectPr><w:pgSz w:w=\\"11906\\" w:h=\\"16838\\" /><w:pgMar w:top=\\"1985\\" w:right=\\"1701\\" w:bottom=\\"1701\\" w:left=\\"1701\\" w:header=\\"851\\" w:footer=\\"992\\" w:gutter=\\"0\\" /><w:headerReference w:type=\\"default\\" r:id=\\"rId4\\" /><w:cols w:space=\\"425\\" />
<w:docGrid w:type=\\"lines\\" w:linePitch=\\"360\\" />
</w:sectPr></w:body>
</w:document>"
`;
exports[`writer should write cell shading 3`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" standalone=\\"yes\\"?>
<w:numbering xmlns:r=\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\\" xmlns:o=\\"urn:schemas-microsoft-com:office:office\\" xmlns:v=\\"urn:schemas-microsoft-com:vml\\" xmlns:w=\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\"><w:abstractNum w:abstractNumId=\\"1\\"><w:lvl w:ilvl=\\"0\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimal\\" /><w:lvlText w:val=\\"%1.\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"420\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl><w:lvl w:ilvl=\\"1\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimal\\" /><w:lvlText w:val=\\"(%2)\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"840\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl><w:lvl w:ilvl=\\"2\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimalEnclosedCircle\\" /><w:lvlText w:val=\\"%3\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"1260\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl><w:lvl w:ilvl=\\"3\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimal\\" /><w:lvlText w:val=\\"%4.\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"1680\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl><w:lvl w:ilvl=\\"4\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimal\\" /><w:lvlText w:val=\\"(%5)\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"2100\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl><w:lvl w:ilvl=\\"5\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimalEnclosedCircle\\" /><w:lvlText w:val=\\"%6\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"2520\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl><w:lvl w:ilvl=\\"6\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimal\\" /><w:lvlText w:val=\\"%7.\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"2940\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl><w:lvl w:ilvl=\\"7\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimal\\" /><w:lvlText w:val=\\"(%8)\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"3360\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl><w:lvl w:ilvl=\\"8\\"><w:start w:val=\\"1\\" /><w:numFmt w:val=\\"decimalEnclosedCircle\\" /><w:lvlText w:val=\\"%9\\" /><w:lvlJc w:val=\\"left\\" /><w:pPr><w:rPr /><w:ind w:left=\\"3780\\" w:right=\\"0\\" w:hanging=\\"420\\" /></w:pPr><w:rPr /></w:lvl></w:abstractNum><w:num w:numId=\\"1\\">
<w:abstractNumId w:val=\\"1\\" />
</w:num></w:numbering>"
`;
exports[`writer should write default font 1`] = ` exports[`writer should write default font 1`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\"?> "<?xml version=\\"1.0\\" encoding=\\"UTF-8\\"?>
<Relationships xmlns=\\"http://schemas.openxmlformats.org/package/2006/relationships\\"> <Relationships xmlns=\\"http://schemas.openxmlformats.org/package/2006/relationships\\">

View File

@ -134,6 +134,23 @@ describe("writer", () => {
writeFileSync("../output/cell_borders.docx", buffer); writeFileSync("../output/cell_borders.docx", buffer);
}); });
test("should write cell shading", () => {
const p = new w.Paragraph().addRun(new w.Run().addText("Hello!!"));
const table = new w.Table().addRow(
new w.TableRow().addCell(
new w.TableCell().addParagraph(p).shading("auto", "FF0000")
)
);
const buffer = new w.Docx().addTable(table).build();
const z = new Zip(Buffer.from(buffer));
for (const e of z.getEntries()) {
if (e.entryName.match(/document.xml|numbering.xml/)) {
expect(z.readAsText(e)).toMatchSnapshot();
}
}
writeFileSync("../output/cell_shading.docx", buffer);
});
test("should write page margin", () => { test("should write page margin", () => {
const p = new w.Paragraph().addRun(new w.Run().addText("Hello world!!")); const p = new w.Paragraph().addRun(new w.Run().addText("Hello world!!"));
const buffer = new w.Docx() const buffer = new w.Docx()