getRenderProperties.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* global HTMLImageElement */
  6. /* global HTMLCanvasElement */
  7. /* global SVGElement */
  8. var _getOptionsFromElement = require("./getOptionsFromElement.js");
  9. var _getOptionsFromElement2 = _interopRequireDefault(_getOptionsFromElement);
  10. var _renderers = require("../renderers");
  11. var _renderers2 = _interopRequireDefault(_renderers);
  12. var _exceptions = require("../exceptions/exceptions.js");
  13. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  14. // Takes an element and returns an object with information about how
  15. // it should be rendered
  16. // This could also return an array with these objects
  17. // {
  18. // element: The element that the renderer should draw on
  19. // renderer: The name of the renderer
  20. // afterRender (optional): If something has to done after the renderer
  21. // completed, calls afterRender (function)
  22. // options (optional): Options that can be defined in the element
  23. // }
  24. function getRenderProperties(element) {
  25. // If the element is a string, query select call again
  26. if (typeof element === "string") {
  27. return querySelectedRenderProperties(element);
  28. }
  29. // If element is array. Recursivly call with every object in the array
  30. else if (Array.isArray(element)) {
  31. var returnArray = [];
  32. for (var i = 0; i < element.length; i++) {
  33. returnArray.push(getRenderProperties(element[i]));
  34. }
  35. return returnArray;
  36. }
  37. // If element, render on canvas and set the uri as src
  38. else if (typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLImageElement) {
  39. return newCanvasRenderProperties(element);
  40. }
  41. // If SVG
  42. else if (element && element.nodeName && element.nodeName.toLowerCase() === 'svg' || typeof SVGElement !== 'undefined' && element instanceof SVGElement) {
  43. return {
  44. element: element,
  45. options: (0, _getOptionsFromElement2.default)(element),
  46. renderer: _renderers2.default.SVGRenderer
  47. };
  48. }
  49. // If canvas (in browser)
  50. else if (typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLCanvasElement) {
  51. return {
  52. element: element,
  53. options: (0, _getOptionsFromElement2.default)(element),
  54. renderer: _renderers2.default.CanvasRenderer
  55. };
  56. }
  57. // If canvas (in node)
  58. else if (element && element.getContext) {
  59. return {
  60. element: element,
  61. renderer: _renderers2.default.CanvasRenderer
  62. };
  63. } else if (element && (typeof element === "undefined" ? "undefined" : _typeof(element)) === 'object' && !element.nodeName) {
  64. return {
  65. element: element,
  66. renderer: _renderers2.default.ObjectRenderer
  67. };
  68. } else {
  69. throw new _exceptions.InvalidElementException();
  70. }
  71. }
  72. function querySelectedRenderProperties(string) {
  73. var selector = document.querySelectorAll(string);
  74. if (selector.length === 0) {
  75. return undefined;
  76. } else {
  77. var returnArray = [];
  78. for (var i = 0; i < selector.length; i++) {
  79. returnArray.push(getRenderProperties(selector[i]));
  80. }
  81. return returnArray;
  82. }
  83. }
  84. function newCanvasRenderProperties(imgElement) {
  85. var canvas = document.createElement('canvas');
  86. return {
  87. element: canvas,
  88. options: (0, _getOptionsFromElement2.default)(imgElement),
  89. renderer: _renderers2.default.CanvasRenderer,
  90. afterRender: function afterRender() {
  91. imgElement.setAttribute("src", canvas.toDataURL());
  92. }
  93. };
  94. }
  95. exports.default = getRenderProperties;