Socket
Socket
Sign inDemoInstall

snabbdom-jsx

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

snabbdom-jsx - npm Package Compare versions

Comparing version 0.1.2 to 0.1.3

.babelrc

2

.c9/metadata/workspace/package.json

@@ -1,1 +0,1 @@

{"filter":false,"title":"package.json","tooltip":"/package.json","undoManager":{"mark":5,"position":5,"stack":[[{"start":{"row":22,"column":3},"end":{"row":22,"column":15},"action":"remove","lines":["dependencies"],"id":2},{"start":{"row":22,"column":3},"end":{"row":22,"column":18},"action":"insert","lines":["devDependencies"]}],[{"start":{"row":3,"column":60},"end":{"row":4,"column":0},"action":"insert","lines":["",""],"id":3},{"start":{"row":4,"column":0},"end":{"row":4,"column":2},"action":"insert","lines":[" "]}],[{"start":{"row":4,"column":2},"end":{"row":4,"column":24},"action":"insert","lines":["\"main\": \"snabbdom.js\","],"id":4}],[{"start":{"row":4,"column":11},"end":{"row":4,"column":19},"action":"remove","lines":["snabbdom"],"id":5},{"start":{"row":4,"column":11},"end":{"row":4,"column":23},"action":"insert","lines":["snabbdom-jsx"]}],[{"start":{"row":2,"column":18},"end":{"row":2,"column":19},"action":"remove","lines":["0"],"id":6},{"start":{"row":2,"column":18},"end":{"row":2,"column":19},"action":"insert","lines":["1"]}],[{"start":{"row":2,"column":18},"end":{"row":2,"column":19},"action":"remove","lines":["1"],"id":7},{"start":{"row":2,"column":18},"end":{"row":2,"column":19},"action":"insert","lines":["2"]}]]},"ace":{"folds":[],"scrolltop":0,"scrollleft":0,"selection":{"start":{"row":2,"column":19},"end":{"row":2,"column":19},"isBackwards":false},"options":{"guessTabSize":true,"useWrapMode":false,"wrapToView":true},"firstLineState":0},"timestamp":1439307021408,"hash":"acdcff5ffbe8c94486d7bbfe189fb7648d45abaa"}
{"filter":false,"title":"package.json","tooltip":"/package.json","undoManager":{"mark":13,"position":13,"stack":[[{"start":{"row":24,"column":0},"end":{"row":25,"column":0},"action":"insert","lines":[" \"babel-plugin-transform-es2015-destructuring\": \"^6.0.18\",",""],"id":2,"ignore":true}],[{"start":{"row":25,"column":0},"end":{"row":26,"column":0},"action":"insert","lines":[" \"babel-plugin-transform-es2015-parameters\": \"^6.0.18\",",""],"id":3,"ignore":true}],[{"start":{"row":25,"column":0},"end":{"row":26,"column":0},"action":"insert","lines":[" \"babel-plugin-transform-es2015-modules-commonjs\": \"^6.1.3\",",""],"id":4,"ignore":true}],[{"start":{"row":27,"column":0},"end":{"row":28,"column":0},"action":"insert","lines":[" \"babel-plugin-transform-react-jsx\": \"^6.0.18\",",""],"id":5,"ignore":true}],[{"start":{"row":24,"column":0},"end":{"row":25,"column":0},"action":"insert","lines":[" \"babel-plugin-syntax-jsx\": \"^6.0.14\",",""],"id":6,"ignore":true}],[{"start":{"row":24,"column":4},"end":{"row":24,"column":41},"action":"remove","lines":["\"babel-plugin-syntax-jsx\": \"^6.0.14\","],"id":7}],[{"start":{"row":28,"column":50},"end":{"row":29,"column":0},"action":"insert","lines":["",""],"id":8},{"start":{"row":29,"column":0},"end":{"row":29,"column":4},"action":"insert","lines":[" "]}],[{"start":{"row":29,"column":4},"end":{"row":29,"column":41},"action":"insert","lines":["\"babel-plugin-syntax-jsx\": \"^6.0.14\","],"id":9}],[{"start":{"row":24,"column":2},"end":{"row":24,"column":4},"action":"remove","lines":[" "],"id":10}],[{"start":{"row":24,"column":0},"end":{"row":24,"column":2},"action":"remove","lines":[" "],"id":11}],[{"start":{"row":23,"column":22},"end":{"row":24,"column":0},"action":"remove","lines":["",""],"id":12}],[{"start":{"row":2,"column":18},"end":{"row":2,"column":19},"action":"remove","lines":["2"],"id":13},{"start":{"row":2,"column":18},"end":{"row":2,"column":19},"action":"insert","lines":["3"]}],[{"start":{"row":6,"column":13},"end":{"row":6,"column":56},"action":"remove","lines":["echo \\\"Error: no test specified\\\" && exit 1"],"id":14}],[{"start":{"row":6,"column":13},"end":{"row":6,"column":33},"action":"insert","lines":["babel test.js | node"],"id":15}]]},"ace":{"folds":[],"scrolltop":0,"scrollleft":0,"selection":{"start":{"row":2,"column":14},"end":{"row":2,"column":19},"isBackwards":false},"options":{"guessTabSize":true,"useWrapMode":false,"wrapToView":true},"firstLineState":0},"timestamp":1446847692239,"hash":"211375d802431ed075e92eea539b74e837759076"}

