diff --git a/dist/index.es6.js b/dist/index.es6.js
index b70a657..77f626b 100644
--- a/dist/index.es6.js
+++ b/dist/index.es6.js
@@ -56,10 +56,10 @@ var mapObject = function (obj, fn) { return Object.keys(obj).map(
{}
); };
-var deepifyKeys = function (obj) { return mapObject(obj,
+var deepifyKeys = function (obj, modules) { return mapObject(obj,
function (key, val) {
var dashIndex = key.indexOf('-');
- if (dashIndex > -1) {
+ if (dashIndex > -1 && modules[key.slice(0, dashIndex)] !== undefined) {
var moduleData = {};
moduleData[key.slice(dashIndex + 1)] = val;
return ( obj = {}, obj[key.slice(0, dashIndex)] = moduleData, obj )
@@ -70,14 +70,7 @@ var deepifyKeys = function (obj) { return mapObject(obj,
}
); };
-var flatifyKeys = function (obj) { return mapObject(obj,
- function (mod, data) { return !object(data) ? (( obj = {}, obj[mod] = data, obj )) : mapObject(
- flatifyKeys(data),
- function (key, val) { return (( obj = {}, obj[(mod + "-" + key)] = val, obj ))
- var obj; }
- )
- var obj; }
-); };
+
var omit = function (key, obj) { return mapObject(obj,
function (mod, data) { return mod !== key ? (( obj = {}, obj[mod] = data, obj )) : {}
@@ -107,42 +100,43 @@ var considerSvg = function (vnode$$1) { return !svg(vnode$$1) ? vnode$$1 :
}
); };
-var considerData = function (data) {
- return !data.data ? data : mapObject(data, function (mod, data) {
- var key = mod === 'data' ? 'dataset' : mod;
- return (( obj = {}, obj[key] = data, obj ))
- var obj;
- })
+var rewrites = {
+ for: 'attrs',
+ role: 'attrs',
+ tabindex: 'attrs',
+ 'aria-*': 'attrs',
+ key: null
};
-var considerAria = function (data) { return data.attrs || data.aria ? omit('aria',
- assign(data, {
- attrs: extend(data.attrs, data.aria ? flatifyKeys({ aria: data.aria }) : {})
- })
-) : data; };
-
-var considerProps = function (data) { return mapObject(data,
- function (key, val) { return object(val) ? ( obj = {}, obj[key] = val, obj ) :
- { props: ( obj$1 = {}, obj$1[key] = val, obj$1 ) }
+var rewriteModules = function (data, modules) { return mapObject(data, function (key, val) {
+ var inner = {};
+ inner[key] = val;
+ if (rewrites[key] && modules[rewrites[key]] !== undefined) {
+ return ( obj = {}, obj[rewrites[key]] = inner, obj )
var obj;
- var obj$1; }
-); };
-
-var rewritesMap = { for: 1, role: 1, tabindex: 1 };
-
-var considerAttrs = function (data) { return mapObject(data,
- function (key, data) { return !(key in rewritesMap) ? ( obj = {}, obj[key] = data, obj ) : {
- attrs: extend(data.attrs, ( obj$1 = {}, obj$1[key] = data, obj$1 ))
+ }
+ if (rewrites[key] === null) {
+ return {}
+ }
+ var keys = Object.keys(rewrites);
+ for (var i = 0; i < keys.length; i++) {
+ var k = keys[i];
+ if (k.charAt(k.length - 1) === '*' && key.indexOf(k.slice(0, -1)) === 0 && modules[rewrites[k]] !== undefined) {
+ return ( obj$1 = {}, obj$1[rewrites[k]] = inner, obj$1 )
+ var obj$1;
}
- var obj;
- var obj$1; }
-); };
-
-var considerKey = function (data) {
- return 'key' in data ? omit('key', data) : data
-};
+ }
+ if (modules[key] !== undefined) {
+ return ( obj$2 = {}, obj$2[modules[key] ? modules[key] : key] = val, obj$2 )
+ var obj$2;
+ }
+ if (modules.props !== undefined) {
+ return { props: inner }
+ }
+ return inner
+}); };
-var sanitizeData = function (data) { return considerProps(considerAria(considerData(considerAttrs(considerKey(deepifyKeys(data)))))); };
+var sanitizeData = function (data, modules) { return considerSvg(rewriteModules(deepifyKeys(data, modules), modules)); };
var sanitizeText = function (children) { return children.length > 1 || !text(children[0]) ? undefined : children[0]; };
@@ -153,26 +147,41 @@ var sanitizeChildren = function (children) { return reduceDeep(children, functio
}
, []); };
-var createElement = function (sel, data) {
- var children = [], len = arguments.length - 2;
- while ( len-- > 0 ) children[ len ] = arguments[ len + 2 ];
+var defaultModules = {
+ attrs: '',
+ props: '',
+ class: '',
+ data: 'dataset',
+ style: '',
+ hook: '',
+ on: ''
+};
+
+var createElementWithModules = function (modules) {
+ return function (sel, data) {
+ var children = [], len = arguments.length - 2;
+ while ( len-- > 0 ) children[ len ] = arguments[ len + 2 ];
- if (fun(sel)) {
- return sel(data || {}, children)
+ if (fun(sel)) {
+ return sel(data || {}, children)
+ }
+ var text$$1 = sanitizeText(children, modules);
+ return considerSvg({
+ sel: sel,
+ data: data ? sanitizeData(data, modules) : {},
+ children: text$$1 ? undefined : sanitizeChildren(children),
+ text: text$$1,
+ elm: undefined,
+ key: data ? data.key : undefined
+ })
}
- var text$$1 = sanitizeText(children);
- return considerSvg({
- sel: sel,
- data: data ? sanitizeData(data) : {},
- children: text$$1 ? undefined : sanitizeChildren(children),
- text: text$$1,
- elm: undefined,
- key: data ? data.key : undefined
- })
};
+var createElement = createElementWithModules(defaultModules);
+
var index = {
- createElement: createElement
+ createElement: createElement,
+ createElementWithModules: createElementWithModules
};
-export { createElement };export default index;
+export { createElementWithModules, createElement };export default index;
diff --git a/dist/index.js b/dist/index.js
index 993f053..db2b2ed 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -62,10 +62,10 @@ var mapObject = function (obj, fn) { return Object.keys(obj).map(
{}
); };
-var deepifyKeys = function (obj) { return mapObject(obj,
+var deepifyKeys = function (obj, modules) { return mapObject(obj,
function (key, val) {
var dashIndex = key.indexOf('-');
- if (dashIndex > -1) {
+ if (dashIndex > -1 && modules[key.slice(0, dashIndex)] !== undefined) {
var moduleData = {};
moduleData[key.slice(dashIndex + 1)] = val;
return ( obj = {}, obj[key.slice(0, dashIndex)] = moduleData, obj )
@@ -76,14 +76,7 @@ var deepifyKeys = function (obj) { return mapObject(obj,
}
); };
-var flatifyKeys = function (obj) { return mapObject(obj,
- function (mod, data) { return !object(data) ? (( obj = {}, obj[mod] = data, obj )) : mapObject(
- flatifyKeys(data),
- function (key, val) { return (( obj = {}, obj[(mod + "-" + key)] = val, obj ))
- var obj; }
- )
- var obj; }
-); };
+
var omit = function (key, obj) { return mapObject(obj,
function (mod, data) { return mod !== key ? (( obj = {}, obj[mod] = data, obj )) : {}
@@ -113,42 +106,43 @@ var considerSvg = function (vnode$$1) { return !svg(vnode$$1) ? vnode$$1 :
}
); };
-var considerData = function (data) {
- return !data.data ? data : mapObject(data, function (mod, data) {
- var key = mod === 'data' ? 'dataset' : mod;
- return (( obj = {}, obj[key] = data, obj ))
- var obj;
- })
+var rewrites = {
+ for: 'attrs',
+ role: 'attrs',
+ tabindex: 'attrs',
+ 'aria-*': 'attrs',
+ key: null
};
-var considerAria = function (data) { return data.attrs || data.aria ? omit('aria',
- assign(data, {
- attrs: extend(data.attrs, data.aria ? flatifyKeys({ aria: data.aria }) : {})
- })
-) : data; };
-
-var considerProps = function (data) { return mapObject(data,
- function (key, val) { return object(val) ? ( obj = {}, obj[key] = val, obj ) :
- { props: ( obj$1 = {}, obj$1[key] = val, obj$1 ) }
+var rewriteModules = function (data, modules) { return mapObject(data, function (key, val) {
+ var inner = {};
+ inner[key] = val;
+ if (rewrites[key] && modules[rewrites[key]] !== undefined) {
+ return ( obj = {}, obj[rewrites[key]] = inner, obj )
var obj;
- var obj$1; }
-); };
-
-var rewritesMap = { for: 1, role: 1, tabindex: 1 };
-
-var considerAttrs = function (data) { return mapObject(data,
- function (key, data) { return !(key in rewritesMap) ? ( obj = {}, obj[key] = data, obj ) : {
- attrs: extend(data.attrs, ( obj$1 = {}, obj$1[key] = data, obj$1 ))
+ }
+ if (rewrites[key] === null) {
+ return {}
+ }
+ var keys = Object.keys(rewrites);
+ for (var i = 0; i < keys.length; i++) {
+ var k = keys[i];
+ if (k.charAt(k.length - 1) === '*' && key.indexOf(k.slice(0, -1)) === 0 && modules[rewrites[k]] !== undefined) {
+ return ( obj$1 = {}, obj$1[rewrites[k]] = inner, obj$1 )
+ var obj$1;
}
- var obj;
- var obj$1; }
-); };
-
-var considerKey = function (data) {
- return 'key' in data ? omit('key', data) : data
-};
+ }
+ if (modules[key] !== undefined) {
+ return ( obj$2 = {}, obj$2[modules[key] ? modules[key] : key] = val, obj$2 )
+ var obj$2;
+ }
+ if (modules.props !== undefined) {
+ return { props: inner }
+ }
+ return inner
+}); };
-var sanitizeData = function (data) { return considerProps(considerAria(considerData(considerAttrs(considerKey(deepifyKeys(data)))))); };
+var sanitizeData = function (data, modules) { return considerSvg(rewriteModules(deepifyKeys(data, modules), modules)); };
var sanitizeText = function (children) { return children.length > 1 || !text(children[0]) ? undefined : children[0]; };
@@ -159,27 +153,43 @@ var sanitizeChildren = function (children) { return reduceDeep(children, functio
}
, []); };
-var createElement = function (sel, data) {
- var children = [], len = arguments.length - 2;
- while ( len-- > 0 ) children[ len ] = arguments[ len + 2 ];
+var defaultModules = {
+ attrs: '',
+ props: '',
+ class: '',
+ data: 'dataset',
+ style: '',
+ hook: '',
+ on: ''
+};
+
+var createElementWithModules = function (modules) {
+ return function (sel, data) {
+ var children = [], len = arguments.length - 2;
+ while ( len-- > 0 ) children[ len ] = arguments[ len + 2 ];
- if (fun(sel)) {
- return sel(data || {}, children)
+ if (fun(sel)) {
+ return sel(data || {}, children)
+ }
+ var text$$1 = sanitizeText(children, modules);
+ return considerSvg({
+ sel: sel,
+ data: data ? sanitizeData(data, modules) : {},
+ children: text$$1 ? undefined : sanitizeChildren(children),
+ text: text$$1,
+ elm: undefined,
+ key: data ? data.key : undefined
+ })
}
- var text$$1 = sanitizeText(children);
- return considerSvg({
- sel: sel,
- data: data ? sanitizeData(data) : {},
- children: text$$1 ? undefined : sanitizeChildren(children),
- text: text$$1,
- elm: undefined,
- key: data ? data.key : undefined
- })
};
+var createElement = createElementWithModules(defaultModules);
+
var index = {
- createElement: createElement
+ createElement: createElement,
+ createElementWithModules: createElementWithModules
};
+exports.createElementWithModules = createElementWithModules;
exports.createElement = createElement;
exports['default'] = index;
diff --git a/src/fn.js b/src/fn.js
index 02a4d78..bba2a50 100644
--- a/src/fn.js
+++ b/src/fn.js
@@ -27,10 +27,10 @@ export const mapObject = (obj, fn) => Object.keys(obj).map(
{}
)
-export const deepifyKeys = (obj) => mapObject(obj,
+export const deepifyKeys = (obj, modules) => mapObject(obj,
(key, val) => {
const dashIndex = key.indexOf('-')
- if (dashIndex > -1) {
+ if (dashIndex > -1 && modules[key.slice(0, dashIndex)] !== undefined) {
const moduleData = {
[key.slice(dashIndex + 1)]: val
}
diff --git a/src/index.js b/src/index.js
index 8010ccb..3c46dff 100644
--- a/src/index.js
+++ b/src/index.js
@@ -25,37 +25,39 @@ const considerSvg = (vnode) => !is.svg(vnode) ? vnode :
}
)
-const considerData = (data) => {
- return !data.data ? data : fn.mapObject(data, (mod, data) => {
- const key = mod === 'data' ? 'dataset' : mod
- return ({ [key]: data })
- })
+const rewrites = {
+ for: 'attrs',
+ role: 'attrs',
+ tabindex: 'attrs',
+ 'aria-*': 'attrs',
+ key: null
}
-const considerAria = (data) => data.attrs || data.aria ? fn.omit('aria',
- fn.assign(data, {
- attrs: fn.extend(data.attrs, data.aria ? fn.flatifyKeys({ aria: data.aria }) : {})
- })
-) : data
-
-const considerProps = (data) => fn.mapObject(data,
- (key, val) => is.object(val) ? { [key]: val } :
- { props: { [key]: val } }
-)
-
-const rewritesMap = { for: 1, role: 1, tabindex: 1 }
-
-const considerAttrs = (data) => fn.mapObject(data,
- (key, data) => !(key in rewritesMap) ? { [key]: data } : {
- attrs: fn.extend(data.attrs, { [key]: data })
+const rewriteModules = (data, modules) => fn.mapObject(data, (key, val) => {
+ const inner = { [key]: val }
+ if (rewrites[key] && modules[rewrites[key]] !== undefined) {
+ return { [rewrites[key]]: inner }
+ }
+ if (rewrites[key] === null) {
+ return {}
+ }
+ const keys = Object.keys(rewrites)
+ for (let i = 0; i < keys.length; i++) {
+ const k = keys[i]
+ if (k.charAt(k.length - 1) === '*' && key.indexOf(k.slice(0, -1)) === 0 && modules[rewrites[k]] !== undefined) {
+ return { [rewrites[k]]: inner }
}
-)
-
-const considerKey = (data) => {
- return 'key' in data ? fn.omit('key', data) : data
-}
+ }
+ if (modules[key] !== undefined) {
+ return { [modules[key] ? modules[key] : key]: val }
+ }
+ if (modules.props !== undefined) {
+ return { props: inner }
+ }
+ return inner
+})
-const sanitizeData = (data) => considerProps(considerAria(considerData(considerAttrs(considerKey(fn.deepifyKeys(data))))))
+const sanitizeData = (data, modules) => considerSvg(rewriteModules(fn.deepifyKeys(data, modules), modules))
const sanitizeText = (children) => children.length > 1 || !is.text(children[0]) ? undefined : children[0]
@@ -66,21 +68,36 @@ const sanitizeChildren = (children) => fn.reduceDeep(children, (acc, child) => {
}
, [])
-export const createElement = (sel, data, ...children) => {
- if (is.fun(sel)) {
- return sel(data || {}, children)
+const defaultModules = {
+ attrs: '',
+ props: '',
+ class: '',
+ data: 'dataset',
+ style: '',
+ hook: '',
+ on: ''
+}
+
+export const createElementWithModules = (modules) => {
+ return (sel, data, ...children) => {
+ if (is.fun(sel)) {
+ return sel(data || {}, children)
+ }
+ const text = sanitizeText(children, modules)
+ return considerSvg({
+ sel,
+ data: data ? sanitizeData(data, modules) : {},
+ children: text ? undefined : sanitizeChildren(children),
+ text,
+ elm: undefined,
+ key: data ? data.key : undefined
+ })
}
- const text = sanitizeText(children)
- return considerSvg({
- sel,
- data: data ? sanitizeData(data) : {},
- children: text ? undefined : sanitizeChildren(children),
- text,
- elm: undefined,
- key: data ? data.key : undefined
- })
}
+export const createElement = createElementWithModules(defaultModules)
+
export default {
- createElement
+ createElement,
+ createElementWithModules
}
diff --git a/test/jsx-custom-modules-specs/component-without-props/actual.js b/test/jsx-custom-modules-specs/component-without-props/actual.js
new file mode 100644
index 0000000..cf9218a
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component-without-props/actual.js
@@ -0,0 +1,9 @@
+
+import Snabbdom from '../../../src/index'
+
+export default () => {
+ const Component = ({ name }) => // eslint-disable-line no-unused-vars
+
Hello { name }
+
+ return
+}
diff --git a/test/jsx-custom-modules-specs/component-without-props/transform-babel.js b/test/jsx-custom-modules-specs/component-without-props/transform-babel.js
new file mode 100644
index 0000000..e6f354a
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component-without-props/transform-babel.js
@@ -0,0 +1,14 @@
+
+import Snabbdom from '../../../src/index';
+
+export default (() => {
+ const Component = ({ name }) => // eslint-disable-line no-unused-vars
+ Snabbdom.createElementWithModules({"attrs": "", "props": ""})(
+ 'div',
+ null,
+ 'Hello ',
+ name
+ );
+
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})(Component, null);
+});
diff --git a/test/jsx-custom-modules-specs/component-without-props/transform-buble.js b/test/jsx-custom-modules-specs/component-without-props/transform-buble.js
new file mode 100644
index 0000000..1a40720
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component-without-props/transform-buble.js
@@ -0,0 +1,9 @@
+
+import Snabbdom from '../../../src/index'
+
+export default () => {
+ var Component = ({ name }) => // eslint-disable-line no-unused-vars
+ Snabbdom.createElementWithModules({"attrs": "", "props": ""})( 'div', null, "Hello ", name )
+
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})( Component, null )
+}
diff --git a/test/jsx-custom-modules-specs/component-without-props/transform-traceur.js b/test/jsx-custom-modules-specs/component-without-props/transform-traceur.js
new file mode 100644
index 0000000..f2a4f08
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component-without-props/transform-traceur.js
@@ -0,0 +1,13 @@
+
+import Snabbdom from '../../../src/index';
+export default () => {
+ const Component = ({name}) => Snabbdom.createElementWithModules({
+ "attrs": "",
+ "props": ""
+ })("div", null, "Hello ", name);
+ return Snabbdom.createElementWithModules({
+ "attrs": "",
+ "props": ""
+ })(Component, null);
+};
+//# sourceURL=
diff --git a/test/jsx-custom-modules-specs/component-without-props/transform-typescript.js b/test/jsx-custom-modules-specs/component-without-props/transform-typescript.js
new file mode 100644
index 0000000..c9edb4b
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component-without-props/transform-typescript.js
@@ -0,0 +1,8 @@
+
+import Snabbdom from '../../../src/index';
+export default () => {
+ const Component = ({ name }) => Snabbdom.createElementWithModules({"attrs": "", "props": ""})("div", null,
+ "Hello ",
+ name);
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})(Component, null);
+};
diff --git a/test/jsx-custom-modules-specs/component/actual.js b/test/jsx-custom-modules-specs/component/actual.js
new file mode 100644
index 0000000..c15c62f
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component/actual.js
@@ -0,0 +1,9 @@
+
+import Snabbdom from '../../../src/index'
+
+export default () => {
+ const Component = ({ name }) => // eslint-disable-line no-unused-vars
+ Hello { name }
+
+ return
+}
diff --git a/test/jsx-custom-modules-specs/component/transform-babel.js b/test/jsx-custom-modules-specs/component/transform-babel.js
new file mode 100644
index 0000000..c423c6b
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component/transform-babel.js
@@ -0,0 +1,14 @@
+
+import Snabbdom from '../../../src/index';
+
+export default (() => {
+ const Component = ({ name }) => // eslint-disable-line no-unused-vars
+ Snabbdom.createElementWithModules({"attrs": "", "props": ""})(
+ "div",
+ null,
+ "Hello ",
+ name
+ );
+
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})(Component, { name: "world" });
+});
diff --git a/test/jsx-custom-modules-specs/component/transform-buble.js b/test/jsx-custom-modules-specs/component/transform-buble.js
new file mode 100644
index 0000000..3b1debe
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component/transform-buble.js
@@ -0,0 +1,9 @@
+
+import Snabbdom from '../../../src/index'
+
+export default () => {
+ var Component = ({ name }) => // eslint-disable-line no-unused-vars
+ Snabbdom.createElementWithModules({"attrs": "", "props": ""})( 'div', null, "Hello ", name )
+
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})( Component, { name: "world" })
+}
diff --git a/test/jsx-custom-modules-specs/component/transform-traceur.js b/test/jsx-custom-modules-specs/component/transform-traceur.js
new file mode 100644
index 0000000..1b2aeed
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component/transform-traceur.js
@@ -0,0 +1,13 @@
+
+import Snabbdom from '../../../src/index';
+export default () => {
+ const Component = ({name}) => Snabbdom.createElementWithModules({
+ "attrs": "",
+ "props": ""
+ })("div", null, "Hello ", name);
+ return Snabbdom.createElementWithModules({
+ "attrs": "",
+ "props": ""
+ })(Component, {name: "world"});
+};
+//# sourceURL=
diff --git a/test/jsx-custom-modules-specs/component/transform-typescript.js b/test/jsx-custom-modules-specs/component/transform-typescript.js
new file mode 100644
index 0000000..033b376
--- /dev/null
+++ b/test/jsx-custom-modules-specs/component/transform-typescript.js
@@ -0,0 +1,8 @@
+
+import Snabbdom from '../../../src/index';
+export default () => {
+ const Component = ({ name }) => Snabbdom.createElementWithModules({"attrs": "", "props": ""})("div", null,
+ "Hello ",
+ name);
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})(Component, { name: "world" });
+};
diff --git a/test/jsx-custom-modules-specs/element-with-attributes/actual.js b/test/jsx-custom-modules-specs/element-with-attributes/actual.js
new file mode 100644
index 0000000..b0a643c
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-attributes/actual.js
@@ -0,0 +1,6 @@
+
+import Snabbdom from '../../../src/index'
+
+export default () => {
+ return
+}
diff --git a/test/jsx-custom-modules-specs/element-with-attributes/transform-babel.js b/test/jsx-custom-modules-specs/element-with-attributes/transform-babel.js
new file mode 100644
index 0000000..74899fc
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-attributes/transform-babel.js
@@ -0,0 +1,6 @@
+
+import Snabbdom from '../../../src/index';
+
+export default (() => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})("input", { "aria-role": "foo" });
+});
diff --git a/test/jsx-custom-modules-specs/element-with-attributes/transform-buble.js b/test/jsx-custom-modules-specs/element-with-attributes/transform-buble.js
new file mode 100644
index 0000000..d7a1307
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-attributes/transform-buble.js
@@ -0,0 +1,6 @@
+
+import Snabbdom from '../../../src/index'
+
+export default () => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})( 'input', { 'aria-role': "foo" })
+}
diff --git a/test/jsx-custom-modules-specs/element-with-attributes/transform-traceur.js b/test/jsx-custom-modules-specs/element-with-attributes/transform-traceur.js
new file mode 100644
index 0000000..20c8782
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-attributes/transform-traceur.js
@@ -0,0 +1,9 @@
+
+import Snabbdom from '../../../src/index';
+export default () => {
+ return Snabbdom.createElementWithModules({
+ "attrs": "",
+ "props": ""
+ })("input", {"aria-role": "foo"});
+};
+//# sourceURL=
diff --git a/test/jsx-custom-modules-specs/element-with-attributes/transform-typescript.js b/test/jsx-custom-modules-specs/element-with-attributes/transform-typescript.js
new file mode 100644
index 0000000..8719a13
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-attributes/transform-typescript.js
@@ -0,0 +1,5 @@
+
+import Snabbdom from '../../../src/index';
+export default () => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})('input', { attrs: { "aria-role": "foo" }})
+};
diff --git a/test/jsx-custom-modules-specs/element-with-class-names/actual.js b/test/jsx-custom-modules-specs/element-with-class-names/actual.js
new file mode 100644
index 0000000..a9caee4
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-class-names/actual.js
@@ -0,0 +1,8 @@
+
+import Snabbdom from '../../../src/index'
+
+const isVisible = () => {}
+
+export default () => {
+ return
+}
diff --git a/test/jsx-custom-modules-specs/element-with-class-names/transform-babel.js b/test/jsx-custom-modules-specs/element-with-class-names/transform-babel.js
new file mode 100644
index 0000000..111f39e
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-class-names/transform-babel.js
@@ -0,0 +1,8 @@
+
+import Snabbdom from '../../../src/index';
+
+const isVisible = () => {};
+
+export default (() => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})('div', { 'class-visible': isVisible });
+});
diff --git a/test/jsx-custom-modules-specs/element-with-class-names/transform-buble.js b/test/jsx-custom-modules-specs/element-with-class-names/transform-buble.js
new file mode 100644
index 0000000..c23250a
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-class-names/transform-buble.js
@@ -0,0 +1,8 @@
+
+import Snabbdom from '../../../src/index'
+
+var isVisible = () => {}
+
+export default () => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})( 'div', { 'class-visible': isVisible })
+}
diff --git a/test/jsx-custom-modules-specs/element-with-class-names/transform-traceur.js b/test/jsx-custom-modules-specs/element-with-class-names/transform-traceur.js
new file mode 100644
index 0000000..0cd73b3
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-class-names/transform-traceur.js
@@ -0,0 +1,10 @@
+
+import Snabbdom from '../../../src/index';
+const isVisible = () => {};
+export default () => {
+ return Snabbdom.createElementWithModules({
+ "attrs": "",
+ "props": ""
+ })("div", {"class-visible": isVisible});
+};
+//# sourceURL=
diff --git a/test/jsx-custom-modules-specs/element-with-class-names/transform-typescript.js b/test/jsx-custom-modules-specs/element-with-class-names/transform-typescript.js
new file mode 100644
index 0000000..2f9e57b
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-class-names/transform-typescript.js
@@ -0,0 +1,6 @@
+
+import Snabbdom from '../../../src/index';
+const isVisible = () => { };
+export default () => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})('div', { props: { 'class-visible': isVisible }});
+};
diff --git a/test/jsx-custom-modules-specs/element-with-event/actual.js b/test/jsx-custom-modules-specs/element-with-event/actual.js
new file mode 100644
index 0000000..4d33c83
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-event/actual.js
@@ -0,0 +1,8 @@
+
+import Snabbdom from '../../../src/index'
+
+const callback = () => {}
+
+export default () => {
+ return
+}
diff --git a/test/jsx-custom-modules-specs/element-with-event/transform-babel.js b/test/jsx-custom-modules-specs/element-with-event/transform-babel.js
new file mode 100644
index 0000000..55e4239
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-event/transform-babel.js
@@ -0,0 +1,8 @@
+
+import Snabbdom from '../../../src/index';
+
+const callback = () => {};
+
+export default (() => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})('button', { 'on-click': callback });
+});
diff --git a/test/jsx-custom-modules-specs/element-with-event/transform-buble.js b/test/jsx-custom-modules-specs/element-with-event/transform-buble.js
new file mode 100644
index 0000000..4482535
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-event/transform-buble.js
@@ -0,0 +1,8 @@
+
+import Snabbdom from '../../../src/index'
+
+var callback = () => {}
+
+export default () => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})( 'button', { 'on-click': callback })
+}
diff --git a/test/jsx-custom-modules-specs/element-with-event/transform-traceur.js b/test/jsx-custom-modules-specs/element-with-event/transform-traceur.js
new file mode 100644
index 0000000..2130559
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-event/transform-traceur.js
@@ -0,0 +1,10 @@
+
+import Snabbdom from '../../../src/index';
+const callback = () => {};
+export default () => {
+ return Snabbdom.createElementWithModules({
+ "attrs": "",
+ "props": ""
+ })("button", {"on-click": callback});
+};
+//# sourceURL=
diff --git a/test/jsx-custom-modules-specs/element-with-event/transform-typescript.js b/test/jsx-custom-modules-specs/element-with-event/transform-typescript.js
new file mode 100644
index 0000000..c23feee
--- /dev/null
+++ b/test/jsx-custom-modules-specs/element-with-event/transform-typescript.js
@@ -0,0 +1,6 @@
+
+import Snabbdom from '../../../src/index';
+const callback = () => { };
+export default () => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})('button', { props: { 'on-click': callback }});
+};
diff --git a/test/jsx-custom-modules-specs/simple-element/actual.js b/test/jsx-custom-modules-specs/simple-element/actual.js
new file mode 100644
index 0000000..cb4180d
--- /dev/null
+++ b/test/jsx-custom-modules-specs/simple-element/actual.js
@@ -0,0 +1,6 @@
+
+import Snabbdom from '../../../src/index'
+
+export default () => {
+ return Hello World
+}
diff --git a/test/jsx-custom-modules-specs/simple-element/transform-babel.js b/test/jsx-custom-modules-specs/simple-element/transform-babel.js
new file mode 100644
index 0000000..e5fbcca
--- /dev/null
+++ b/test/jsx-custom-modules-specs/simple-element/transform-babel.js
@@ -0,0 +1,10 @@
+
+import Snabbdom from '../../../src/index';
+
+export default (() => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})(
+ 'div',
+ null,
+ 'Hello World'
+ );
+});
diff --git a/test/jsx-custom-modules-specs/simple-element/transform-buble.js b/test/jsx-custom-modules-specs/simple-element/transform-buble.js
new file mode 100644
index 0000000..df82041
--- /dev/null
+++ b/test/jsx-custom-modules-specs/simple-element/transform-buble.js
@@ -0,0 +1,6 @@
+
+import Snabbdom from '../../../src/index'
+
+export default () => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})( 'div', null, "Hello World" )
+}
diff --git a/test/jsx-custom-modules-specs/simple-element/transform-traceur.js b/test/jsx-custom-modules-specs/simple-element/transform-traceur.js
new file mode 100644
index 0000000..c2d22e3
--- /dev/null
+++ b/test/jsx-custom-modules-specs/simple-element/transform-traceur.js
@@ -0,0 +1,9 @@
+
+import Snabbdom from '../../../src/index';
+export default () => {
+ return Snabbdom.createElementWithModules({
+ "attrs": "",
+ "props": ""
+ })("div", null, "Hello World");
+};
+//# sourceURL=
diff --git a/test/jsx-custom-modules-specs/simple-element/transform-typescript.js b/test/jsx-custom-modules-specs/simple-element/transform-typescript.js
new file mode 100644
index 0000000..e92ad5e
--- /dev/null
+++ b/test/jsx-custom-modules-specs/simple-element/transform-typescript.js
@@ -0,0 +1,5 @@
+
+import Snabbdom from '../../../src/index';
+export default () => {
+ return Snabbdom.createElementWithModules({"attrs": "", "props": ""})("div", null, "Hello World");
+};
diff --git a/test/jsx-custom-modules-test.js b/test/jsx-custom-modules-test.js
new file mode 100644
index 0000000..4325b47
--- /dev/null
+++ b/test/jsx-custom-modules-test.js
@@ -0,0 +1,99 @@
+
+import path from 'path'
+import fs from 'fs'
+
+import test from 'ava'
+
+const fixturesDir = path.join(__dirname, 'jsx-custom-modules-specs')
+
+fs.readdirSync(fixturesDir).forEach((caseName) => {
+ test(`trans - Should Bublé transform ${caseName.split('-').join(' ')}`, (t) => {
+ const fixtureDir = path.join(fixturesDir, caseName)
+
+ const actual = require('buble').transform(
+ fs.readFileSync(
+ path.join(fixtureDir, 'actual.js')
+ ).toString(), {
+ transforms: {
+ modules: false,
+ arrow: false,
+ parameterDestructuring: false
+ },
+ jsx: 'Snabbdom.createElementWithModules({"attrs": "", "props": ""})'
+ }
+ ).code
+
+ const transform = fs.readFileSync(
+ path.join(fixtureDir, 'transform-buble.js')
+ ).toString()
+
+ t.is(actual.trim(), transform.trim())
+ })
+
+ test(`trans - Should Babel transform ${caseName.split('-').join(' ')}`, (t) => {
+ const fixtureDir = path.join(fixturesDir, caseName)
+
+ const actual = require('babel-core').transform(
+ fs.readFileSync(
+ path.join(fixtureDir, 'actual.js')
+ ).toString(), {
+ plugins: [
+ ['transform-react-jsx', { pragma: 'Snabbdom.createElementWithModules({"attrs": "", "props": ""})' }]
+ ]
+ }
+ ).code
+
+ let transform = fs.readFileSync(
+ path.join(fixtureDir, 'transform-babel.js')
+ ).toString()
+
+ transform = transform.replace(/\r/gm, '')
+
+ t.is(actual.trim(), transform.trim())
+ })
+
+ test(`trans - Should Traceur transform ${caseName.split('-').join(' ')}`, (t) => {
+ const fixtureDir = path.join(fixturesDir, caseName)
+
+ const actual = require('traceur').compile(
+ fs.readFileSync(
+ path.join(fixtureDir, 'actual.js')
+ ).toString(), {
+ jsx: 'Snabbdom.createElementWithModules({"attrs": "", "props": ""})',
+ modules: false,
+ outputLanguage: 'es6'
+ }
+ )
+
+ let transform = fs.readFileSync(
+ path.join(fixtureDir, 'transform-traceur.js')
+ ).toString()
+
+ transform = transform.replace(/\r/gm, '')
+
+ t.is(actual.trim(), transform.trim())
+ })
+
+ // Typescript compiler does not support arbitrary pragma
+/* test(`trans - Should Typescript transform ${caseName.split('-').join(' ')}`, (t) => {
+ const fixtureDir = path.join(fixturesDir, caseName)
+
+ const actual = require('typescript').transpileModule(
+ fs.readFileSync(
+ path.join(fixtureDir, 'actual.js')
+ ).toString(), {
+ compilerOptions: {
+ jsx: 'react',
+ jsxFactory: 'Snabbdom.createElementWithModules({"attrs": "", "props": ""})',
+ target: 'es6'
+ }
+ }
+ ).outputText
+
+ const transform = fs.readFileSync(
+ path.join(fixtureDir, 'transform-typescript.js')
+ ).toString()
+
+ t.is(actual.trim(), transform.trim())
+ }) */
+})
diff --git a/test/snabbdom-specs/vnode-svg/actual.js b/test/snabbdom-specs/vnode-svg/actual.js
index 52f32cc..f3e32ee 100644
--- a/test/snabbdom-specs/vnode-svg/actual.js
+++ b/test/snabbdom-specs/vnode-svg/actual.js
@@ -2,7 +2,8 @@
export default (createElement) => {
return createElement('svg', null, [
createElement('g', null, [
- createElement('circle', { cx: 43.5, cy: 23, r: 5 })
+ createElement('circle', { cx: 43.5, cy: 23, r: 5 }),
+ createElement('path', { 'stroke-dasharray': 'foo' })
])
])
}
diff --git a/test/snabbdom-specs/vnode-svg/expected.js b/test/snabbdom-specs/vnode-svg/expected.js
index b62349c..888da05 100644
--- a/test/snabbdom-specs/vnode-svg/expected.js
+++ b/test/snabbdom-specs/vnode-svg/expected.js
@@ -4,6 +4,9 @@ export default (h) => {
h('g', { attrs: {} }, [
h('circle', {
attrs: { cx: 43.5, cy: 23, r: 5 }
+ }, []),
+ h('path', {
+ attrs: { 'stroke-dasharray': 'foo' }
}, [])
])
])