cell-position-xform.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. const BaseXform = require('../base-xform');
  2. const IntegerXform = require('../simple/integer-xform');
  3. class CellPositionXform extends BaseXform {
  4. constructor(options) {
  5. super();
  6. this.tag = options.tag;
  7. this.map = {
  8. 'xdr:col': new IntegerXform({tag: 'xdr:col', zero: true}),
  9. 'xdr:colOff': new IntegerXform({tag: 'xdr:colOff', zero: true}),
  10. 'xdr:row': new IntegerXform({tag: 'xdr:row', zero: true}),
  11. 'xdr:rowOff': new IntegerXform({tag: 'xdr:rowOff', zero: true}),
  12. };
  13. }
  14. render(xmlStream, model) {
  15. xmlStream.openNode(this.tag);
  16. this.map['xdr:col'].render(xmlStream, model.nativeCol);
  17. this.map['xdr:colOff'].render(xmlStream, model.nativeColOff);
  18. this.map['xdr:row'].render(xmlStream, model.nativeRow);
  19. this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff);
  20. xmlStream.closeNode();
  21. }
  22. parseOpen(node) {
  23. if (this.parser) {
  24. this.parser.parseOpen(node);
  25. return true;
  26. }
  27. switch (node.name) {
  28. case this.tag:
  29. this.reset();
  30. break;
  31. default:
  32. this.parser = this.map[node.name];
  33. if (this.parser) {
  34. this.parser.parseOpen(node);
  35. }
  36. break;
  37. }
  38. return true;
  39. }
  40. parseText(text) {
  41. if (this.parser) {
  42. this.parser.parseText(text);
  43. }
  44. }
  45. parseClose(name) {
  46. if (this.parser) {
  47. if (!this.parser.parseClose(name)) {
  48. this.parser = undefined;
  49. }
  50. return true;
  51. }
  52. switch (name) {
  53. case this.tag:
  54. this.model = {
  55. nativeCol: this.map['xdr:col'].model,
  56. nativeColOff: this.map['xdr:colOff'].model,
  57. nativeRow: this.map['xdr:row'].model,
  58. nativeRowOff: this.map['xdr:rowOff'].model,
  59. };
  60. return false;
  61. default:
  62. // not quite sure how we get here!
  63. return true;
  64. }
  65. }
  66. }
  67. module.exports = CellPositionXform;