Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

createSVG.js 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. var fs = require("fs"),
  2. path = require("path");
  3. var HISTORY_FILE = path.join(__dirname, "../server-data/history.txt");
  4. function htmlspecialchars (str) {
  5. //Hum, hum... Could do better
  6. if (typeof str !== "string") return "";
  7. return str.replace(/&/g, "&")
  8. .replace(/</g, "&lt;")
  9. .replace(/>/g, "&gt;")
  10. .replace(/"/g, "&quot;")
  11. .replace(/'/g, "&#039;");
  12. }
  13. var Tools = {
  14. "Text" : function(el) {
  15. return '<text ' +
  16. 'id="'+htmlspecialchars(el.id||"t")+'" ' +
  17. 'x="'+(el.x|0)+'" '+
  18. 'y="'+(el.y|0)+'" '+
  19. 'font-size="'+(el.size|0)+'" '+
  20. 'fill="'+htmlspecialchars(el.color||"#000")+'" '+
  21. '>'+htmlspecialchars(el.txt||"")+'</text>';
  22. },
  23. "Pencil" : function(el) {
  24. if (!el._children) return "";
  25. switch (el._children.length) {
  26. case 0: return "";
  27. case 1:
  28. var pathstring = "M" + el._children[0].x + " " + el._children[0].y +
  29. "L" + el._children[0].x + " " + el._children[0].y;
  30. break;
  31. default:
  32. var pathstring = "M"+el._children[0].x+" "+ el._children[0].y + "L";
  33. for(var i=1;i<el._children.length;i++){
  34. pathstring += (+el._children[i].x)+" "+ (+el._children[i].y)+" ";
  35. }
  36. }
  37. return '<path ' +
  38. 'id="'+htmlspecialchars(el.id||"l")+'" ' +
  39. 'stroke-width="'+(el.size|0)+'" '+
  40. 'stroke="'+htmlspecialchars(el.color||"#000")+'" '+
  41. 'd="'+pathstring+'" ' +
  42. '/>';
  43. }
  44. };
  45. function toSVG(obj) {
  46. var margin=500, maxelems = 1e4;
  47. var elements = "", i=0, w=0, h=0;
  48. var t=Date.now();
  49. for (var id in obj) {
  50. if (++i > maxelems) break;
  51. var elem = obj[id];
  52. if (elem.x && elem.x + margin > w ) w = elem.x + margin;
  53. if (elem.y && elem.y + margin > h) h = elem.y + margin;
  54. elements += Tools[elem.tool](elem);
  55. }
  56. console.error(i+" elements treated in "+(Date.now()-t)+"ms.");
  57. var svg = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'+w+'" height="'+h+'">' +
  58. '<defs><style type="text/css"><![CDATA[' +
  59. 'text {font-family:"Arial"}' +
  60. 'path {fill:none;stroke-linecap:round;stroke-linejoin:round;}' +
  61. ']]></style></defs>' +
  62. elements +
  63. '</svg>';
  64. console.log(svg);
  65. return svg;
  66. }
  67. fs.readFile(HISTORY_FILE, function (err, data) {
  68. if (err) throw err;
  69. var t=Date.now();
  70. var board = JSON.parse(data);
  71. console.error("JSON parsed in "+(Date.now()-t)+"ms.");
  72. toSVG(board);
  73. });