Created
May 10, 2016 13:44
-
-
Save sto3psl/672f5a343bfaef421686741bce09877b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** Import decamelize um camelCase in Dashed-Schreibweise umzuwandeln */ | |
var decamelize = require('decamelize') | |
var d3 = require('d3') | |
/** | |
* Funktion zum Zeichnen der Elemente aus Datensatz | |
* @param {Object} canvas SVG in dem die Elemente gezeichnet werden | |
* @param {Array} data Daten und Attribute der Elemente | |
*/ | |
var drawElements = function (canvas, data) { | |
var elements = data | |
if (!(canvas instanceof d3.selection)) { | |
canvas = d3.select(canvas) | |
} | |
canvas.html('') | |
/** | |
* Schleife durch alle Elemente in data-Array | |
*/ | |
for (var i = 0; i < elements.length; i++) { | |
/** SVG Element erstellen (text|image|rect) */ | |
var e = canvas.append(elements[i].type) | |
/** Attribute des aktuellen Elements (font-family, font-size, x, y, etc.) */ | |
var keys = Object.keys(elements[i]) | |
/** | |
* Schleife durch alle Attribute des aktuellen Elements | |
*/ | |
for (var j = 0; j < keys.length; j++) { | |
/** Attribute die nicht type, content oder class sind werden in | |
* folgender Form gesetzt: | |
* | |
* key="<value>" Bsp.: font-family="Alte-Schwabacher" | |
*/ | |
if (keys[j] !== 'type' && keys[j] !== 'content' && keys[j] !== 'class') { | |
/** | |
* Bilder links benötigen in SVG einen Namespace deswegen wird href | |
* folgendermaßen gesetzt: | |
* | |
* xlink:href="<Link zum Bild>" | |
*/ | |
if (keys[j] === 'href') { | |
e.attr(decamelize('xlink:' + keys[j], '-'), elements[i][keys[j]]) | |
/** | |
* preserveAspectRatio wird als einziges SVG-Attribut nicht mit dashes geschrieben | |
* deshalb kein decamelize | |
* | |
* preserveAspectRatio="<value>" | |
*/ | |
} else if (keys[j] === 'preserveAspectRatio') { | |
e.attr(keys[j], elements[i][keys[j]]) | |
/** | |
* Alle anderen Attribute werden von camelCase in dashed-case umgeschrieben | |
* | |
* Bsp.: fontFamily -> font-family | |
*/ | |
} else { | |
e.attr(decamelize(keys[j], '-'), elements[i][keys[j]]) | |
} | |
/** | |
* Content ist kein Elementattribut sondern der Text und wird folgendermaßen gesetzt: | |
* | |
* <text ...>[Content]</text> | |
*/ | |
} else if (keys[j] !== 'type' && keys[j] === 'content') { | |
e.text(elements[i][keys[j]]) | |
} | |
} | |
} | |
} | |
module.exports = drawElements |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment