Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

html-to-pdfmake

Package Overview
Dependencies
Maintainers
1
Versions
110
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

html-to-pdfmake - npm Package Compare versions

Comparing version 2.1.7 to 2.2.0

2

browser.js

@@ -1,1 +0,1 @@

(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.htmlToPdfmake=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){module.exports=function(htmlText,options){var wndw=options&&options.window?options.window:window;var tableAutoSize=options&&typeof options.tableAutoSize==="boolean"?options.tableAutoSize:false;var fontSizes=options&&Array.isArray(options.fontSizes)?options.fontSizes:[10,14,16,18,20,24,28];var defaultStyles={b:{bold:true},strong:{bold:true},u:{decoration:"underline"},del:{decoration:"lineThrough"},s:{decoration:"lineThrough"},em:{italics:true},i:{italics:true},h1:{fontSize:24,bold:true,marginBottom:5},h2:{fontSize:22,bold:true,marginBottom:5},h3:{fontSize:20,bold:true,marginBottom:5},h4:{fontSize:18,bold:true,marginBottom:5},h5:{fontSize:16,bold:true,marginBottom:5},h6:{fontSize:14,bold:true,marginBottom:5},a:{color:"blue",decoration:"underline"},strike:{decoration:"lineThrough"},p:{margin:[0,5,0,10]},ul:{marginBottom:5,marginLeft:5},table:{marginBottom:5},th:{bold:true,fillColor:"#EEEEEE"}};function changeDefaultStyles(){for(var keyStyle in options.defaultStyles){if(defaultStyles.hasOwnProperty(keyStyle)){if(options.defaultStyles.hasOwnProperty(keyStyle)&&!options.defaultStyles[keyStyle]){delete defaultStyles[keyStyle]}else{for(var k in options.defaultStyles[keyStyle]){if(options.defaultStyles[keyStyle][k]==="")delete defaultStyles[keyStyle][k];else defaultStyles[keyStyle][k]=options.defaultStyles[keyStyle][k]}}}else{defaultStyles[keyStyle]={};for(var ks in options.defaultStyles[keyStyle]){defaultStyles[keyStyle][ks]=options.defaultStyles[keyStyle][ks]}}}}if(options&&options.defaultStyles){changeDefaultStyles()}var convertHtml=function(htmlText){var parser=new wndw.DOMParser;var parsedHtml=parser.parseFromString(htmlText,"text/html");var docDef=parseElement(parsedHtml.body,[]);return docDef.stack||docDef.text};var parseElement=function(element,parents){var nodeName=element.nodeName.toUpperCase();var nodeNameLowerCase=nodeName.toLowerCase();var ret={text:[]};var text,needStack=false;var dataset,i,key;if(["COLGROUP","COL"].indexOf(nodeName)>-1)return"";switch(element.nodeType){case 3:{if(element.textContent){text=element.textContent;var styleParentTextNode=parseStyle(parents[parents.length-1],true);var hasWhiteSpace=false;for(i=0;i<styleParentTextNode.length;i++){if(styleParentTextNode[i].key==="preserveLeadingSpaces"){hasWhiteSpace=styleParentTextNode[i].value;break}}if(!hasWhiteSpace)text=element.textContent.replace(/\n(\s+)?/g,"");if(options&&typeof options.replaceText==="function")text=options.replaceText(text,parents);if(["TABLE","THEAD","TBODY","TFOOT","TR","UL","OL"].indexOf(parents[parents.length-1].nodeName)>-1)text=text.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");if(text){ret={text:text};ret=applyStyle({ret:ret,parents:parents});return ret}}return""}case 1:{ret.nodeName=nodeName;parents.push(element);if(element.childNodes&&element.childNodes.length>0){[].forEach.call(element.childNodes,function(child){var res=parseElement(child,parents);if(res){if(Array.isArray(res.text)&&res.text.length===0)res.text="";ret.text.push(res)}});needStack=searchForStack(ret);if(needStack){ret.stack=ret.text.slice(0);delete ret.text}else{ret=applyStyle({ret:ret,parents:parents})}}parents.pop();switch(nodeName){case"TABLE":{var rowIndex,cellIndex;ret.table={body:[]};var tbodies=ret.stack||ret.text;if(Array.isArray(tbodies)){rowIndex=0;var allRows=[];tbodies.forEach(function(tbody){var rows=tbody.stack||tbody.text;if(Array.isArray(rows)){allRows=allRows.concat(rows);rows.forEach(function(row){var cells=row.stack||row.text;if(Array.isArray(cells)){cellIndex=0;ret.table.body[rowIndex]=[];cells.forEach(function(cell){ret.table.body[rowIndex].push(cell);if(cell.colSpan){i=cell.colSpan;setRowSpan({rows:allRows,cell:cell,rowIndex:rowIndex,cellIndex:cellIndex});while(--i>0){ret.table.body[rowIndex].push({text:""});setRowSpan({rows:allRows,cell:cell,rowIndex:rowIndex,cellIndex:cellIndex});cellIndex++}}else{setRowSpan({rows:allRows,cell:cell,rowIndex:rowIndex,cellIndex:cellIndex})}cellIndex++});rowIndex++}})}})}delete ret.stack;delete ret.text;ret=applyStyle({ret:ret,parents:parents.concat([element])});if(tableAutoSize){var cellsWidths=[];var cellsHeights=[];var tableWidths=[];var tableHeights=[];ret.table.body.forEach(function(row,rowIndex){cellsWidths.push([]);cellsHeights.push([]);row.forEach(function(cell){var width=typeof cell.width!=="undefined"?cell.width:"auto";var height=typeof cell.height!=="undefined"?cell.height:"auto";if(width!=="auto"&&cell.colSpan){if(!isNaN(width))width/=cell.colSpan;else width="auto"}if(height!=="auto"&&cell.rowSpan){if(!isNaN(height))height/=cell.colSpan;else height="auto"}cellsWidths[rowIndex].push(width);cellsHeights[rowIndex].push(height)})});cellsWidths.forEach(function(row){row.forEach(function(cellWidth,cellIndex){var type=typeof tableWidths[cellIndex];if(type==="undefined"||cellWidth!=="auto"&&type==="number"&&cellWidth>tableWidths[cellIndex]||cellWidth!=="auto"&&tableWidths[cellIndex]==="auto"){tableWidths[cellIndex]=cellWidth}})});cellsHeights.forEach(function(row,rowIndex){row.forEach(function(cellHeight){var type=typeof tableHeights[rowIndex];if(type==="undefined"||cellHeight!=="auto"&&type==="number"&&cellHeight>tableHeights[rowIndex]||cellHeight!=="auto"&&tableHeights[rowIndex]==="auto"){tableHeights[rowIndex]=cellHeight}})});if(tableWidths.length>0)ret.table.widths=tableWidths;if(tableHeights.length>0)ret.table.heights=tableHeights}if(element.dataset&&element.dataset.pdfmake){dataset=JSON.parse(element.dataset.pdfmake);for(key in dataset){if(key==="layout"){ret.layout=dataset[key]}else{ret.table[key]=dataset[key]}}}break}case"TH":case"TD":{if(element.getAttribute("rowspan"))ret.rowSpan=element.getAttribute("rowspan")*1;if(element.getAttribute("colspan"))ret.colSpan=element.getAttribute("colspan")*1;ret=applyStyle({ret:ret,parents:parents.concat([element])});break}case"SVG":{ret={svg:element.outerHTML.replace(/\n(\s+)?/g,""),nodeName:"SVG",style:["html-svg"]};break}case"BR":{ret.text=[{text:"\n"}];break}case"SUB":case"SUP":{ret[nodeName.toLowerCase()]={offset:"30%",fontSize:8};break}case"HR":{var styleHR={width:514,type:"line",margin:[0,12,0,12],thickness:.5,color:"#000000",left:0};if(element.dataset&&element.dataset.pdfmake){dataset=JSON.parse(element.dataset.pdfmake);for(key in dataset){styleHR[key]=dataset[key]}}ret.margin=styleHR.margin;ret.canvas=[{type:styleHR.type,x1:styleHR.left,y1:0,x2:styleHR.width,y2:0,lineWidth:styleHR.thickness,lineColor:styleHR.color}];delete ret.text;break}case"OL":case"UL":{ret[nodeNameLowerCase]=(ret.stack||ret.text).slice(0);delete ret.stack;delete ret.text;ret=applyStyle({ret:ret,parents:parents.concat([element])});if(ret.listStyle||ret.listStyleType)ret.type=ret.listStyle||ret.listStyleType;break}case"IMG":{ret.image=element.getAttribute("src");delete ret.stack;delete ret.text;ret=applyStyle({ret:ret,parents:parents.concat([element])});break}case"A":{ret.link=element.getAttribute("href");break}case"FONT":{if(element.getAttribute("color")){ret.color=parseColor(element.getAttribute("color"))}if(element.getAttribute("size")){var size=Math.min(Math.max(1,parseInt(element.getAttribute("size"))),7);var fontSize=Math.max(fontSizes[0],fontSizes[size-1]);ret.fontSize=fontSize}ret=applyStyle({ret:ret,parents:parents.concat([element])});break}}if(Array.isArray(ret.text)&&ret.text.length===1&&ret.text[0].text&&!ret.text[0].nodeName){ret.text=ret.text[0].text}if(["HR","TABLE"].indexOf(nodeName)===-1&&element.dataset&&element.dataset.pdfmake){dataset=JSON.parse(element.dataset.pdfmake);for(key in dataset){ret[key]=dataset[key]}}return ret}}};var searchForStack=function(ret){if(Array.isArray(ret.text)){for(var i=0;i<ret.text.length;i++){if(ret.text[i].stack||["P","DIV","TABLE","SVG","UL","OL","IMG","H1","H2","H3","H4","H5","H6"].indexOf(ret.text[i].nodeName)>-1)return true;if(searchForStack(ret.text[i])===true)return true}}return false};var setRowSpan=function(params){var cells;if(params.cell.rowSpan){for(var i=1;i<=params.cell.rowSpan-1;i++){cells=params.rows[params.rowIndex+i].text||params.rows[params.rowIndex+i].stack;cells.splice(params.cellIndex,0,{text:""})}}};var applyStyle=function(params){var cssClass=[];var lastIndex=params.parents.length-1;params.parents.forEach(function(parent,parentIndex){var parentNodeName=parent.nodeName.toLowerCase();var htmlClass="html-"+parentNodeName;if(htmlClass!=="html-body"&&cssClass.indexOf(htmlClass)===-1)cssClass.unshift(htmlClass);var parentClass=(parent.getAttribute("class")||"").split(" ");parentClass.forEach(function(p){if(p)cssClass.push(p)});var style;var ignoreNonDescendentProperties=parentIndex!==lastIndex;if(defaultStyles[parentNodeName]){for(style in defaultStyles[parentNodeName]){if(defaultStyles[parentNodeName].hasOwnProperty(style)){if(!ignoreNonDescendentProperties||ignoreNonDescendentProperties&&style.indexOf("margin")===-1&&style.indexOf("border")===-1){if(style==="decoration"){if(!Array.isArray(params.ret[style]))params.ret[style]=[];params.ret[style].push(defaultStyles[parentNodeName][style])}else{params.ret[style]=defaultStyles[parentNodeName][style]}}}}}if(parentNodeName==="tr")ignoreNonDescendentProperties=false;style=parseStyle(parent,ignoreNonDescendentProperties);style.forEach(function(stl){if(stl.key==="decoration"){if(!Array.isArray(params.ret[stl.key]))params.ret[stl.key]=[];params.ret[stl.key].push(stl.value)}else{params.ret[stl.key]=stl.value}})});params.ret.style=cssClass;return params.ret};var parseStyle=function(element,ignoreProperties){var style=element.getAttribute("style")||"";style=style.split(";");if(element.getAttribute("width")){style.unshift("width:"+element.getAttribute("width")+"px")}if(element.getAttribute("height")){style.unshift("height:"+element.getAttribute("height")+"px")}var styleDefs=style.map(function(style){return style.toLowerCase().split(":")});var ret=[];var borders=[];var nodeName=element.nodeName.toUpperCase();styleDefs.forEach(function(styleDef){if(styleDef.length===2){var key=styleDef[0].trim();var value=styleDef[1].trim();switch(key){case"margin":{if(ignoreProperties)break;value=value.split(" ");if(value.length===1)value=[value[0],value[0],value[0],value[0]];else if(value.length===2)value=[value[1],value[0]];else if(value.length===3)value=[value[1],value[0],value[1],value[2]];else if(value.length===4)value=[value[3],value[0],value[1],value[2]];value.forEach(function(val,i){value[i]=convertToUnit(val)});if(value.indexOf(false)===-1)ret.push({key:key,value:value});break}case"text-align":{ret.push({key:"alignment",value:value});break}case"font-weight":{if(value==="bold")ret.push({key:"bold",value:true});break}case"text-decoration":{ret.push({key:"decoration",value:toCamelCase(value)});break}case"font-style":{if(value==="italic")ret.push({key:"italics",value:true});break}case"font-family":{ret.push({key:"font",value:value.split(",")[0].replace(/"|^'|^\s*|\s*$|'$/g,"").replace(/^([a-z])/g,function(g){return g[0].toUpperCase()}).replace(/ ([a-z])/g,function(g){return g[1].toUpperCase()})});break}case"color":{ret.push({key:"color",value:parseColor(value)});break}case"background-color":{ret.push({key:nodeName==="TD"||nodeName==="TH"?"fillColor":"background",value:parseColor(value)});break}case"text-indent":{ret.push({key:"leadingIndent",value:convertToUnit(value)});break}case"white-space":{ret.push({key:"preserveLeadingSpaces",value:value==="break-spaces"||value.slice(0,3)==="pre"});break}default:{if(key==="border"||key.indexOf("border-left")===0||key.indexOf("border-top")===0||key.indexOf("border-right")===0||key.indexOf("border-bottom")===0){if(!ignoreProperties)borders.push({key:key,value:value})}else{if(ignoreProperties&&(key.indexOf("margin-")===0||key==="width"||key==="height"))break;if(key.indexOf("padding")===0)break;if(key.indexOf("-")>-1)key=toCamelCase(key);if(value){var parsedValue=convertToUnit(value);ret.push({key:key,value:parsedValue===false?value:parsedValue})}}}}}});if(borders.length>0){var border=[];var borderColor=[];borders.forEach(function(b){var properties=b.value.split(" ");var width=properties[0].replace(/(\d+)(\.\d+)?([^\d]+)/g,"$1$2 ").trim();var index=-1,i;if(b.key.indexOf("-left")>-1)index=0;else if(b.key.indexOf("-top")>-1)index=1;else if(b.key.indexOf("-right")>-1)index=2;else if(b.key.indexOf("-bottom")>-1)index=3;if(index>-1){border[index]=width>0}else{for(i=0;i<4;i++)border[i]=width>0}if(properties.length>2){var color=properties.slice(2).join(" ");if(index>-1){borderColor[index]=parseColor(color)}else{for(i=0;i<4;i++)borderColor[i]=parseColor(color)}}});for(var i=0;i<4;i++){if(border.length>0&&typeof border[i]==="undefined")border[i]=true;if(borderColor.length>0&&typeof borderColor[i]==="undefined")borderColor[i]="#000000"}if(border.length>0)ret.push({key:"border",value:border});if(borderColor.length>0)ret.push({key:"borderColor",value:borderColor})}return ret};var toCamelCase=function(str){return str.replace(/-([a-z])/g,function(g){return g[1].toUpperCase()})};var parseColor=function(color){var haxRegex=new RegExp("^#([0-9a-f]{3}|[0-9a-f]{6})$");var rgbRegex=new RegExp("^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$");var nameRegex=new RegExp("^[a-z]+$");if(haxRegex.test(color)){return color}else if(rgbRegex.test(color)){var decimalColors=rgbRegex.exec(color).slice(1);for(var i=0;i<3;i++){var decimalValue=+decimalColors[i];if(decimalValue>255){decimalValue=255}var hexString="0"+decimalValue.toString(16);hexString=hexString.slice(-2);decimalColors[i]=hexString}return"#"+decimalColors.join("")}else if(nameRegex.test(color)){return color==="transparent"?"white":color}else{console.error('Could not parse color "'+color+'"');return color}};var convertToUnit=function(val){if(!isNaN(parseFloat(val))&&isFinite(val))return val*1;var mtch=(val+"").trim().match(/^(\d+(\.\d+)?)(pt|px|rem|cm)$/);if(!mtch)return false;val=mtch[1];switch(mtch[3]){case"px":{val=Math.round(val*.75292857248934);break}case"rem":{val*=12;break}case"cm":{val=Math.round(val*28.34646);break}}return val*1};return convertHtml(htmlText)}},{}]},{},[1])(1)});
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.htmlToPdfmake=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){module.exports=function(htmlText,options){this.wndw=options&&options.window?options.window:window;this.tableAutoSize=options&&typeof options.tableAutoSize==="boolean"?options.tableAutoSize:false;this.fontSizes=options&&Array.isArray(options.fontSizes)?options.fontSizes:[10,14,16,18,20,24,28];this.defaultStyles={b:{bold:true},strong:{bold:true},u:{decoration:"underline"},del:{decoration:"lineThrough"},s:{decoration:"lineThrough"},em:{italics:true},i:{italics:true},h1:{fontSize:24,bold:true,marginBottom:5},h2:{fontSize:22,bold:true,marginBottom:5},h3:{fontSize:20,bold:true,marginBottom:5},h4:{fontSize:18,bold:true,marginBottom:5},h5:{fontSize:16,bold:true,marginBottom:5},h6:{fontSize:14,bold:true,marginBottom:5},a:{color:"blue",decoration:"underline"},strike:{decoration:"lineThrough"},p:{margin:[0,5,0,10]},ul:{marginBottom:5,marginLeft:5},table:{marginBottom:5},th:{bold:true,fillColor:"#EEEEEE"}};this.changeDefaultStyles=function(){for(var keyStyle in options.defaultStyles){if(this.defaultStyles.hasOwnProperty(keyStyle)){if(options.defaultStyles.hasOwnProperty(keyStyle)&&!options.defaultStyles[keyStyle]){delete this.defaultStyles[keyStyle]}else{for(var k in options.defaultStyles[keyStyle]){if(options.defaultStyles[keyStyle][k]==="")delete this.defaultStyles[keyStyle][k];else this.defaultStyles[keyStyle][k]=options.defaultStyles[keyStyle][k]}}}else{this.defaultStyles[keyStyle]={};for(var ks in options.defaultStyles[keyStyle]){this.defaultStyles[keyStyle][ks]=options.defaultStyles[keyStyle][ks]}}}};if(options&&options.defaultStyles){this.changeDefaultStyles()}this.convertHtml=function(htmlText){var parser=new this.wndw.DOMParser;var parsedHtml=parser.parseFromString(htmlText,"text/html");var docDef=this.parseElement(parsedHtml.body,[]);return docDef.stack||docDef.text};this.parseElement=function(element,parents){var nodeName=element.nodeName.toUpperCase();var nodeNameLowerCase=nodeName.toLowerCase();var ret={text:[]};var text,needStack=false;var dataset,i,key,_this=this;if(["COLGROUP","COL"].indexOf(nodeName)>-1)return"";switch(element.nodeType){case 3:{if(element.textContent){text=element.textContent;var styleParentTextNode=this.parseStyle(parents[parents.length-1],true);var hasWhiteSpace=false;for(i=0;i<styleParentTextNode.length;i++){if(styleParentTextNode[i].key==="preserveLeadingSpaces"){hasWhiteSpace=styleParentTextNode[i].value;break}}if(!hasWhiteSpace)text=element.textContent.replace(/\n(\s+)?/g,"");if(options&&typeof options.replaceText==="function")text=options.replaceText(text,parents);if(["TABLE","THEAD","TBODY","TFOOT","TR","UL","OL"].indexOf(parents[parents.length-1].nodeName)>-1)text=text.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");if(text){ret={text:text};ret=this.applyStyle({ret:ret,parents:parents});return ret}}return""}case 1:{ret.nodeName=nodeName;parents.push(element);if(element.childNodes&&element.childNodes.length>0){[].forEach.call(element.childNodes,function(child){var res=_this.parseElement(child,parents);if(res){if(Array.isArray(res.text)&&res.text.length===0)res.text="";ret.text.push(res)}});needStack=this.searchForStack(ret);if(needStack){ret.stack=ret.text.slice(0);delete ret.text}else{ret=this.applyStyle({ret:ret,parents:parents})}}parents.pop();switch(nodeName){case"TABLE":{var rowIndex,cellIndex;ret.table={body:[]};var tbodies=ret.stack||ret.text;if(Array.isArray(tbodies)){rowIndex=0;var allRows=[];tbodies.forEach(function(tbody){var rows=tbody.stack||tbody.text;if(Array.isArray(rows)){allRows=allRows.concat(rows);rows.forEach(function(row){var cells=row.stack||row.text;if(Array.isArray(cells)){cellIndex=0;ret.table.body[rowIndex]=[];cells.forEach(function(cell){ret.table.body[rowIndex].push(cell);if(cell.colSpan){i=cell.colSpan;_this.setRowSpan({rows:allRows,cell:cell,rowIndex:rowIndex,cellIndex:cellIndex});while(--i>0){ret.table.body[rowIndex].push({text:""});_this.setRowSpan({rows:allRows,cell:cell,rowIndex:rowIndex,cellIndex:cellIndex});cellIndex++}}else{_this.setRowSpan({rows:allRows,cell:cell,rowIndex:rowIndex,cellIndex:cellIndex})}cellIndex++});rowIndex++}})}})}delete ret.stack;delete ret.text;ret=this.applyStyle({ret:ret,parents:parents.concat([element])});if(this.tableAutoSize){var cellsWidths=[];var cellsHeights=[];var tableWidths=[];var tableHeights=[];ret.table.body.forEach(function(row,rowIndex){cellsWidths.push([]);cellsHeights.push([]);row.forEach(function(cell){var width=typeof cell.width!=="undefined"?cell.width:"auto";var height=typeof cell.height!=="undefined"?cell.height:"auto";if(width!=="auto"&&cell.colSpan){if(!isNaN(width))width/=cell.colSpan;else width="auto"}if(height!=="auto"&&cell.rowSpan){if(!isNaN(height))height/=cell.colSpan;else height="auto"}cellsWidths[rowIndex].push(width);cellsHeights[rowIndex].push(height)})});cellsWidths.forEach(function(row){row.forEach(function(cellWidth,cellIndex){var type=typeof tableWidths[cellIndex];if(type==="undefined"||cellWidth!=="auto"&&type==="number"&&cellWidth>tableWidths[cellIndex]||cellWidth!=="auto"&&tableWidths[cellIndex]==="auto"){tableWidths[cellIndex]=cellWidth}})});cellsHeights.forEach(function(row,rowIndex){row.forEach(function(cellHeight){var type=typeof tableHeights[rowIndex];if(type==="undefined"||cellHeight!=="auto"&&type==="number"&&cellHeight>tableHeights[rowIndex]||cellHeight!=="auto"&&tableHeights[rowIndex]==="auto"){tableHeights[rowIndex]=cellHeight}})});if(tableWidths.length>0)ret.table.widths=tableWidths;if(tableHeights.length>0)ret.table.heights=tableHeights}if(element.dataset&&element.dataset.pdfmake){dataset=element.dataset.pdfmake;if(dataset.charAt(1)==="'")dataset=dataset.replace(/'/g,'"');try{dataset=JSON.parse(dataset);for(key in dataset){if(key==="layout"){ret.layout=dataset[key]}else{ret.table[key]=dataset[key]}}}catch(e){console.error(e)}}break}case"TH":case"TD":{if(element.getAttribute("rowspan"))ret.rowSpan=element.getAttribute("rowspan")*1;if(element.getAttribute("colspan"))ret.colSpan=element.getAttribute("colspan")*1;ret=this.applyStyle({ret:ret,parents:parents.concat([element])});break}case"SVG":{ret={svg:element.outerHTML.replace(/\n(\s+)?/g,""),nodeName:"SVG",style:["html-svg"]};break}case"BR":{ret.text=[{text:"\n"}];break}case"SUB":case"SUP":{ret[nodeName.toLowerCase()]={offset:"30%",fontSize:8};break}case"HR":{var styleHR={width:514,type:"line",margin:[0,12,0,12],thickness:.5,color:"#000000",left:0};if(element.dataset&&element.dataset.pdfmake){dataset=JSON.parse(element.dataset.pdfmake);for(key in dataset){styleHR[key]=dataset[key]}}ret.margin=styleHR.margin;ret.canvas=[{type:styleHR.type,x1:styleHR.left,y1:0,x2:styleHR.width,y2:0,lineWidth:styleHR.thickness,lineColor:styleHR.color}];delete ret.text;break}case"OL":case"UL":{ret[nodeNameLowerCase]=(ret.stack||ret.text).slice(0);delete ret.stack;delete ret.text;ret=this.applyStyle({ret:ret,parents:parents.concat([element])});if(ret.listStyle||ret.listStyleType)ret.type=ret.listStyle||ret.listStyleType;break}case"IMG":{ret.image=element.getAttribute("src");delete ret.stack;delete ret.text;ret=this.applyStyle({ret:ret,parents:parents.concat([element])});break}case"A":{ret.link=element.getAttribute("href");break}case"FONT":{if(element.getAttribute("color")){ret.color=this.parseColor(element.getAttribute("color"))}if(element.getAttribute("size")){var size=Math.min(Math.max(1,parseInt(element.getAttribute("size"))),7);var fontSize=Math.max(this.fontSizes[0],this.fontSizes[size-1]);ret.fontSize=fontSize}ret=this.applyStyle({ret:ret,parents:parents.concat([element])});break}default:{if(typeof options.customTag==="function"){ret=options.customTag.call(this,{element:element,parents:parents,ret:ret})}}}if(Array.isArray(ret.text)&&ret.text.length===1&&ret.text[0].text&&!ret.text[0].nodeName){ret.text=ret.text[0].text}if(["HR","TABLE"].indexOf(nodeName)===-1&&element.dataset&&element.dataset.pdfmake){dataset=JSON.parse(element.dataset.pdfmake);for(key in dataset){ret[key]=dataset[key]}}return ret}}};this.searchForStack=function(ret){if(Array.isArray(ret.text)){for(var i=0;i<ret.text.length;i++){if(ret.text[i].stack||["P","DIV","TABLE","SVG","UL","OL","IMG","H1","H2","H3","H4","H5","H6"].indexOf(ret.text[i].nodeName)>-1)return true;if(this.searchForStack(ret.text[i])===true)return true}}return false};this.setRowSpan=function(params){var cells;if(params.cell.rowSpan){for(var i=1;i<=params.cell.rowSpan-1;i++){cells=params.rows[params.rowIndex+i].text||params.rows[params.rowIndex+i].stack;cells.splice(params.cellIndex,0,{text:""})}}};this.applyStyle=function(params){var cssClass=[];var lastIndex=params.parents.length-1;var _this=this;params.parents.forEach(function(parent,parentIndex){var parentNodeName=parent.nodeName.toLowerCase();var htmlClass="html-"+parentNodeName;if(htmlClass!=="html-body"&&cssClass.indexOf(htmlClass)===-1)cssClass.unshift(htmlClass);var parentClass=(parent.getAttribute("class")||"").split(" ");parentClass.forEach(function(p){if(p)cssClass.push(p)});var style;var ignoreNonDescendentProperties=parentIndex!==lastIndex;if(_this.defaultStyles[parentNodeName]){for(style in _this.defaultStyles[parentNodeName]){if(_this.defaultStyles[parentNodeName].hasOwnProperty(style)){if(!ignoreNonDescendentProperties||ignoreNonDescendentProperties&&style.indexOf("margin")===-1&&style.indexOf("border")===-1){if(style==="decoration"){if(!Array.isArray(params.ret[style]))params.ret[style]=[];params.ret[style].push(_this.defaultStyles[parentNodeName][style])}else{params.ret[style]=_this.defaultStyles[parentNodeName][style]}}}}}if(parentNodeName==="tr")ignoreNonDescendentProperties=false;style=_this.parseStyle(parent,ignoreNonDescendentProperties);style.forEach(function(stl){if(stl.key==="decoration"){if(!Array.isArray(params.ret[stl.key]))params.ret[stl.key]=[];params.ret[stl.key].push(stl.value)}else{if(params.ret.margin&&stl.key.indexOf("margin")===0){switch(stl.key){case"marginLeft":params.ret.margin[0]=stl.value;break;case"marginTop":params.ret.margin[1]=stl.value;break;case"marginRight":params.ret.margin[2]=stl.value;break;case"marginBottom":params.ret.margin[3]=stl.value;break}}else{params.ret[stl.key]=stl.value}}})});params.ret.style=cssClass;return params.ret};this.parseStyle=function(element,ignoreProperties){var style=element.getAttribute("style")||"";style=style.split(";");if(element.getAttribute("width")){style.unshift("width:"+element.getAttribute("width")+"px")}if(element.getAttribute("height")){style.unshift("height:"+element.getAttribute("height")+"px")}var styleDefs=style.map(function(style){return style.toLowerCase().split(":")});var ret=[];var borders=[];var nodeName=element.nodeName.toUpperCase();var _this=this;styleDefs.forEach(function(styleDef){if(styleDef.length===2){var key=styleDef[0].trim();var value=styleDef[1].trim();switch(key){case"margin":{if(ignoreProperties)break;value=value.split(" ");if(value.length===1)value=[value[0],value[0],value[0],value[0]];else if(value.length===2)value=[value[1],value[0]];else if(value.length===3)value=[value[1],value[0],value[1],value[2]];else if(value.length===4)value=[value[3],value[0],value[1],value[2]];value.forEach(function(val,i){value[i]=_this.convertToUnit(val)});if(value.indexOf(false)===-1)ret.push({key:key,value:value});break}case"text-align":{ret.push({key:"alignment",value:value});break}case"font-weight":{if(value==="bold")ret.push({key:"bold",value:true});break}case"text-decoration":{ret.push({key:"decoration",value:_this.toCamelCase(value)});break}case"font-style":{if(value==="italic")ret.push({key:"italics",value:true});break}case"font-family":{ret.push({key:"font",value:value.split(",")[0].replace(/"|^'|^\s*|\s*$|'$/g,"").replace(/^([a-z])/g,function(g){return g[0].toUpperCase()}).replace(/ ([a-z])/g,function(g){return g[1].toUpperCase()})});break}case"color":{ret.push({key:"color",value:_this.parseColor(value)});break}case"background-color":{ret.push({key:nodeName==="TD"||nodeName==="TH"?"fillColor":"background",value:_this.parseColor(value)});break}case"text-indent":{ret.push({key:"leadingIndent",value:_this.convertToUnit(value)});break}case"white-space":{ret.push({key:"preserveLeadingSpaces",value:value==="break-spaces"||value.slice(0,3)==="pre"});break}default:{if(key==="border"||key.indexOf("border-left")===0||key.indexOf("border-top")===0||key.indexOf("border-right")===0||key.indexOf("border-bottom")===0){if(!ignoreProperties)borders.push({key:key,value:value})}else{if(ignoreProperties&&(key.indexOf("margin-")===0||key==="width"||key==="height"))break;if(key.indexOf("padding")===0)break;if(key.indexOf("-")>-1)key=_this.toCamelCase(key);if(value){var parsedValue=_this.convertToUnit(value);ret.push({key:key,value:parsedValue===false?value:parsedValue})}}}}}});if(borders.length>0){var border=[];var borderColor=[];borders.forEach(function(b){var properties=b.value.split(" ");var width=properties[0].replace(/(\d+)(\.\d+)?([^\d]+)/g,"$1$2 ").trim();var index=-1,i;if(b.key.indexOf("-left")>-1)index=0;else if(b.key.indexOf("-top")>-1)index=1;else if(b.key.indexOf("-right")>-1)index=2;else if(b.key.indexOf("-bottom")>-1)index=3;if(index>-1){border[index]=width>0}else{for(i=0;i<4;i++)border[i]=width>0}if(properties.length>2){var color=properties.slice(2).join(" ");if(index>-1){borderColor[index]=_this.parseColor(color)}else{for(i=0;i<4;i++)borderColor[i]=_this.parseColor(color)}}});for(var i=0;i<4;i++){if(border.length>0&&typeof border[i]==="undefined")border[i]=true;if(borderColor.length>0&&typeof borderColor[i]==="undefined")borderColor[i]="#000000"}if(border.length>0)ret.push({key:"border",value:border});if(borderColor.length>0)ret.push({key:"borderColor",value:borderColor})}return ret};this.toCamelCase=function(str){return str.replace(/-([a-z])/g,function(g){return g[1].toUpperCase()})};this.parseColor=function(color){var haxRegex=new RegExp("^#([0-9a-f]{3}|[0-9a-f]{6})$");var rgbRegex=new RegExp("^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$");var nameRegex=new RegExp("^[a-z]+$");if(haxRegex.test(color)){return color}else if(rgbRegex.test(color)){var decimalColors=rgbRegex.exec(color).slice(1);for(var i=0;i<3;i++){var decimalValue=+decimalColors[i];if(decimalValue>255){decimalValue=255}var hexString="0"+decimalValue.toString(16);hexString=hexString.slice(-2);decimalColors[i]=hexString}return"#"+decimalColors.join("")}else if(nameRegex.test(color)){return color==="transparent"?"white":color}else{console.error('Could not parse color "'+color+'"');return color}};this.convertToUnit=function(val){if(!isNaN(parseFloat(val))&&isFinite(val))return val*1;var mtch=(val+"").trim().match(/^(\d+(\.\d+)?)(pt|px|rem|cm)$/);if(!mtch)return false;val=mtch[1];switch(mtch[3]){case"px":{val=Math.round(val*.75292857248934);break}case"rem":{val*=12;break}case"cm":{val=Math.round(val*28.34646);break}}return val*1};return this.convertHtml(htmlText)}},{}]},{},[1])(1)});

@@ -16,2 +16,3 @@ // source: https://github.com/OpenSlides/OpenSlides/blob/f4f8b8422f9b3fbab58e35ac3f8f870d35813b7d/client/src/app/core/ui-services/html-to-pdf.service.ts

* @param {Boolean} [tableAutoSize=false] It permits to use the width/height defined in styles for a table's cells and rows
* @param {Function} [customTag] It permits to handle non-regular HTML tag
* @param {Object} [window] The `window` object (required for NodeJS server side use)

@@ -38,10 +39,10 @@ * @return {Object} it returns a PdfMake object

module.exports = function(htmlText, options) {
var wndw = (options && options.window ? options.window : window);
var tableAutoSize = (options && typeof options.tableAutoSize === "boolean" ? options.tableAutoSize : false);
this.wndw = (options && options.window ? options.window : window);
this.tableAutoSize = (options && typeof options.tableAutoSize === "boolean" ? options.tableAutoSize : false);
// Used with the size attribute on the font elements to calculate relative font size
var fontSizes = (options && Array.isArray(options.fontSizes) ? options.fontSizes : [10, 14, 16, 18, 20, 24, 28]);
this.fontSizes = (options && Array.isArray(options.fontSizes) ? options.fontSizes : [10, 14, 16, 18, 20, 24, 28]);
// set default styles
var defaultStyles = {
this.defaultStyles = {
b: {bold:true},

@@ -71,13 +72,13 @@ strong: {bold:true},

*/
function changeDefaultStyles () {
this.changeDefaultStyles = function () {
for (var keyStyle in options.defaultStyles) {
if (defaultStyles.hasOwnProperty(keyStyle)) {
if (this.defaultStyles.hasOwnProperty(keyStyle)) {
// if we want to remove a default style
if (options.defaultStyles.hasOwnProperty(keyStyle) && !options.defaultStyles[keyStyle]) {
delete defaultStyles[keyStyle];
delete this.defaultStyles[keyStyle];
} else {
for (var k in options.defaultStyles[keyStyle]) {
// if we want to delete a specific property
if (options.defaultStyles[keyStyle][k] === '') delete defaultStyles[keyStyle][k];
else defaultStyles[keyStyle][k] = options.defaultStyles[keyStyle][k];
if (options.defaultStyles[keyStyle][k] === '') delete this.defaultStyles[keyStyle][k];
else this.defaultStyles[keyStyle][k] = options.defaultStyles[keyStyle][k];
}

@@ -87,5 +88,5 @@ }

// if we add default styles
defaultStyles[keyStyle] = {}
this.defaultStyles[keyStyle] = {}
for (var ks in options.defaultStyles[keyStyle]) {
defaultStyles[keyStyle][ks] = options.defaultStyles[keyStyle][ks];
this.defaultStyles[keyStyle][ks] = options.defaultStyles[keyStyle][ks];
}

@@ -97,3 +98,3 @@ }

if (options && options.defaultStyles) {
changeDefaultStyles();
this.changeDefaultStyles();
}

@@ -108,8 +109,8 @@

*/
var convertHtml = function(htmlText) {
this.convertHtml = function(htmlText) {
// Create a HTML DOM tree out of html string
var parser = new wndw.DOMParser();
var parser = new this.wndw.DOMParser();
var parsedHtml = parser.parseFromString(htmlText, 'text/html');
var docDef = parseElement(parsedHtml.body, []);
var docDef = this.parseElement(parsedHtml.body, []);
// remove first level

@@ -127,3 +128,3 @@ return docDef.stack || docDef.text;

*/
var parseElement = function(element, parents) {
this.parseElement = function(element, parents) {
var nodeName = element.nodeName.toUpperCase();

@@ -133,3 +134,3 @@ var nodeNameLowerCase = nodeName.toLowerCase();

var text, needStack=false;
var dataset, i, key;
var dataset, i, key, _this=this;

@@ -144,3 +145,3 @@ // ignore some HTML tags

// check if we have 'white-space' in the parent's style
var styleParentTextNode = parseStyle(parents[parents.length-1], true);
var styleParentTextNode = this.parseStyle(parents[parents.length-1], true);
var hasWhiteSpace = false;

@@ -161,3 +162,3 @@ for (i=0; i<styleParentTextNode.length; i++) {

ret = {'text':text};
ret = applyStyle({ret:ret, parents:parents});
ret = this.applyStyle({ret:ret, parents:parents});
return ret;

@@ -174,3 +175,3 @@ }

[].forEach.call(element.childNodes, function(child) {
var res = parseElement(child, parents);
var res = _this.parseElement(child, parents);
if (res) {

@@ -183,3 +184,3 @@ if (Array.isArray(res.text) && res.text.length===0) res.text='';

// find if we need a 'stack' instead of a 'text'
needStack = searchForStack(ret);
needStack = this.searchForStack(ret);
if (needStack) {

@@ -190,3 +191,3 @@ ret.stack = ret.text.slice(0);

// apply all the inhirent classes and styles from the parents
ret = applyStyle({ret:ret, parents:parents});
ret = this.applyStyle({ret:ret, parents:parents});
}

@@ -227,7 +228,7 @@ }

// do we have a rowSpan in addition of the colSpan?
setRowSpan({rows:allRows, cell:cell, rowIndex:rowIndex, cellIndex:cellIndex});
_this.setRowSpan({rows:allRows, cell:cell, rowIndex:rowIndex, cellIndex:cellIndex});
while (--i > 0) {
ret.table.body[rowIndex].push({text:''});
// keep adding empty cell due to rowspan
setRowSpan({rows:allRows, cell:cell, rowIndex:rowIndex, cellIndex:cellIndex});
_this.setRowSpan({rows:allRows, cell:cell, rowIndex:rowIndex, cellIndex:cellIndex});
cellIndex++;

@@ -237,3 +238,3 @@ }

// do we have a rowSpan ?
setRowSpan({rows:allRows, cell:cell, rowIndex:rowIndex, cellIndex:cellIndex});
_this.setRowSpan({rows:allRows, cell:cell, rowIndex:rowIndex, cellIndex:cellIndex});
}

@@ -253,6 +254,6 @@

// apply all the inhirent classes and styles from the parents, or for the current element
ret = applyStyle({ret:ret, parents:parents.concat([element])});
ret = this.applyStyle({ret:ret, parents:parents.concat([element])});
// if option tableAutoSize, then we try to apply the correct width/height on the table
if (tableAutoSize) {
if (this.tableAutoSize) {
var cellsWidths = [];

@@ -309,9 +310,16 @@ var cellsHeights = [];

if (element.dataset && element.dataset.pdfmake) {
dataset = JSON.parse(element.dataset.pdfmake);
for (key in dataset) {
if (key === "layout") {
ret.layout = dataset[key];
} else {
ret.table[key] = dataset[key];
// handle when people will use simple quotes, e.g. <table data-pdfmake="{'layout':'noBorders'}">
dataset = element.dataset.pdfmake;
if (dataset.charAt(1) === "'") dataset=dataset.replace(/'/g,'"');
try {
dataset = JSON.parse(dataset);
for (key in dataset) {
if (key === "layout") {
ret.layout = dataset[key];
} else {
ret.table[key] = dataset[key];
}
}
} catch(e) {
console.error(e);
}

@@ -326,3 +334,3 @@ }

// apply all the inhirent classes and styles from the parents, or for the current element
ret = applyStyle({ret:ret, parents:parents.concat([element])});
ret = this.applyStyle({ret:ret, parents:parents.concat([element])});
break;

@@ -388,3 +396,3 @@ }

// apply all the inhirent classes and styles from the parents, or for the current element
ret = applyStyle({ret:ret, parents:parents.concat([element])});
ret = this.applyStyle({ret:ret, parents:parents.concat([element])});
// check if we have `list-style-type` or `list-style`

@@ -399,3 +407,3 @@ if (ret.listStyle || ret.listStyleType) ret.type = ret.listStyle || ret.listStyleType;

// apply all the inhirent classes and styles from the parents, or for the current element
ret = applyStyle({ret:ret, parents:parents.concat([element])});
ret = this.applyStyle({ret:ret, parents:parents.concat([element])});
break;

@@ -409,11 +417,11 @@ }

if (element.getAttribute("color")) {
ret.color = parseColor(element.getAttribute("color"));
ret.color = this.parseColor(element.getAttribute("color"));
}
// Checking if the element has a size attribute
if (element.getAttribute("size")) {
// Getting and sanitizing the size value – it should be included between 1 and 7
// Getting and sanitizing the size value: it should be included between 1 and 7
var size = Math.min(Math.max(1, parseInt(element.getAttribute("size"))), 7);
// Getting the relative fontsize
var fontSize = Math.max(fontSizes[0], fontSizes[size - 1]);
var fontSize = Math.max(this.fontSizes[0], this.fontSizes[size - 1]);

@@ -425,3 +433,3 @@ // Assigning the font size

// Applying inherited styles
ret = applyStyle({
ret = this.applyStyle({
ret: ret,

@@ -432,2 +440,8 @@ parents: parents.concat([element]),

}
default: {
// handle other cases
if (typeof options.customTag === "function") {
ret = options.customTag.call(this, {element:element, parents:parents, ret:ret});
}
}
}

@@ -451,7 +465,7 @@ if (Array.isArray(ret.text) && ret.text.length === 1 && ret.text[0].text && !ret.text[0].nodeName) {

var searchForStack = function(ret) {
this.searchForStack = function(ret) {
if (Array.isArray(ret.text)) {
for (var i=0; i<ret.text.length; i++) {
if (ret.text[i].stack || ['P','DIV','TABLE','SVG','UL','OL','IMG','H1','H2','H3','H4','H5','H6'].indexOf(ret.text[i].nodeName) > -1) return true;
if (searchForStack(ret.text[i]) === true) return true;
if (this.searchForStack(ret.text[i]) === true) return true;
}

@@ -471,3 +485,3 @@ }

*/
var setRowSpan = function(params) {
this.setRowSpan = function(params) {
var cells;

@@ -490,5 +504,6 @@ if (params.cell.rowSpan) {

*/
var applyStyle = function(params) {
this.applyStyle = function(params) {
var cssClass = [];
var lastIndex = params.parents.length-1;
var _this = this;
params.parents.forEach(function(parent, parentIndex) {

@@ -508,5 +523,5 @@ // classes

// 1) the default styles
if (defaultStyles[parentNodeName]) {
for (style in defaultStyles[parentNodeName]) {
if (defaultStyles[parentNodeName].hasOwnProperty(style)) {
if (_this.defaultStyles[parentNodeName]) {
for (style in _this.defaultStyles[parentNodeName]) {
if (_this.defaultStyles[parentNodeName].hasOwnProperty(style)) {
if (!ignoreNonDescendentProperties ||

@@ -521,5 +536,5 @@ (ignoreNonDescendentProperties &&

if (!Array.isArray(params.ret[style])) params.ret[style]=[];
params.ret[style].push(defaultStyles[parentNodeName][style]);
params.ret[style].push(_this.defaultStyles[parentNodeName][style]);
} else {
params.ret[style] = defaultStyles[parentNodeName][style];
params.ret[style] = _this.defaultStyles[parentNodeName][style];
}

@@ -533,3 +548,3 @@ }

if (parentNodeName === 'tr') ignoreNonDescendentProperties=false;
style = parseStyle(parent, ignoreNonDescendentProperties);
style = _this.parseStyle(parent, ignoreNonDescendentProperties);
style.forEach(function(stl) {

@@ -541,3 +556,15 @@ // 'decoration' can be an array

} else {
params.ret[stl.key] = stl.value;
// when 'params.ret.margin' is defined but also a 'marginXYZ' is defined in `stl.key`,
// then we should change the correct index in `params.ret.margin` to reflect it
if (params.ret.margin && stl.key.indexOf('margin') === 0) {
// order: left | top | right | bottom
switch(stl.key) {
case "marginLeft": params.ret.margin[0]=stl.value; break;
case "marginTop": params.ret.margin[1]=stl.value; break;
case "marginRight": params.ret.margin[2]=stl.value; break;
case "marginBottom": params.ret.margin[3]=stl.value; break;
}
} else {
params.ret[stl.key] = stl.value;
}
}

@@ -558,3 +585,3 @@ });

*/
var parseStyle = function(element, ignoreProperties) {
this.parseStyle = function(element, ignoreProperties) {
var style = element.getAttribute("style") || "";

@@ -573,2 +600,3 @@ style = style.split(';');

var nodeName = element.nodeName.toUpperCase();
var _this=this;
styleDefs.forEach(function(styleDef) {

@@ -590,3 +618,3 @@ if (styleDef.length===2) {

value.forEach(function(val, i) {
value[i] = convertToUnit(val);
value[i] = _this.convertToUnit(val);
});

@@ -606,3 +634,3 @@ // ignore if we have a FALSE in the table

case "text-decoration": {
ret.push({key:"decoration", value:toCamelCase(value)})
ret.push({key:"decoration", value:_this.toCamelCase(value)})
break;

@@ -619,3 +647,3 @@ }

case "color": {
ret.push({key:"color", value:parseColor(value)})
ret.push({key:"color", value:_this.parseColor(value)})
break;

@@ -625,7 +653,7 @@ }

// if TH/TD and key is 'background', then we use 'fillColor' instead
ret.push({key:(nodeName === 'TD' || nodeName === 'TH' ? "fillColor" : "background"), value:parseColor(value)})
ret.push({key:(nodeName === 'TD' || nodeName === 'TH' ? "fillColor" : "background"), value:_this.parseColor(value)})
break;
}
case "text-indent": {
ret.push({key:"leadingIndent", value:convertToUnit(value)});
ret.push({key:"leadingIndent", value:_this.convertToUnit(value)});
break;

@@ -646,6 +674,6 @@ }

if (key.indexOf("padding") === 0) break;
if (key.indexOf("-") > -1) key=toCamelCase(key);
if (key.indexOf("-") > -1) key=_this.toCamelCase(key);
if (value) {
// convert value to a 'pt' when possible
var parsedValue = convertToUnit(value);
var parsedValue = _this.convertToUnit(value);
ret.push({key:key, value:(parsedValue === false ? value : parsedValue)});

@@ -682,5 +710,5 @@ }

if (index > -1) {
borderColor[index] = parseColor(color);
borderColor[index] = _this.parseColor(color);
} else {
for (i=0; i<4; i++) borderColor[i] = parseColor(color);
for (i=0; i<4; i++) borderColor[i] = _this.parseColor(color);
}

@@ -700,3 +728,3 @@ }

var toCamelCase = function(str) {
this.toCamelCase = function(str) {
return str.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase() });

@@ -712,3 +740,3 @@ }

*/
var parseColor = function(color) {
this.parseColor = function(color) {
var haxRegex = new RegExp('^#([0-9a-f]{3}|[0-9a-f]{6})$');

@@ -750,3 +778,3 @@

*/
var convertToUnit = function(val) {
this.convertToUnit = function(val) {
// if it's just a number, then return it

@@ -775,3 +803,3 @@ if (!isNaN(parseFloat(val)) && isFinite(val)) return val*1;

return convertHtml(htmlText)
return this.convertHtml(htmlText);
}
{
"name": "html-to-pdfmake",
"version": "2.1.7",
"version": "2.2.0",
"description": "Convert HTML code to PDFMake",

@@ -24,3 +24,3 @@ "main": "index.js",

"eslint": "^5.16.0",
"jsdom": "^14.1.0",
"jsdom": "^16.6.0",
"pdfmake": "^0.1.70",

@@ -27,0 +27,0 @@ "simple-test-framework": "^0.1.7",

@@ -194,2 +194,35 @@ # html-to-pdfmake

#### `customTag`
If your HTML code doesn't use regular HTML tags, then you can use `customTag` to define your own result.
Example with a QR code generator:
```js
var html = htmlToPdfMake(`<code typecode="QR" style="foreground:black;background:yellow;fit:300px">texto in code</code>`, {,
customTag:function(params) {
var ret = params.ret;
var element = params.element;
var parents = params.parents;
switch(ret.nodeName) {
case "CODE": {
ret = this.applyStyle({ret:ret, parents:parents.concat([element])});
ret.qr = ret.text[0].text;
switch(element.getAttribute("typecode")){
case 'QR':
delete ret.text;
ret.nodeName='QR';
if(!ret.style || !Array.isArray(ret.style)){
ret.style = [];
}
ret.style.push('html-qr');
break;
}
break;
}
}
return ret;
}
});
```
### HTML tags supported

@@ -414,3 +447,3 @@

<table data-pdfmake="{&quot;widths&quot;:[100,&quot;*&quot;,&quot;auto&quot;],&quot;heights&quot;:40}">
<table data-pdfmake="{'widths':[100,'*','auto'],'heights':40}">
<tr>

@@ -417,0 +450,0 @@ <td colspan="3">Table with <b>widths=[100,"*","auto"]</b> and <b>heights=40</b></td>

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc