diff --git a/.travis.yml b/.travis.yml
index e86b540..b770aa9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,12 @@
language: node_js
sudo: false
node_js:
- - "0.10"
+ - "4"
+env:
+ - CXX=g++-4.8
+addons:
+ apt:
+ sources:
+ - ubuntu-toolchain-r-test
+ packages:
+ - g++-4.8
\ No newline at end of file
diff --git a/src/ReactART.js b/src/ReactART.js
index 7064e09..a60f621 100644
--- a/src/ReactART.js
+++ b/src/ReactART.js
@@ -11,10 +11,13 @@
"use strict";
-require('art/modes/fast'); // Flip this to DOM mode for debugging
+var defaultMode = 'fast';
+// set by ReactART.mode() or Surface.componentWillMount
+var Mode;
var Transform = require('art/core/transform');
-var Mode = require('art/modes/current');
+
+// var ReplayPath = require('./util/ReplayPath');
var React = require('react');
var ReactInstanceMap = require('react/lib/ReactInstanceMap');
@@ -24,7 +27,18 @@ var ReactUpdates = require('react/lib/ReactUpdates');
var assign = require('react/lib/Object.assign');
var emptyObject = require('fbjs/lib/emptyObject');
-var pooledTransform = new Transform();
+var pooledTransform;
+
+function setMode(mode) {
+ var mode = require('art/modes/'+mode);
+
+ Mode = require('art/modes/current');
+ // canvas mode does not explicitly set itself like the other modes
+ Mode.setCurrent(mode);
+
+ pooledTransform = new Transform();
+}
+
// Utilities
@@ -185,6 +199,12 @@ var Surface = React.createClass({
mixins: [ContainerMixin],
+ componentWillMount: function() {
+ if (!Mode){
+ setMode(defaultMode);
+ }
+ },
+
componentDidMount: function() {
this.node = Mode.Surface(+this.props.width, +this.props.height, this.domNode);
@@ -597,19 +617,25 @@ Pattern.prototype.applyFill = function(node) {
node.fillImage.apply(node, this.args);
};
-var ReactART = {
+function pathFactory(){
+ if(!Mode){
+ throw Error('Mode not set. Call ReactART.mode() before using Path');
+ }
+ return Mode.Path();
+}
+var ReactART = {
+ mode: setMode,
LinearGradient: LinearGradient,
RadialGradient: RadialGradient,
Pattern: Pattern,
Transform: Transform,
- Path: Mode.Path,
+ Path: pathFactory,
Surface: Surface,
Group: Group,
ClippingRectangle: ClippingRectangle,
Shape: Shape,
Text: Text
-
};
module.exports = ReactART;
diff --git a/src/__tests__/ReactART-test.js b/src/__tests__/ReactART-test.js
index 9901818..5c2576d 100644
--- a/src/__tests__/ReactART-test.js
+++ b/src/__tests__/ReactART-test.js
@@ -13,8 +13,7 @@
"use strict";
-require('mock-modules')
- .dontMock('ReactART');
+jest.dontMock('ReactART');
var React;
var ReactTestUtils;
@@ -55,10 +54,7 @@ describe('ReactART', function() {
ReactDOM = require('react-dom');
var ReactART = require('ReactART');
- var ARTSVGMode = require('art/modes/svg');
- var ARTCurrentMode = require('art/modes/current');
-
- ARTCurrentMode.setCurrent(ARTSVGMode);
+ ReactART.mode('svg');
Group = ReactART.Group;
Shape = ReactART.Shape;
@@ -118,23 +114,23 @@ describe('ReactART', function() {
instance = ReactTestUtils.renderIntoDocument(instance);
var expectedStructure = {
- nodeName: 'SVG',
+ nodeName: 'svg',
width: '150',
height: '200',
children: [
- { nodeName: 'DEFS' },
+ { nodeName: 'defs' },
{
- nodeName: 'G',
+ nodeName: 'g',
children: [
{
- nodeName: 'DEFS',
+ nodeName: 'defs',
children: [
- { nodeName: 'LINEARGRADIENT' }
+ { nodeName: 'linearGradient' }
]
},
- { nodeName: 'PATH' },
- { nodeName: 'PATH' },
- { nodeName: 'G' }
+ { nodeName: 'path' },
+ { nodeName: 'path' },
+ { nodeName: 'g' }
]
}
]
@@ -149,16 +145,16 @@ describe('ReactART', function() {
var instance = ReactDOM.render(, container);
var expectedStructure = {
- nodeName: 'SVG',
+ nodeName: 'svg',
children: [
- { nodeName: 'DEFS' },
+ { nodeName: 'defs' },
{
- nodeName: 'G',
+ nodeName: 'g',
children: [
- { nodeName: 'DEFS' },
- { nodeName: 'PATH', opacity: '0.1' },
- { nodeName: 'PATH', opacity: Missing },
- { nodeName: 'G' }
+ { nodeName: 'defs' },
+ { nodeName: 'path', opacity: '0.1' },
+ { nodeName: 'path', opacity: Missing },
+ { nodeName: 'g' }
]
}
]
@@ -170,16 +166,16 @@ describe('ReactART', function() {
ReactDOM.render(, container);
var expectedNewStructure = {
- nodeName: 'SVG',
+ nodeName: 'svg',
children: [
- { nodeName: 'DEFS' },
+ { nodeName: 'defs' },
{
- nodeName: 'G',
+ nodeName: 'g',
children: [
- { nodeName: 'DEFS' },
- { nodeName: 'PATH', opacity: Missing },
- { nodeName: 'PATH', opacity: '0.1' },
- { nodeName: 'G' }
+ { nodeName: 'defs' },
+ { nodeName: 'path', opacity: Missing },
+ { nodeName: 'path', opacity: '0.1' },
+ { nodeName: 'g' }
]
}
]
@@ -208,7 +204,7 @@ describe('ReactART', function() {
expect(mounted).toBe(true);
});
- it('resolves refs before componentDidMount', function() {
+ it('resolves refs bef ore componentDidMount', function() {
var CustomShape = React.createClass({
render: function() {
return ;