From 59d4458af796d3c4bb74c7536250adae0c105ccb Mon Sep 17 00:00:00 2001
From: Ilya Fadeev <fadeev.ilya@gmail.com>
Date: Thu, 5 May 2016 02:50:48 -0400
Subject: [PATCH 1/6] #23: Added axis-x-type to bit-c3 to config chart with
 axis; c3-data-column can accept axis-x for axis data

---
 src/chart.js                 | 27 ++++++++++++++++++++-------
 src/data/column/column.js    |  9 +++++++++
 src/data/column/viewmodel.js |  9 +++++++--
 3 files changed, 36 insertions(+), 9 deletions(-)

diff --git a/src/chart.js b/src/chart.js
index f9e0858f..366e9824 100644
--- a/src/chart.js
+++ b/src/chart.js
@@ -22,6 +22,8 @@ import ChartVM from './viewmodel';
  *
  * ```html
  * <bit-c3></bit-c3>
+ *
+ * <bit-c3 axis-x-type="category"></bit-c3>
  * ```
  */
 Component.extend({
@@ -31,14 +33,25 @@ Component.extend({
     events: {
         inserted: function(viewModel, ev) {
             var rootElement = ev.target,
-                graphBaseElement = d3.select(rootElement.getElementsByClassName('chart-container')[0]),
-                chart = c3.generate({
-                    bindto: graphBaseElement,
-                    data: {
-                        columns: []
+              graphBaseElement = d3.select(rootElement.getElementsByClassName('chart-container')[0]),
+              axisXType = this.viewModel.attr('axisXType'),
+              config = {
+                  bindto: graphBaseElement,
+                  data: {
+                      columns: []
+                  }
+              };
+
+            if (axisXType){
+                config.data.x = 'x';
+                config.axis = {
+                    x: {
+                        type: axisXType
                     }
-                });
-            this.viewModel.chart = chart;
+                }
+            }
+
+            this.viewModel.chart = c3.generate(config);
         },
         removed: function() {
             if (this.viewModel.chart){
diff --git a/src/data/column/column.js b/src/data/column/column.js
index abab4601..92ab7c2a 100644
--- a/src/data/column/column.js
+++ b/src/data/column/column.js
@@ -35,6 +35,15 @@ import canViewModel from 'can-view-model';
  *   </bit-c3-data>
  * </bit-c3>
  * ```
+ *
+ * With axis-x (`axis-x-type` must be defined fir `bit-c3`):
+ * ```html
+ * <bit-c3>
+ *   <bit-c3-data>
+ *     <bit-c3-data-column key="dataSet1" value="[1, 2, 3]" axis-x="['x','cat 1','cat 2','cat 3']" />
+ *   </bit-c3-data>
+ * </bit-c3>
+ * ```
  */
 Component.extend({
 	tag: "bit-c3-data-column",
diff --git a/src/data/column/viewmodel.js b/src/data/column/viewmodel.js
index c4f089f0..23fcb36a 100644
--- a/src/data/column/viewmodel.js
+++ b/src/data/column/viewmodel.js
@@ -24,10 +24,15 @@ export default DefineMap.extend({seal: false}, {
 		var value = this.dequeueKey(this.value),
 			key = this.key,
 			chart = this.chart,
-			pushing = [key].concat(value);
+			pushing = [key].concat(value),
+			columns = [pushing];
+
+		if (this.attr('axisX')){
+			columns.unshift(this.attr('axisX').attr());
+		}
 		if(value && value.length) {
 			chart.load({
-				columns: [pushing]
+				columns: columns
 			});
 		} else {
 			this.unloadColumn();

From 2ca1aa4889bd10504145a3a377bc1c4906c06c24 Mon Sep 17 00:00:00 2001
From: Ilya Fadeev <fadeev.ilya@gmail.com>
Date: Wed, 10 May 2017 17:29:10 -0400
Subject: [PATCH 2/6] added a test for main config

---
 examples/chart/bar-x-labels.html | 45 ++++++++++++++++++++++++++++++++
 src/chart.js                     | 22 +++-------------
 src/data/column/column.js        |  4 +--
 src/data/column/viewmodel.js     |  4 +--
 src/viewmodel.js                 | 34 +++++++++++++++++++++++-
 test/bit-c3_test.js              | 12 ++++++---
 6 files changed, 95 insertions(+), 26 deletions(-)
 create mode 100644 examples/chart/bar-x-labels.html

diff --git a/examples/chart/bar-x-labels.html b/examples/chart/bar-x-labels.html
new file mode 100644
index 00000000..9b27e87e
--- /dev/null
+++ b/examples/chart/bar-x-labels.html
@@ -0,0 +1,45 @@
+<html>
+  <head>
+    <title>Bar Chart</title>
+  </head>
+  <body>
+    <!-- Template to load -->
+    <script type="text/stache" id="demo-html" can-autorender>
+<can-import from="bit-c3" />
+<bit-c3 axis-x-type="category">
+  <bit-c3-data type="{type}">
+    {{#each dataColumns}}
+      <bit-c3-data-column value="{.}" {axis-x}="axisX" />
+    {{/each}}
+  </bit-c3-data>
+</bit-c3>
+    </script>
+
+<!-- TODO add support for 
+  <c3-bar width-ratio="0.5" width="100" />
+-->
+
+    <!-- Loading Script -->
+    <script src="../../node_modules/steal/steal.js" id="demo-source" main="can-view-autorender">
+import DefineList from "can-define/list/list";
+import DefineMap from "can-define/map/map";
+import canViewModel from "can-view-model";
+import domData from "can-util/dom/data/data";
+
+let data1 = new DefineList(['data1', 30, 200, 100, 400, 150, 250]),
+    data2 = new DefineList(['data2', 130, 100, 140, 200, 150, 50]),
+    type = 'bar',
+    axisX = new DefineList(['x','cat 1','cat 2','cat 3']);
+
+var element = document.getElementById("demo-html");
+var vm = new DefineMap({
+  dataColumns: new DefineList([data1, data2]),
+  type,
+  axisX
+});
+window.vm = vm;
+domData.set.call(element, "viewModel", vm);
+    </script>
+  </body>
+</html>
+  
diff --git a/src/chart.js b/src/chart.js
index 366e9824..51cfcf1e 100644
--- a/src/chart.js
+++ b/src/chart.js
@@ -32,29 +32,15 @@ Component.extend({
     viewModel: ChartVM,
     events: {
         inserted: function(viewModel, ev) {
-            var rootElement = ev.target,
-              graphBaseElement = d3.select(rootElement.getElementsByClassName('chart-container')[0]),
-              axisXType = this.viewModel.attr('axisXType'),
-              config = {
-                  bindto: graphBaseElement,
-                  data: {
-                      columns: []
-                  }
-              };
+            let rootElement = ev.target;
 
-            if (axisXType){
-                config.data.x = 'x';
-                config.axis = {
-                    x: {
-                        type: axisXType
-                    }
-                }
-            }
+            this.viewModel.graphBaseElement = d3.select(rootElement.getElementsByClassName('chart-container')[0]);
 
-            this.viewModel.chart = c3.generate(config);
+            this.viewModel.chart = c3.generate(this.viewModel.config);
         },
         removed: function() {
             if (this.viewModel.chart){
+                this.viewModel.graphBaseElement = undefined;
                 this.viewModel.chart = this.viewModel.chart.destroy();
             }
         }
diff --git a/src/data/column/column.js b/src/data/column/column.js
index 92ab7c2a..86688591 100644
--- a/src/data/column/column.js
+++ b/src/data/column/column.js
@@ -36,9 +36,9 @@ import canViewModel from 'can-view-model';
  * </bit-c3>
  * ```
  *
- * With axis-x (`axis-x-type` must be defined fir `bit-c3`):
+ * With axis-x (`axis-x-type` must be defined for `bit-c3`):
  * ```html
- * <bit-c3>
+ * <bit-c3 axis-x-type="category">
  *   <bit-c3-data>
  *     <bit-c3-data-column key="dataSet1" value="[1, 2, 3]" axis-x="['x','cat 1','cat 2','cat 3']" />
  *   </bit-c3-data>
diff --git a/src/data/column/viewmodel.js b/src/data/column/viewmodel.js
index 23fcb36a..07d4ce4d 100644
--- a/src/data/column/viewmodel.js
+++ b/src/data/column/viewmodel.js
@@ -27,8 +27,8 @@ export default DefineMap.extend({seal: false}, {
 			pushing = [key].concat(value),
 			columns = [pushing];
 
-		if (this.attr('axisX')){
-			columns.unshift(this.attr('axisX').attr());
+		if (this.axisX){
+			columns.unshift(this.axisX.get());
 		}
 		if(value && value.length) {
 			chart.load({
diff --git a/src/viewmodel.js b/src/viewmodel.js
index 479efa65..90470972 100644
--- a/src/viewmodel.js
+++ b/src/viewmodel.js
@@ -3,5 +3,37 @@ import DefineMap from "can-define/map/map";
 export default DefineMap.extend({
 	chart: {
 		value: null
-  }
+	},
+	/**
+	 * Dom element that chart will be bound to.
+	 */
+	graphBaseElement: {
+		type: '*'
+	},
+	/**
+	 * Config param for x-axis type.
+	 */
+	axisXType: 'string',
+	/**
+	 * Config object that c3 chart will be generated with.
+	 */
+	config: {
+		get () {
+			let config = {
+				bindto: this.graphBaseElement,
+				data: {
+					columns: []
+				}
+			};
+			if (this.axisXType){
+				config.data.x = 'x';
+				config.axis = {
+					x: {
+						type: this.axisXType
+					}
+				}
+			}
+			return config;
+		}
+	}
 });
\ No newline at end of file
diff --git a/test/bit-c3_test.js b/test/bit-c3_test.js
index 2d0bbcb1..cc7ae49b 100644
--- a/test/bit-c3_test.js
+++ b/test/bit-c3_test.js
@@ -12,6 +12,7 @@ import {randomString} from "bit-c3/lib/";
 import DefineList from "can-define/list/list";
 import DefineMap from "can-define/map/map";
 import stache from "can-stache";
+import canViewModel from "can-view-model";
 
 F.attach(QUnit);
 
@@ -23,9 +24,14 @@ var flattenCanList = function(list) {
 	return flatList;
 }
 
-QUnit.module('bit-c3');
+QUnit.module('bit-c3 config');
 
-// no tests currently
+test('Should configure x-axis', 1, (assert) => {
+	let tpl = '<bit-c3 axis-x-type="category"><bit-c3-data><bit-c3-data-column /></bit-c3-data></bit-c3>';
+	let frag = stache(tpl)({});
+	let vm = canViewModel(frag.querySelector('bit-c3'));
+	assert.deepEqual(vm.config, {data:{columns:[],x:'x'},axis:{x:{type:'category'}},bindto:undefined}, 'Config object is defined correctly');
+});
 
 QUnit.module('bit-c3-data');
 
@@ -300,4 +306,4 @@ test('Should remove chart from DOM correctly', 1, (assert) => {
 
 	// The test will fail if removing the chart from DOM causes a JS exception.
 	assert.ok(true, 'Chart was correctly removed');
-});
\ No newline at end of file
+});

From b9b3a13978b64d445ad7937ac9f7b82ba1e5481d Mon Sep 17 00:00:00 2001
From: Ilya Fadeev <fadeev.ilya@gmail.com>
Date: Wed, 10 May 2017 19:29:13 -0400
Subject: [PATCH 3/6] added option to provide full axis-x config

---
 examples/chart/bar-x-labels-rotated.html | 56 ++++++++++++++++++++++++
 src/viewmodel.js                         | 12 +++++
 test/bit-c3_test.js                      | 28 +++++++++++-
 3 files changed, 95 insertions(+), 1 deletion(-)
 create mode 100644 examples/chart/bar-x-labels-rotated.html

diff --git a/examples/chart/bar-x-labels-rotated.html b/examples/chart/bar-x-labels-rotated.html
new file mode 100644
index 00000000..0642c2e9
--- /dev/null
+++ b/examples/chart/bar-x-labels-rotated.html
@@ -0,0 +1,56 @@
+<html>
+  <head>
+    <title>Bar Chart</title>
+  </head>
+  <body>
+    <!-- Template to load -->
+    <script type="text/stache" id="demo-html" can-autorender>
+<can-import from="bit-c3" />
+<bit-c3 {axis-x}="axisX">
+  <bit-c3-data type="{type}">
+    {{#each dataColumns}}
+      <bit-c3-data-column value="{.}" {axis-x}="axisXData" />
+    {{/each}}
+  </bit-c3-data>
+</bit-c3>
+    </script>
+
+<!-- TODO add support for 
+  <c3-bar width-ratio="0.5" width="100" />
+-->
+
+    <!-- Loading Script -->
+    <script src="../../node_modules/steal/steal.js" id="demo-source" main="can-view-autorender">
+import DefineList from "can-define/list/list";
+import DefineMap from "can-define/map/map";
+import canViewModel from "can-view-model";
+import domData from "can-util/dom/data/data";
+
+let data1 = new DefineList(['data1', 30, 200, 100, 400, 150, 250]),
+    data2 = new DefineList(['data2', 130, 100, 140, 200, 150, 50]),
+    type = 'bar',
+    axisX = {
+      type: 'category',
+      tick: {
+        rotate: -45,
+        multiline: false
+      },
+      height: 130
+    },
+    axisXData = new DefineList(['x','cat 1','cat 2','cat 3','cat 4','cat 5','cat 6']);
+
+var element = document.getElementById("demo-html");
+var vm = new (DefineMap.extend({seal: false}, {
+    axisX: {type: '*'}
+  }))({
+    dataColumns: new DefineList([data1, data2]),
+    type,
+    axisX,
+    axisXData
+  });
+window.vm = vm;
+domData.set.call(element, "viewModel", vm);
+    </script>
+  </body>
+</html>
+  
diff --git a/src/viewmodel.js b/src/viewmodel.js
index 90470972..5c9eb6c5 100644
--- a/src/viewmodel.js
+++ b/src/viewmodel.js
@@ -14,6 +14,12 @@ export default DefineMap.extend({
 	 * Config param for x-axis type.
 	 */
 	axisXType: 'string',
+	/**
+	 * Full config for x-axis.
+	 */
+	axisX: {
+		type: '*'
+	},
 	/**
 	 * Config object that c3 chart will be generated with.
 	 */
@@ -33,6 +39,12 @@ export default DefineMap.extend({
 					}
 				}
 			}
+			if (this.axisX) {
+				config.data.x = 'x';
+				config.axis = {
+					x: this.axisX
+				};
+			}
 			return config;
 		}
 	}
diff --git a/test/bit-c3_test.js b/test/bit-c3_test.js
index cc7ae49b..41ce7536 100644
--- a/test/bit-c3_test.js
+++ b/test/bit-c3_test.js
@@ -26,13 +26,39 @@ var flattenCanList = function(list) {
 
 QUnit.module('bit-c3 config');
 
-test('Should configure x-axis', 1, (assert) => {
+test('Should configure x-axis using type', 1, (assert) => {
 	let tpl = '<bit-c3 axis-x-type="category"><bit-c3-data><bit-c3-data-column /></bit-c3-data></bit-c3>';
 	let frag = stache(tpl)({});
 	let vm = canViewModel(frag.querySelector('bit-c3'));
 	assert.deepEqual(vm.config, {data:{columns:[],x:'x'},axis:{x:{type:'category'}},bindto:undefined}, 'Config object is defined correctly');
 });
 
+test('Should configure x-axis using full config', 1, (assert) => {
+	let tpl = '<bit-c3 {axis-x}="axisX"><bit-c3-data><bit-c3-data-column /></bit-c3-data></bit-c3>';
+	let frag = stache(tpl)({
+		axisX: {
+			type: 'category',
+			tick: {
+				rotate: -45,
+				multiline: false
+			},
+			height: 130
+		}
+	});
+	let vm = canViewModel(frag.querySelector('bit-c3'));
+	assert.deepEqual(vm.config, {
+		data: { columns:[], x:'x' },
+		axis: {
+			x: {
+				type:'category',
+				tick: { rotate: -45, multiline: false },
+				height: 130
+			}
+		},
+		bindto: undefined
+	}, 'Config object is defined correctly');
+});
+
 QUnit.module('bit-c3-data');
 
 test('loadAttributeOnChart and loadAllAttributesOnChart', 20, () => {

From 8d65f921b381a15181b1bb703bac8168ebc44002 Mon Sep 17 00:00:00 2001
From: Ilya Fadeev <fadeev.ilya@gmail.com>
Date: Wed, 10 May 2017 19:55:38 -0400
Subject: [PATCH 4/6] allow full config for axis

---
 examples/chart/bar-x-labels-rotated.html | 76 ++++++++++++------------
 src/viewmodel.js                         | 18 +++---
 test/bit-c3_test.js                      | 20 ++++---
 3 files changed, 58 insertions(+), 56 deletions(-)

diff --git a/examples/chart/bar-x-labels-rotated.html b/examples/chart/bar-x-labels-rotated.html
index 0642c2e9..5fabb0a2 100644
--- a/examples/chart/bar-x-labels-rotated.html
+++ b/examples/chart/bar-x-labels-rotated.html
@@ -1,56 +1,58 @@
 <html>
-  <head>
-    <title>Bar Chart</title>
-  </head>
-  <body>
-    <!-- Template to load -->
-    <script type="text/stache" id="demo-html" can-autorender>
+	<head>
+		<title>Bar Chart</title>
+	</head>
+	<body>
+		<!-- Template to load -->
+		<script type="text/stache" id="demo-html" can-autorender>
 <can-import from="bit-c3" />
-<bit-c3 {axis-x}="axisX">
-  <bit-c3-data type="{type}">
-    {{#each dataColumns}}
-      <bit-c3-data-column value="{.}" {axis-x}="axisXData" />
-    {{/each}}
-  </bit-c3-data>
+<bit-c3 {axis}="axisConfig">
+	<bit-c3-data type="{type}">
+		{{#each dataColumns}}
+			<bit-c3-data-column value="{.}" {axis-x}="axisXData" />
+		{{/each}}
+	</bit-c3-data>
 </bit-c3>
-    </script>
+		</script>
 
 <!-- TODO add support for 
-  <c3-bar width-ratio="0.5" width="100" />
+	<c3-bar width-ratio="0.5" width="100" />
 -->
 
-    <!-- Loading Script -->
-    <script src="../../node_modules/steal/steal.js" id="demo-source" main="can-view-autorender">
+		<!-- Loading Script -->
+		<script src="../../node_modules/steal/steal.js" id="demo-source" main="can-view-autorender">
 import DefineList from "can-define/list/list";
 import DefineMap from "can-define/map/map";
 import canViewModel from "can-view-model";
 import domData from "can-util/dom/data/data";
 
 let data1 = new DefineList(['data1', 30, 200, 100, 400, 150, 250]),
-    data2 = new DefineList(['data2', 130, 100, 140, 200, 150, 50]),
-    type = 'bar',
-    axisX = {
-      type: 'category',
-      tick: {
-        rotate: -45,
-        multiline: false
-      },
-      height: 130
-    },
-    axisXData = new DefineList(['x','cat 1','cat 2','cat 3','cat 4','cat 5','cat 6']);
+		data2 = new DefineList(['data2', 130, 100, 140, 200, 150, 50]),
+		type = 'bar',
+		axisConfig = {
+			x: {
+				type: 'category',
+				tick: {
+					rotate: -45,
+					multiline: false
+				},
+				height: 130
+			}
+		},
+		axisXData = new DefineList(['x','cat 1','cat 2','cat 3','cat 4','cat 5','cat 6']);
 
 var element = document.getElementById("demo-html");
 var vm = new (DefineMap.extend({seal: false}, {
-    axisX: {type: '*'}
-  }))({
-    dataColumns: new DefineList([data1, data2]),
-    type,
-    axisX,
-    axisXData
-  });
+		axisX: {type: '*'}
+	}))({
+		dataColumns: new DefineList([data1, data2]),
+		type,
+	  axisConfig,
+		axisXData
+	});
 window.vm = vm;
 domData.set.call(element, "viewModel", vm);
-    </script>
-  </body>
+		</script>
+	</body>
 </html>
-  
+	
diff --git a/src/viewmodel.js b/src/viewmodel.js
index 5c9eb6c5..7db80778 100644
--- a/src/viewmodel.js
+++ b/src/viewmodel.js
@@ -11,15 +11,15 @@ export default DefineMap.extend({
 		type: '*'
 	},
 	/**
-	 * Config param for x-axis type.
+	 * Full config for axis.
 	 */
-	axisXType: 'string',
-	/**
-	 * Full config for x-axis.
-	 */
-	axisX: {
+	axis: {
 		type: '*'
 	},
+	/**
+	 * Config param for x-axis type.
+	 */
+	axisXType: 'string',
 	/**
 	 * Config object that c3 chart will be generated with.
 	 */
@@ -39,11 +39,9 @@ export default DefineMap.extend({
 					}
 				}
 			}
-			if (this.axisX) {
+			if (this.axis) {
 				config.data.x = 'x';
-				config.axis = {
-					x: this.axisX
-				};
+				config.axis = this.axis;
 			}
 			return config;
 		}
diff --git a/test/bit-c3_test.js b/test/bit-c3_test.js
index 41ce7536..807aea5d 100644
--- a/test/bit-c3_test.js
+++ b/test/bit-c3_test.js
@@ -33,16 +33,18 @@ test('Should configure x-axis using type', 1, (assert) => {
 	assert.deepEqual(vm.config, {data:{columns:[],x:'x'},axis:{x:{type:'category'}},bindto:undefined}, 'Config object is defined correctly');
 });
 
-test('Should configure x-axis using full config', 1, (assert) => {
-	let tpl = '<bit-c3 {axis-x}="axisX"><bit-c3-data><bit-c3-data-column /></bit-c3-data></bit-c3>';
+test('Should configure axis using full config', 1, (assert) => {
+	let tpl = '<bit-c3 {axis}="axis"><bit-c3-data><bit-c3-data-column /></bit-c3-data></bit-c3>';
 	let frag = stache(tpl)({
-		axisX: {
-			type: 'category',
-			tick: {
-				rotate: -45,
-				multiline: false
-			},
-			height: 130
+		axis: {
+			x: {
+				type: 'category',
+				tick: {
+					rotate: -45,
+					multiline: false
+				},
+				height: 130
+			}
 		}
 	});
 	let vm = canViewModel(frag.querySelector('bit-c3'));

From 32e74b9d8fa4359e958043bc13eb8dc4aa0ccda9 Mon Sep 17 00:00:00 2001
From: Ilya Fadeev <fadeev.ilya@gmail.com>
Date: Thu, 11 May 2017 01:36:09 -0400
Subject: [PATCH 5/6] Allow full configuration for the chart

---
 examples/chart/bar-x-labels-rotated.html | 37 +++++++++++-------------
 examples/chart/bar-x-labels.html         | 17 +++++------
 src/data/column/column.js                |  9 ++++--
 src/viewmodel.js                         | 33 +++++----------------
 test/bit-c3_test.js                      | 28 +++++++-----------
 5 files changed, 49 insertions(+), 75 deletions(-)

diff --git a/examples/chart/bar-x-labels-rotated.html b/examples/chart/bar-x-labels-rotated.html
index 5fabb0a2..e4be15e5 100644
--- a/examples/chart/bar-x-labels-rotated.html
+++ b/examples/chart/bar-x-labels-rotated.html
@@ -6,7 +6,7 @@
 		<!-- Template to load -->
 		<script type="text/stache" id="demo-html" can-autorender>
 <can-import from="bit-c3" />
-<bit-c3 {axis}="axisConfig">
+<bit-c3 {config}="config">
 	<bit-c3-data type="{type}">
 		{{#each dataColumns}}
 			<bit-c3-data-column value="{.}" {axis-x}="axisXData" />
@@ -24,34 +24,31 @@
 import DefineList from "can-define/list/list";
 import DefineMap from "can-define/map/map";
 import canViewModel from "can-view-model";
-import domData from "can-util/dom/data/data";
 
 let data1 = new DefineList(['data1', 30, 200, 100, 400, 150, 250]),
 		data2 = new DefineList(['data2', 130, 100, 140, 200, 150, 50]),
 		type = 'bar',
-		axisConfig = {
-			x: {
-				type: 'category',
-				tick: {
-					rotate: -45,
-					multiline: false
-				},
-				height: 130
+		config = {
+			axis: {
+				x: {
+					type: 'category',
+					tick: {
+						rotate: -45,
+						multiline: false
+					},
+					height: 130
+				}
 			}
 		},
 		axisXData = new DefineList(['x','cat 1','cat 2','cat 3','cat 4','cat 5','cat 6']);
 
 var element = document.getElementById("demo-html");
-var vm = new (DefineMap.extend({seal: false}, {
-		axisX: {type: '*'}
-	}))({
-		dataColumns: new DefineList([data1, data2]),
-		type,
-	  axisConfig,
-		axisXData
-	});
-window.vm = vm;
-domData.set.call(element, "viewModel", vm);
+canViewModel(element).set({
+	dataColumns: new DefineList([data1, data2]),
+	type,
+	config,
+	axisXData
+});
 		</script>
 	</body>
 </html>
diff --git a/examples/chart/bar-x-labels.html b/examples/chart/bar-x-labels.html
index 9b27e87e..5076c348 100644
--- a/examples/chart/bar-x-labels.html
+++ b/examples/chart/bar-x-labels.html
@@ -6,7 +6,7 @@
     <!-- Template to load -->
     <script type="text/stache" id="demo-html" can-autorender>
 <can-import from="bit-c3" />
-<bit-c3 axis-x-type="category">
+<bit-c3 {config}="config">
   <bit-c3-data type="{type}">
     {{#each dataColumns}}
       <bit-c3-data-column value="{.}" {axis-x}="axisX" />
@@ -24,21 +24,20 @@
 import DefineList from "can-define/list/list";
 import DefineMap from "can-define/map/map";
 import canViewModel from "can-view-model";
-import domData from "can-util/dom/data/data";
 
 let data1 = new DefineList(['data1', 30, 200, 100, 400, 150, 250]),
     data2 = new DefineList(['data2', 130, 100, 140, 200, 150, 50]),
     type = 'bar',
+    config = { axis: { x: { type: 'category' } } },
     axisX = new DefineList(['x','cat 1','cat 2','cat 3']);
 
-var element = document.getElementById("demo-html");
-var vm = new DefineMap({
-  dataColumns: new DefineList([data1, data2]),
-  type,
-  axisX
+let element = document.getElementById("demo-html");
+canViewModel(element).set({
+	dataColumns: new DefineList([data1, data2]),
+	type,
+	axisX,
+	config
 });
-window.vm = vm;
-domData.set.call(element, "viewModel", vm);
     </script>
   </body>
 </html>
diff --git a/src/data/column/column.js b/src/data/column/column.js
index 86688591..f8c70c0b 100644
--- a/src/data/column/column.js
+++ b/src/data/column/column.js
@@ -36,9 +36,14 @@ import canViewModel from 'can-view-model';
  * </bit-c3>
  * ```
  *
- * With axis-x (`axis-x-type` must be defined for `bit-c3`):
+ * With config:
+ * ```js
+ * let vm = {
+ *   config: {axis: {x: {type: 'category'}}}
+ * }
+ * ```
  * ```html
- * <bit-c3 axis-x-type="category">
+ * <bit-c3 {config}="config">
  *   <bit-c3-data>
  *     <bit-c3-data-column key="dataSet1" value="[1, 2, 3]" axis-x="['x','cat 1','cat 2','cat 3']" />
  *   </bit-c3-data>
diff --git a/src/viewmodel.js b/src/viewmodel.js
index 7db80778..5ba7d3f7 100644
--- a/src/viewmodel.js
+++ b/src/viewmodel.js
@@ -10,38 +10,19 @@ export default DefineMap.extend({
 	graphBaseElement: {
 		type: '*'
 	},
-	/**
-	 * Full config for axis.
-	 */
-	axis: {
-		type: '*'
-	},
-	/**
-	 * Config param for x-axis type.
-	 */
-	axisXType: 'string',
 	/**
 	 * Config object that c3 chart will be generated with.
 	 */
 	config: {
-		get () {
-			let config = {
-				bindto: this.graphBaseElement,
-				data: {
-					columns: []
-				}
+		type: '*',
+		get (val = {}) {
+			let config = val;
+			config.bindto = this.graphBaseElement;
+			config.data = {
+				columns: []
 			};
-			if (this.axisXType){
-				config.data.x = 'x';
-				config.axis = {
-					x: {
-						type: this.axisXType
-					}
-				}
-			}
-			if (this.axis) {
+			if (val.axis && val.axis.x) {
 				config.data.x = 'x';
-				config.axis = this.axis;
 			}
 			return config;
 		}
diff --git a/test/bit-c3_test.js b/test/bit-c3_test.js
index 807aea5d..7b42ec88 100644
--- a/test/bit-c3_test.js
+++ b/test/bit-c3_test.js
@@ -24,26 +24,18 @@ var flattenCanList = function(list) {
 	return flatList;
 }
 
-QUnit.module('bit-c3 config');
+QUnit.module('bit-c3');
 
-test('Should configure x-axis using type', 1, (assert) => {
-	let tpl = '<bit-c3 axis-x-type="category"><bit-c3-data><bit-c3-data-column /></bit-c3-data></bit-c3>';
-	let frag = stache(tpl)({});
-	let vm = canViewModel(frag.querySelector('bit-c3'));
-	assert.deepEqual(vm.config, {data:{columns:[],x:'x'},axis:{x:{type:'category'}},bindto:undefined}, 'Config object is defined correctly');
-});
-
-test('Should configure axis using full config', 1, (assert) => {
-	let tpl = '<bit-c3 {axis}="axis"><bit-c3-data><bit-c3-data-column /></bit-c3-data></bit-c3>';
+test('Should configure chart using a passed config', 1, (assert) => {
+	let tpl = '<bit-c3 {config}="config"><bit-c3-data><bit-c3-data-column /></bit-c3-data></bit-c3>';
 	let frag = stache(tpl)({
-		axis: {
-			x: {
-				type: 'category',
-				tick: {
-					rotate: -45,
-					multiline: false
-				},
-				height: 130
+		config: {
+			axis: {
+				x: {
+					type: 'category',
+					tick: { rotate: -45, multiline: false },
+					height: 130
+				}
 			}
 		}
 	});

From e279496812346ed1fb3dde061b4c28d7997c05eb Mon Sep 17 00:00:00 2001
From: Ilya Fadeev <fadeev.ilya@gmail.com>
Date: Thu, 11 May 2017 01:45:01 -0400
Subject: [PATCH 6/6] reformatting demo

---
 examples/chart/bar-x-labels-rotated.html | 74 ++++++++++++------------
 examples/chart/bar-x-labels.html         |  8 +--
 2 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/examples/chart/bar-x-labels-rotated.html b/examples/chart/bar-x-labels-rotated.html
index e4be15e5..4e328e67 100644
--- a/examples/chart/bar-x-labels-rotated.html
+++ b/examples/chart/bar-x-labels-rotated.html
@@ -1,55 +1,55 @@
 <html>
-	<head>
-		<title>Bar Chart</title>
-	</head>
-	<body>
-		<!-- Template to load -->
-		<script type="text/stache" id="demo-html" can-autorender>
+  <head>
+    <title>Bar Chart</title>
+  </head>
+  <body>
+    <!-- Template to load -->
+    <script type="text/stache" id="demo-html" can-autorender>
 <can-import from="bit-c3" />
 <bit-c3 {config}="config">
-	<bit-c3-data type="{type}">
-		{{#each dataColumns}}
-			<bit-c3-data-column value="{.}" {axis-x}="axisXData" />
-		{{/each}}
-	</bit-c3-data>
+  <bit-c3-data type="{type}">
+    {{#each dataColumns}}
+      <bit-c3-data-column value="{.}" {axis-x}="axisXData" />
+    {{/each}}
+  </bit-c3-data>
 </bit-c3>
-		</script>
+    </script>
 
 <!-- TODO add support for 
-	<c3-bar width-ratio="0.5" width="100" />
+  <c3-bar width-ratio="0.5" width="100" />
 -->
 
-		<!-- Loading Script -->
-		<script src="../../node_modules/steal/steal.js" id="demo-source" main="can-view-autorender">
+    <!-- Loading Script -->
+    <script src="../../node_modules/steal/steal.js" id="demo-source" main="can-view-autorender">
 import DefineList from "can-define/list/list";
 import DefineMap from "can-define/map/map";
 import canViewModel from "can-view-model";
 
 let data1 = new DefineList(['data1', 30, 200, 100, 400, 150, 250]),
-		data2 = new DefineList(['data2', 130, 100, 140, 200, 150, 50]),
-		type = 'bar',
-		config = {
-			axis: {
-				x: {
-					type: 'category',
-					tick: {
-						rotate: -45,
-						multiline: false
-					},
-					height: 130
-				}
-			}
-		},
-		axisXData = new DefineList(['x','cat 1','cat 2','cat 3','cat 4','cat 5','cat 6']);
+    data2 = new DefineList(['data2', 130, 100, 140, 200, 150, 50]),
+    type = 'bar',
+    config = {
+      axis: {
+        x: {
+          type: 'category',
+          tick: {
+            rotate: -45,
+            multiline: false
+          },
+          height: 130
+        }
+      }
+    },
+    axisXData = new DefineList(['x','cat 1','cat 2','cat 3','cat 4','cat 5','cat 6']);
 
 var element = document.getElementById("demo-html");
 canViewModel(element).set({
-	dataColumns: new DefineList([data1, data2]),
-	type,
-	config,
-	axisXData
+  dataColumns: new DefineList([data1, data2]),
+  type,
+  config,
+  axisXData
 });
-		</script>
-	</body>
+    </script>
+  </body>
 </html>
-	
+  
diff --git a/examples/chart/bar-x-labels.html b/examples/chart/bar-x-labels.html
index 5076c348..fee1481c 100644
--- a/examples/chart/bar-x-labels.html
+++ b/examples/chart/bar-x-labels.html
@@ -33,10 +33,10 @@
 
 let element = document.getElementById("demo-html");
 canViewModel(element).set({
-	dataColumns: new DefineList([data1, data2]),
-	type,
-	axisX,
-	config
+  dataColumns: new DefineList([data1, data2]),
+  type,
+  axisX,
+  config
 });
     </script>
   </body>