123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- var fs = require("fs"),
- path = require("path");
-
- var HISTORY_FILE = path.join(__dirname, "../server-data/history.txt");
-
- function htmlspecialchars (str) {
- //Hum, hum... Could do better
- if (typeof str !== "string") return "";
- return str.replace(/&/g, "&")
- .replace(/</g, "<")
- .replace(/>/g, ">")
- .replace(/"/g, """)
- .replace(/'/g, "'");
- }
-
- var Tools = {
- "Text" : function(el) {
- return '<text ' +
- 'id="'+htmlspecialchars(el.id||"t")+'" ' +
- 'x="'+(el.x|0)+'" '+
- 'y="'+(el.y|0)+'" '+
- 'font-size="'+(el.size|0)+'" '+
- 'fill="'+htmlspecialchars(el.color||"#000")+'" '+
- '>'+htmlspecialchars(el.txt||"")+'</text>';
- },
- "Pencil" : function(el) {
- if (!el._children) return "";
- switch (el._children.length) {
- case 0: return "";
- case 1:
- var pathstring = "M" + el._children[0].x + " " + el._children[0].y +
- "L" + el._children[0].x + " " + el._children[0].y;
- break;
- default:
- var pathstring = "M"+el._children[0].x+" "+ el._children[0].y + "L";
- for(var i=1;i<el._children.length;i++){
- pathstring += (+el._children[i].x)+" "+ (+el._children[i].y)+" ";
- }
- }
-
- return '<path ' +
- 'id="'+htmlspecialchars(el.id||"l")+'" ' +
- 'stroke-width="'+(el.size|0)+'" '+
- 'stroke="'+htmlspecialchars(el.color||"#000")+'" '+
- 'd="'+pathstring+'" ' +
- '/>';
- }
- };
-
-
- function toSVG(obj) {
- var margin=500, maxelems = 1e4;
- var elements = "", i=0, w=0, h=0;
- var t=Date.now();
- for (var id in obj) {
- if (++i > maxelems) break;
- var elem = obj[id];
- if (elem.x && elem.x + margin > w ) w = elem.x + margin;
- if (elem.y && elem.y + margin > h) h = elem.y + margin;
- elements += Tools[elem.tool](elem);
- }
- console.error(i+" elements treated in "+(Date.now()-t)+"ms.");
-
- var svg = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'+w+'" height="'+h+'">' +
- '<defs><style type="text/css"><![CDATA[' +
- 'text {font-family:"Arial"}' +
- 'path {fill:none;stroke-linecap:round;stroke-linejoin:round;}' +
- ']]></style></defs>' +
- elements +
- '</svg>';
- console.log(svg);
- return svg;
- }
-
- fs.readFile(HISTORY_FILE, function (err, data) {
- if (err) throw err;
- var t=Date.now();
- var board = JSON.parse(data);
- console.error("JSON parsed in "+(Date.now()-t)+"ms.");
- toSVG(board);
- });
|