2011-08-14 21:35:36 +00:00
|
|
|
(function() {
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2012-10-14 00:53:12 +00:00
|
|
|
if (typeof document !== 'undefined' && typeof window !== 'undefined') {
|
2011-08-14 21:35:36 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2012-05-29 08:29:20 +00:00
|
|
|
var DOMParser = new require('xmldom').DOMParser,
|
2011-08-14 21:35:36 +00:00
|
|
|
URL = require('url'),
|
|
|
|
|
HTTP = require('http'),
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2011-08-16 19:57:07 +00:00
|
|
|
Canvas = require('canvas'),
|
|
|
|
|
Image = require('canvas').Image;
|
2011-08-11 19:20:06 +00:00
|
|
|
|
2011-08-14 21:35:36 +00:00
|
|
|
function request(url, encoding, callback) {
|
|
|
|
|
var oURL = URL.parse(url),
|
2012-06-14 12:12:42 +00:00
|
|
|
client = HTTP.createClient(oURL.port, oURL.hostname),
|
2012-10-14 00:53:12 +00:00
|
|
|
req = client.request('GET', oURL.pathname, { 'host': oURL.hostname });
|
2011-08-14 21:35:36 +00:00
|
|
|
|
2011-09-08 19:56:59 +00:00
|
|
|
client.addListener('error', function(err) {
|
|
|
|
|
if (err.errno === process.ECONNREFUSED) {
|
|
|
|
|
fabric.log('ECONNREFUSED: connection refused to ' + client.host + ':' + client.port);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
fabric.log(err.message);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2012-10-14 00:53:12 +00:00
|
|
|
req.end();
|
|
|
|
|
req.on('response', function (response) {
|
2011-08-14 21:35:36 +00:00
|
|
|
var body = "";
|
|
|
|
|
if (encoding) {
|
|
|
|
|
response.setEncoding(encoding);
|
2011-08-11 19:20:06 +00:00
|
|
|
}
|
2011-08-14 21:35:36 +00:00
|
|
|
response.on('end', function () {
|
|
|
|
|
callback(body);
|
|
|
|
|
});
|
|
|
|
|
response.on('data', function (chunk) {
|
2012-10-14 00:53:12 +00:00
|
|
|
if (response.statusCode === 200) {
|
2011-08-14 21:35:36 +00:00
|
|
|
body += chunk;
|
|
|
|
|
}
|
|
|
|
|
});
|
2011-08-11 19:20:06 +00:00
|
|
|
});
|
2011-08-14 21:35:36 +00:00
|
|
|
}
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2011-11-28 04:57:28 +00:00
|
|
|
fabric.util.loadImage = function(url, callback) {
|
2011-08-14 21:35:36 +00:00
|
|
|
request(url, 'binary', function(body) {
|
|
|
|
|
var img = new Image();
|
|
|
|
|
img.src = new Buffer(body, 'binary');
|
2012-02-04 04:27:45 +00:00
|
|
|
// preserving original url, which seems to be lost in node-canvas
|
|
|
|
|
img._src = url;
|
2011-12-09 21:24:37 +00:00
|
|
|
callback(img);
|
2011-08-14 21:35:36 +00:00
|
|
|
});
|
|
|
|
|
};
|
2011-08-11 19:20:06 +00:00
|
|
|
|
2011-08-14 21:35:36 +00:00
|
|
|
fabric.loadSVGFromURL = function(url, callback) {
|
|
|
|
|
url = url.replace(/^\n\s*/, '').replace(/\?.*$/, '').trim();
|
|
|
|
|
request(url, '', function(body) {
|
2012-07-31 18:49:42 +00:00
|
|
|
fabric.loadSVGFromString(body, callback);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2012-11-23 12:38:13 +00:00
|
|
|
/** @ignore */
|
2012-07-31 18:49:42 +00:00
|
|
|
fabric.loadSVGFromString = function(string, callback) {
|
|
|
|
|
var doc = new DOMParser().parseFromString(string);
|
|
|
|
|
fabric.parseSVGDocument(doc.documentElement, function(results, options) {
|
|
|
|
|
callback(results, options);
|
2011-08-11 19:20:06 +00:00
|
|
|
});
|
2011-08-14 21:35:36 +00:00
|
|
|
};
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2011-09-06 00:52:20 +00:00
|
|
|
fabric.util.getScript = function(url, callback) {
|
|
|
|
|
request(url, '', function(body) {
|
|
|
|
|
eval(body);
|
|
|
|
|
callback && callback();
|
|
|
|
|
});
|
|
|
|
|
};
|
2011-08-11 19:20:06 +00:00
|
|
|
|
2011-08-14 21:35:36 +00:00
|
|
|
fabric.Image.fromObject = function(object, callback) {
|
2011-11-28 04:57:28 +00:00
|
|
|
fabric.util.loadImage(object.src, function(img) {
|
|
|
|
|
var oImg = new fabric.Image(img);
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2011-08-14 21:35:36 +00:00
|
|
|
oImg._initConfig(object);
|
2011-10-29 18:36:09 +00:00
|
|
|
oImg._initFilters(object);
|
2011-08-14 21:35:36 +00:00
|
|
|
callback(oImg);
|
|
|
|
|
});
|
|
|
|
|
};
|
2011-08-11 19:20:06 +00:00
|
|
|
|
2012-07-19 09:43:46 +00:00
|
|
|
/**
|
|
|
|
|
* Only available when running fabric on node.js
|
|
|
|
|
* @method createCanvasForNode
|
|
|
|
|
* @param width Canvas width
|
|
|
|
|
* @param height Canvas height
|
|
|
|
|
* @return {Object} wrapped canvas instance
|
|
|
|
|
*/
|
2011-08-16 19:57:07 +00:00
|
|
|
fabric.createCanvasForNode = function(width, height) {
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2011-08-16 19:57:07 +00:00
|
|
|
var canvasEl = fabric.document.createElement('canvas'),
|
|
|
|
|
nodeCanvas = new Canvas(width || 600, height || 600);
|
2011-08-11 19:20:06 +00:00
|
|
|
|
2012-05-28 13:22:37 +00:00
|
|
|
// jsdom doesn't create style on canvas element, so here be temp. workaround
|
2011-08-14 21:35:36 +00:00
|
|
|
canvasEl.style = { };
|
|
|
|
|
|
|
|
|
|
canvasEl.width = nodeCanvas.width;
|
|
|
|
|
canvasEl.height = nodeCanvas.height;
|
|
|
|
|
|
2012-10-14 00:53:12 +00:00
|
|
|
var FabricCanvas = fabric.Canvas || fabric.StaticCanvas;
|
|
|
|
|
var fabricCanvas = new FabricCanvas(canvasEl);
|
2011-08-14 21:35:36 +00:00
|
|
|
fabricCanvas.contextContainer = nodeCanvas.getContext('2d');
|
2011-08-16 19:57:07 +00:00
|
|
|
fabricCanvas.nodeCanvas = nodeCanvas;
|
2011-08-11 19:20:06 +00:00
|
|
|
|
2011-08-14 21:35:36 +00:00
|
|
|
return fabricCanvas;
|
|
|
|
|
};
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2012-12-02 10:53:38 +00:00
|
|
|
/** @ignore */
|
2011-11-28 04:57:28 +00:00
|
|
|
fabric.StaticCanvas.prototype.createPNGStream = function() {
|
2011-08-16 19:57:07 +00:00
|
|
|
return this.nodeCanvas.createPNGStream();
|
|
|
|
|
};
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2011-11-28 04:57:28 +00:00
|
|
|
var origSetWidth = fabric.StaticCanvas.prototype.setWidth;
|
|
|
|
|
fabric.StaticCanvas.prototype.setWidth = function(width) {
|
2011-08-16 19:57:07 +00:00
|
|
|
origSetWidth.call(this);
|
|
|
|
|
this.nodeCanvas.width = width;
|
|
|
|
|
return this;
|
|
|
|
|
};
|
2011-11-28 04:57:28 +00:00
|
|
|
if (fabric.Canvas) {
|
|
|
|
|
fabric.Canvas.prototype.setWidth = fabric.StaticCanvas.prototype.setWidth;
|
|
|
|
|
}
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2011-11-28 04:57:28 +00:00
|
|
|
var origSetHeight = fabric.StaticCanvas.prototype.setHeight;
|
|
|
|
|
fabric.StaticCanvas.prototype.setHeight = function(height) {
|
2011-08-16 19:57:07 +00:00
|
|
|
origSetHeight.call(this);
|
|
|
|
|
this.nodeCanvas.height = height;
|
|
|
|
|
return this;
|
|
|
|
|
};
|
2011-11-28 04:57:28 +00:00
|
|
|
if (fabric.Canvas) {
|
|
|
|
|
fabric.Canvas.prototype.setHeight = fabric.StaticCanvas.prototype.setHeight;
|
|
|
|
|
}
|
2012-05-28 13:22:37 +00:00
|
|
|
|
2011-08-14 21:35:36 +00:00
|
|
|
})();
|