@@ -1,1 +0,1 @@

{"filter":false,"title":"test.js","tooltip":"/test.js","undoManager":{"mark":-1,"position":-1,"stack":[]},"ace":{"folds":[],"scrolltop":210.5,"scrollleft":0,"selection":{"start":{"row":68,"column":2},"end":{"row":68,"column":2},"isBackwards":false},"options":{"tabSize":2,"useSoftTabs":true,"guessTabSize":false,"useWrapMode":false,"wrapToView":true},"firstLineState":0},"timestamp":1439293801830,"hash":"730b7d7b8b92b8ceb1cc70e061a0e44a8fc207ce"}
{"filter":false,"title":"test.js","tooltip":"/test.js","undoManager":{"mark":63,"position":63,"stack":[[{"start":{"row":32,"column":25},"end":{"row":33,"column":0},"action":"insert","lines":["",""],"id":1},{"start":{"row":33,"column":0},"end":{"row":33,"column":8},"action":"insert","lines":[" "]}],[{"start":{"row":33,"column":8},"end":{"row":33,"column":9},"action":"insert","lines":["c"],"id":2}],[{"start":{"row":33,"column":9},"end":{"row":33,"column":10},"action":"insert","lines":["l"],"id":3}],[{"start":{"row":33,"column":10},"end":{"row":33,"column":11},"action":"insert","lines":["a"],"id":4}],[{"start":{"row":33,"column":11},"end":{"row":33,"column":12},"action":"insert","lines":["s"],"id":5}],[{"start":{"row":33,"column":12},"end":{"row":33,"column":13},"action":"insert","lines":["s"],"id":6}],[{"start":{"row":33,"column":13},"end":{"row":33,"column":14},"action":"insert","lines":["-"],"id":7}],[{"start":{"row":33,"column":14},"end":{"row":33,"column":15},"action":"insert","lines":["c"],"id":8}],[{"start":{"row":33,"column":15},"end":{"row":33,"column":16},"action":"insert","lines":["s"],"id":9}],[{"start":{"row":33,"column":16},"end":{"row":33,"column":17},"action":"insert","lines":["s"],"id":10}],[{"start":{"row":33,"column":17},"end":{"row":33,"column":18},"action":"insert","lines":["1"],"id":11}],[{"start":{"row":33,"column":17},"end":{"row":33,"column":18},"action":"remove","lines":["1"],"id":12}],[{"start":{"row":33,"column":16},"end":{"row":33,"column":17},"action":"remove","lines":["s"],"id":13}],[{"start":{"row":33,"column":16},"end":{"row":33,"column":17},"action":"insert","lines":["="],"id":14}],[{"start":{"row":33,"column":17},"end":{"row":33,"column":18},"action":"insert","lines":["t"],"id":15}],[{"start":{"row":33,"column":18},"end":{"row":33,"column":19},"action":"insert","lines":["r"],"id":16}],[{"start":{"row":33,"column":18},"end":{"row":33,"column":19},"action":"remove","lines":["r"],"id":17}],[{"start":{"row":33,"column":17},"end":{"row":33,"column":18},"action":"remove","lines":["t"],"id":18}],[{"start":{"row":33,"column":17},"end":{"row":33,"column":18},"action":"insert","lines":["{"],"id":19}],[{"start":{"row":33,"column":18},"end":{"row":33,"column":19},"action":"insert","lines":["}"],"id":20}],[{"start":{"row":33,"column":18},"end":{"row":33,"column":19},"action":"insert","lines":["t"],"id":21}],[{"start":{"row":33,"column":19},"end":{"row":33,"column":20},"action":"insert","lines":["r"],"id":22}],[{"start":{"row":33,"column":20},"end":{"row":33,"column":21},"action":"insert","lines":["u"],"id":23}],[{"start":{"row":33,"column":21},"end":{"row":33,"column":22},"action":"insert","lines":["e"],"id":24}],[{"start":{"row":33,"column":23},"end":{"row":34,"column":0},"action":"insert","lines":["",""],"id":25},{"start":{"row":34,"column":0},"end":{"row":34,"column":8},"action":"insert","lines":[" "]}],[{"start":{"row":33,"column":16},"end":{"row":33,"column":17},"action":"insert","lines":["-"],"id":26}],[{"start":{"row":33,"column":17},"end":{"row":33,"column":18},"action":"insert","lines":["1"],"id":27}],[{"start":{"row":34,"column":6},"end":{"row":34,"column":8},"action":"remove","lines":[" "],"id":28}],[{"start":{"row":34,"column":4},"end":{"row":34,"column":6},"action":"remove","lines":[" "],"id":29}],[{"start":{"row":34,"column":2},"end":{"row":34,"column":4},"action":"remove","lines":[" "],"id":30}],[{"start":{"row":34,"column":0},"end":{"row":34,"column":2},"action":"remove","lines":[" "],"id":31}],[{"start":{"row":33,"column":25},"end":{"row":34,"column":0},"action":"remove","lines":["",""],"id":32}],[{"start":{"row":43,"column":49},"end":{"row":43,"column":50},"action":"insert","lines":[","],"id":33}],[{"start":{"row":43,"column":50},"end":{"row":44,"column":0},"action":"insert","lines":["",""],"id":34},{"start":{"row":44,"column":0},"end":{"row":44,"column":6},"action":"insert","lines":[" "]}],[{"start":{"row":44,"column":6},"end":{"row":44,"column":7},"action":"insert","lines":["c"],"id":35}],[{"start":{"row":44,"column":7},"end":{"row":44,"column":8},"action":"insert","lines":["m"],"id":36}],[{"start":{"row":44,"column":7},"end":{"row":44,"column":8},"action":"remove","lines":["m"],"id":37}],[{"start":{"row":44,"column":7},"end":{"row":44,"column":8},"action":"insert","lines":["l"],"id":38}],[{"start":{"row":44,"column":8},"end":{"row":44,"column":9},"action":"insert","lines":["a"],"id":39}],[{"start":{"row":44,"column":9},"end":{"row":44,"column":10},"action":"insert","lines":["s"],"id":40}],[{"start":{"row":44,"column":10},"end":{"row":44,"column":11},"action":"insert","lines":["s"],"id":41}],[{"start":{"row":44,"column":11},"end":{"row":44,"column":12},"action":"insert","lines":[":"],"id":42}],[{"start":{"row":44,"column":12},"end":{"row":44,"column":13},"action":"insert","lines":[" "],"id":43}],[{"start":{"row":44,"column":13},"end":{"row":44,"column":14},"action":"insert","lines":["{"],"id":44}],[{"start":{"row":44,"column":14},"end":{"row":44,"column":15},"action":"insert","lines":[" "],"id":45}],[{"start":{"row":44,"column":15},"end":{"row":44,"column":17},"action":"insert","lines":["''"],"id":46}],[{"start":{"row":44,"column":16},"end":{"row":44,"column":17},"action":"insert","lines":["c"],"id":47}],[{"start":{"row":44,"column":17},"end":{"row":44,"column":18},"action":"insert","lines":["s"],"id":48}],[{"start":{"row":44,"column":18},"end":{"row":44,"column":19},"action":"insert","lines":["-"],"id":49}],[{"start":{"row":44,"column":19},"end":{"row":44,"column":20},"action":"insert","lines":["&"],"id":50}],[{"start":{"row":44,"column":19},"end":{"row":44,"column":20},"action":"remove","lines":["&"],"id":51}],[{"start":{"row":44,"column":19},"end":{"row":44,"column":20},"action":"insert","lines":["1"],"id":52}],[{"start":{"row":44,"column":21},"end":{"row":44,"column":22},"action":"insert","lines":[":"],"id":53}],[{"start":{"row":44,"column":22},"end":{"row":44,"column":23},"action":"insert","lines":[" "],"id":54}],[{"start":{"row":44,"column":23},"end":{"row":44,"column":24},"action":"insert","lines":["t"],"id":55}],[{"start":{"row":44,"column":24},"end":{"row":44,"column":25},"action":"insert","lines":["r"],"id":56}],[{"start":{"row":44,"column":25},"end":{"row":44,"column":26},"action":"insert","lines":["u"],"id":57}],[{"start":{"row":44,"column":26},"end":{"row":44,"column":27},"action":"insert","lines":["e"],"id":58}],[{"start":{"row":44,"column":27},"end":{"row":44,"column":28},"action":"insert","lines":[" "],"id":59}],[{"start":{"row":44,"column":28},"end":{"row":44,"column":29},"action":"insert","lines":["}"],"id":60}],[{"start":{"row":44,"column":29},"end":{"row":44,"column":30},"action":"insert","lines":[","],"id":61}],[{"start":{"row":44,"column":29},"end":{"row":44,"column":30},"action":"remove","lines":[","],"id":62}],[{"start":{"row":44,"column":20},"end":{"row":44,"column":21},"action":"insert","lines":["1"],"id":63}],[{"start":{"row":44,"column":20},"end":{"row":44,"column":21},"action":"remove","lines":["1"],"id":64}]]},"ace":{"folds":[],"scrolltop":372,"scrollleft":0,"selection":{"start":{"row":44,"column":20},"end":{"row":44,"column":20},"isBackwards":false},"options":{"guessTabSize":true,"useWrapMode":false,"wrapToView":true},"firstLineState":0},"timestamp":1446846606933,"hash":"b0fabd32523fa3a117c6f18f037696147bb79979"}
{
"name": "snabbdom-jsx",
"version": "0.1.2",
"version": "0.1.3",
"description": "Write snabbdom views using JSX and Babel",
"main": "snabbdom-jsx.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"test": "babel test.js | node"
},

@@ -25,4 +25,9 @@ "repository": {

"devDependencies": {
"babel-plugin-transform-es2015-destructuring": "^6.0.18",
"babel-plugin-transform-es2015-modules-commonjs": "^6.1.3",
"babel-plugin-transform-es2015-parameters": "^6.0.18",
"babel-plugin-transform-react-jsx": "^6.0.18",
"babel-plugin-syntax-jsx": "^6.0.14",
"tape": "^4.0.3"
}
}

@@ -1,8 +0,12 @@

Write [Snabbdom](https://github.com/paldepind/snabbdom) views with [Babel's JSX](http://babeljs.io/docs/advanced/transformers/other/react/).
Write [Snabbdom](https://github.com/paldepind/snabbdom) virtual DOM with [Babel's JSX](http://babeljs.io/docs/advanced/transformers/other/react/).
Snabbdom is a small Virtual DOM library. Unlike React, it's not a fully opinionated framework, but just focuses on the core virtual DOM problem : construct virtual DOM trees (virtual nodes) and patch the real DOM with them. When those operations happen is entirely up to you. The main benefit is that you can adopt whatver architdectural UI pattern you like in your application.
Babel is JavaScript compiler that converts ES2015 (modern JavaScript) into compatible JavaScript (ES5) code. A nice feature of Babel is that it supports [React JSX syntax](http://facebook.github.io/react/docs/displaying-data.html#jsx-syntax) and in the same time allows you to take the result of this JSX (attributes + body) and do wharever you like with it. Snabbdom-jsx transforms this JSX data into snabbdom virtual nodes.
Features:
- Transform Babel JSX templates to Snabbdom virtual nodes
- Transforms Babel JSX templates into Snabbdom virtual nodes
- Straightforward mapping from JSX attributes to Snabbdom data attributes using namespaces
- JSX Components are simples functions `(attributes, children) => vnode`. No more messy classes.
- JSX Components are simple functions `(attributes, children) => vnode`. No more messy classes.

@@ -18,3 +22,3 @@ Usage

Hello example
Hello example ([see the complete example here](https://github.com/yelouafi/snabbdom-jsx/blob/master/examples/hello/main.js))

@@ -33,3 +37,3 @@ ```js

The `/** @jsx html */` pragma at the top tells Babel to use the `html` function instead of the React.createElement default. The `html` function takes arguments passed from Babel and generate virtual nodes as expected by Snabbdom's `patch` function.
The `/** @jsx html */` pragma at the top tells Babel to use the `html` function instead of the React.createElement default. The `html` function takes arguments passed from Babel and generates virtual nodes as expected by Snabbdom's `patch` function.

@@ -39,3 +43,3 @@ Mapping JSX attributes

A quick remainder: In snabbdom, most of the functionalities like toggling classes, styles and setting properties on DOM elements are delegated to separate modules.
A quick remainder: in snabbdom, most of the functionalities like toggling classes, styles and setting properties on DOM elements are delegated to separate modules.

@@ -53,3 +57,3 @@ For example

Each module handles a portion of the data attributes (the object in the parameter to `h`). And each portion is stored inside a **namespace**, for example, event attributes are placed inside the `on` namespace, class attributes inside the `class` namespace and so on.
Each module handles a portion of the data attributes (the 2nd parameter to `h`). And each portion is stored inside a *namespace*, for example, event attributes are placed inside the `on` namespace, class attributes inside the `class` namespace and so on.

@@ -80,3 +84,3 @@

This a generic rule: to map a JSX attribute to a specific module, you need to prefix the attribute with `pref-` where `pref` is the namespace used by the module in Snabbdom. As in the example above, all attributes with the `on-` prefix will be placed inside the the `on` namespace.
This is a generic rule to map a JSX attribute to a specific module, you need to prefix the attribute with `pref-` where `pref` is the namespace used by the module in Snabbdom. As in the example above, all attributes with the `on-` prefix (i.e. event listeners) will be placed inside the the `on` namespace. This gives us a simple and extensible pattern to support other custom modules.

@@ -101,3 +105,3 @@ Another example using the `class` namespace

But you can also specifies an unique object the same way as in the `h` function, this is useful when you have a dynamic object
But you can also specify an unique object the same way as in the `h` function, this is useful when you have a dynamic object

@@ -130,3 +134,28 @@ ```js

Static classes
==============
In Snabbdom you can create an element using a css-like syntax
```js
h('div.class1.class2', ...)
```
This will add the class names to the classList of the element. Unlike classes specified in the `class` namesapce, those are static classes meaning they will not be re-updated during patch operations.
In JSX you can use the `classNames` attribute to create static classes
```js
<div classNames="class1 class 2" />
```
You can also use an array instead of a string
```js
const classes = ['classe1', ...];
<div classNames={classes} />
```
JSX Components

@@ -160,2 +189,25 @@ ===============

If you're wondering how Components would fit in a large application, you can look into the [todomvc example](https://github.com/yelouafi/snabbdom-jsx/tree/master/examples/todomvc). The application is implemented using the Elm architecture. For more information see [React-less Virtual DOM with Snabbdom : functions everywhere!](https://medium.com/@yelouafi/react-less-virtual-dom-with-snabbdom-functions-everywhere-53b672cb2fe3)
As in React, note that all components must start with a capital letter, while regular HTML tags start with lower case letters. This the way Babel also distinguish component invocation from simple tag creation.
Perhaps of less obvious utility, but instead of a function, a component can also be an object with a `view` function; i added this in order to support nesting in UI patterns; especially in the Elm architecture, where a component is an object with a `view` function (among others)
for example you can have a `Task` component
```js
Task.view = ({task}) => ...
Task.update = ...
```
and use it inside a `Todos` component like this
```js
import Task from './task'
Todos.view = ({todos}) =>
todos.map( task => <Task task={task} /> )
```
If you're wondering how Components would fit in a large application, you can look into the [todomvc example](https://github.com/yelouafi/snabbdom-jsx/tree/master/examples/todomvc). The application is implemented using the Elm architecture. For more information see [React-less Virtual DOM with Snabbdom : functions everywhere!](https://medium.com/@yelouafi/react-less-virtual-dom-with-snabbdom-functions-everywhere-53b672cb2fe3)
"use strict";
var SVGNS = "http://www.w3.org/2000/svg";
var modulesNS = ['key', 'on', 'style', 'class', 'props'];
var modulesNS = ['key', 'hook', 'on', 'style', 'class', 'props'];
var slice = Array.prototype.slice;

@@ -24,7 +24,7 @@

for(var key in attrs) {
const parts = key.split('-');
if(parts.length > 1)
addAttr(parts[0], parts[1], attrs[key]);
var idx = key.indexOf('-');
if(idx > 0)
addAttr(key.slice(0, idx), key.slice(idx+1), attrs[key]);
else if(!map[key])
addAttr(defNS, parts[0], attrs[key]);
addAttr(defNS, key, attrs[key]);
}

@@ -34,3 +34,3 @@ return map;

function addAttr(namespace, key, val) {
const ns = map[namespace] || (map[namespace] = {});
var ns = map[namespace] || (map[namespace] = {});
ns[key] = val;

@@ -40,3 +40,3 @@ }

function jsx(nsURI, defNS, modules, tag, attrs, children) {
function buildVnode(nsURI, defNS, modules, tag, attrs, children) {
attrs = attrs || {};

@@ -67,4 +67,4 @@ if(attrs.classNames) {

children = slice.call(arguments, 2);
return jsx(nsURI, defNS || 'props', modules || modulesNS, tag, attrs, children);
}
return buildVnode(nsURI, defNS || 'props', modules || modulesNS, tag, attrs, children);
};
}

@@ -76,2 +76,2 @@

JSX: JSX
};
};

@@ -34,2 +34,3 @@ /** @jsx html */

style-color='red'
class-cs-1={true}
on-click={callback}/>

@@ -44,3 +45,4 @@ </div>;

on: { click: callback },
style: { fontWeight: 'bold', color: 'red' }
style: { fontWeight: 'bold', color: 'red' },
class: { 'cs-1': true }
},

@@ -47,0 +49,0 @@ children: []

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc