page-setup-xform.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. const _ = require('../../../utils/under-dash');
  2. const BaseXform = require('../base-xform');
  3. function booleanToXml(model) {
  4. return model ? '1' : undefined;
  5. }
  6. function pageOrderToXml(model) {
  7. switch (model) {
  8. case 'overThenDown':
  9. return model;
  10. default:
  11. return undefined;
  12. }
  13. }
  14. function cellCommentsToXml(model) {
  15. switch (model) {
  16. case 'atEnd':
  17. case 'asDisplyed':
  18. return model;
  19. default:
  20. return undefined;
  21. }
  22. }
  23. function errorsToXml(model) {
  24. switch (model) {
  25. case 'dash':
  26. case 'blank':
  27. case 'NA':
  28. return model;
  29. default:
  30. return undefined;
  31. }
  32. }
  33. function pageSizeToModel(value) {
  34. return value !== undefined ? parseInt(value, 10) : undefined;
  35. }
  36. class PageSetupXform extends BaseXform {
  37. get tag() {
  38. return 'pageSetup';
  39. }
  40. render(xmlStream, model) {
  41. if (model) {
  42. const attributes = {
  43. paperSize: model.paperSize,
  44. orientation: model.orientation,
  45. horizontalDpi: model.horizontalDpi,
  46. verticalDpi: model.verticalDpi,
  47. pageOrder: pageOrderToXml(model.pageOrder),
  48. blackAndWhite: booleanToXml(model.blackAndWhite),
  49. draft: booleanToXml(model.draft),
  50. cellComments: cellCommentsToXml(model.cellComments),
  51. errors: errorsToXml(model.errors),
  52. scale: model.scale,
  53. fitToWidth: model.fitToWidth,
  54. fitToHeight: model.fitToHeight,
  55. firstPageNumber: model.firstPageNumber,
  56. useFirstPageNumber: booleanToXml(model.firstPageNumber),
  57. usePrinterDefaults: booleanToXml(model.usePrinterDefaults),
  58. copies: model.copies,
  59. };
  60. if (_.some(attributes, value => value !== undefined)) {
  61. xmlStream.leafNode(this.tag, attributes);
  62. }
  63. }
  64. }
  65. parseOpen(node) {
  66. switch (node.name) {
  67. case this.tag:
  68. this.model = {
  69. paperSize: pageSizeToModel(node.attributes.paperSize),
  70. orientation: node.attributes.orientation || 'portrait',
  71. horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10),
  72. verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10),
  73. pageOrder: node.attributes.pageOrder || 'downThenOver',
  74. blackAndWhite: node.attributes.blackAndWhite === '1',
  75. draft: node.attributes.draft === '1',
  76. cellComments: node.attributes.cellComments || 'None',
  77. errors: node.attributes.errors || 'displayed',
  78. scale: parseInt(node.attributes.scale || '100', 10),
  79. fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10),
  80. fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10),
  81. firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10),
  82. useFirstPageNumber: node.attributes.useFirstPageNumber === '1',
  83. usePrinterDefaults: node.attributes.usePrinterDefaults === '1',
  84. copies: parseInt(node.attributes.copies || '1', 10),
  85. };
  86. return true;
  87. default:
  88. return false;
  89. }
  90. }
  91. parseText() {}
  92. parseClose() {
  93. return false;
  94. }
  95. }
  96. module.exports = PageSetupXform;