Completed
Push — master ( 19fb27...7e6a94 )
by Johan
01:16
created

getRenderProperties.js ➔ ... ➔ .afterRender   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
/* global HTMLImageElement */
2
/* global HTMLCanvasElement */
3
/* global SVGElement */
4
5
import getOptionsFromElement from "./getOptionsFromElement.js";
6
7
// Takes an element and returns an object with information about how
8
// it should be rendered
9
// This could also return an array with these objects
10
// {
11
//   element: The element that the renderer should draw on
12
//   renderer: The name of the renderer
13
//   afterRender (optional): If something has to done after the renderer
14
//     completed, calls afterRender (function)
15
//   options (optional): Options that can be defined in the element
16
// }
17
18
function getRenderProperties(element){
19
	// If the element is a string, query select call again
20
	if(typeof element === "string"){
21
		var selector = document.querySelectorAll(element);
22
		if(selector.length === 0){
23
			throw new Error("No element found");
24
		}
25
		else{
26
			let returnArray = [];
27
			for(let i = 0; i < selector.length; i++){
28
				returnArray.push(getRenderProperties(selector[i]));
29
			}
30
			return returnArray;
31
		}
32
	}
33
	// If element is array. Recursivly call with every object in the array
34
	else if(Array.isArray(element)){
35
		let returnArray = [];
36
		for(let i = 0; i < element.length; i++){
37
			returnArray.push(getRenderProperties(element[i]));
38
		}
39
		return returnArray;
40
	}
41
	// If element, render on canvas and set the uri as src
42
	else if(typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLImageElement){
43
		var canvas = document.createElement('canvas');
44
		return {
45
			element: canvas,
46
			options: getOptionsFromElement(element),
47
			renderer: "canvas",
48
			afterRender: function(){
49
				element.setAttribute("src", canvas.toDataURL());
50
			}
51
		};
52
	}
53
	// If SVG
54
	else if(typeof SVGElement !== 'undefined' && element instanceof SVGElement){
55
		return {
56
			element: element,
57
			options: getOptionsFromElement(element),
58
			renderer: "svg"
59
		};
60
	}
61
	// If canvas (in browser)
62
	else if(typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLCanvasElement){
63
		return {
64
			element: element,
65
			options: getOptionsFromElement(element),
66
			renderer: "canvas"
67
		};
68
	}
69
	// If canvas (in node)
70
	else if(element.getContext){
71
		return {
72
			element: element,
73
			renderer: "canvas"
74
		};
75
	}
76
	else{
77
		throw new Error("Not supported type to render on.");
78
	}
79
}
80
81
export default getRenderProperties;
82