hyperlink-xform.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const BaseXform = require('../base-xform');
  2. class HyperlinkXform extends BaseXform {
  3. get tag() {
  4. return 'hyperlink';
  5. }
  6. render(xmlStream, model) {
  7. if (this.isInternalLink(model)) {
  8. xmlStream.leafNode('hyperlink', {
  9. ref: model.address,
  10. 'r:id': model.rId,
  11. tooltip: model.tooltip,
  12. location: model.target,
  13. });
  14. } else {
  15. xmlStream.leafNode('hyperlink', {
  16. ref: model.address,
  17. 'r:id': model.rId,
  18. tooltip: model.tooltip,
  19. });
  20. }
  21. }
  22. parseOpen(node) {
  23. if (node.name === 'hyperlink') {
  24. this.model = {
  25. address: node.attributes.ref,
  26. rId: node.attributes['r:id'],
  27. tooltip: node.attributes.tooltip,
  28. };
  29. // This is an internal link
  30. if (node.attributes.location) {
  31. this.model.target = node.attributes.location;
  32. }
  33. return true;
  34. }
  35. return false;
  36. }
  37. parseText() {}
  38. parseClose() {
  39. return false;
  40. }
  41. isInternalLink(model) {
  42. // @example: Sheet2!D3, return true
  43. return model.target && /^[^!]+![a-zA-Z]+[\d]+$/.test(model.target);
  44. }
  45. }
  46. module.exports = HyperlinkXform;