Comparing version 0.0.10-beta.2 to 0.0.10
import { createRuntime } from 'babel-plugin-jsx-dom-expressions'; | ||
import { S, unwrap, from } from 'solid-js'; | ||
let runtime; | ||
var index = runtime = createRuntime({ | ||
function handleEvent(handler, id) { | ||
return e => { | ||
let node = e.target, | ||
name = `__ev$${e.type}`; | ||
while (node && node !== this && !(node[name])) node = node.parentNode; | ||
if (node[name] && node[name + 'Id'] === id) handler(node[name], e); | ||
} | ||
} | ||
function shallowDiff(a, b) { | ||
let sa = new Set(a), sb = new Set(b); | ||
return [a.filter(i => !sb.has(i)), (b.filter(i => !sa.has(i)))]; | ||
} | ||
const r = createRuntime({ | ||
wrap(el, accessor, isAttr, fn, deep) { | ||
@@ -12,3 +25,3 @@ S.makeComputationNode(() => { | ||
if (typeof value === 'function' && !isAttr && !deep) { | ||
runtime.wrap(el, value, isAttr, fn, true); | ||
r.wrap(el, value, isAttr, fn, true); | ||
return; | ||
@@ -23,2 +36,49 @@ } | ||
export default index; | ||
let eventId = 0; | ||
function delegateEvent(eventName, handler) { | ||
let attached = null, | ||
eId = ++eventId, | ||
fn = handleEvent(handler, eId); | ||
S.cleanup(() => attached.removeEventListener(eventName, fn)); | ||
return data => element => { | ||
element[`__ev$${eventName}`] = data; | ||
element[`__ev$${eventName}Id`] = eId; | ||
if (attached) return; | ||
attached = true; | ||
Promise.resolve().then(() => { | ||
attached = 'getRootNode' in element ? element.getRootNode() : document; | ||
attached.addEventListener(eventName, fn); | ||
}); | ||
} | ||
} | ||
function selectOn(signal, handler) { | ||
let index = []; | ||
S.on(signal, prev => { | ||
let id = signal(); | ||
if (prev != null && index[prev]) handler(index[prev], false); | ||
if (id != null) handler(index[id], true); | ||
return id; | ||
}); | ||
return id => element => { | ||
index[id] = element; | ||
S.cleanup(() => index[id] = null); | ||
} | ||
} | ||
function multiSelectOn(signal, handler) { | ||
let index = []; | ||
S.on(signal, prev => { | ||
let value = signal(); | ||
[additions, removals] = shallowDiff(value, prev); | ||
additions.forEach(id => handler(index[id], true)); | ||
removals.forEach(id => handler(index[id], false)); | ||
return value; | ||
}); | ||
return id => element => { | ||
index[id] = element; | ||
S.cleanup(() => index[id] = null); | ||
} | ||
} | ||
export { r, delegateEvent, selectOn, multiSelectOn }; |
@@ -736,63 +736,2 @@ import S from 's-js'; | ||
function handleEvent(handler, id) { | ||
return e => { | ||
let node = e.target, | ||
name = `__ev$${e.type}`; | ||
while (node && node !== this && !(node[name])) node = node.parentNode; | ||
if (node[name] && node[name + 'Id'] === id) handler(node[name], e); | ||
} | ||
} | ||
function shallowDiff(a, b) { | ||
let sa = new Set(a), sb = new Set(b); | ||
return [a.filter(i => !sb.has(i)), (b.filter(i => !sa.has(i)))]; | ||
} | ||
let eventId = 0; | ||
function delegateEvent(eventName, handler) { | ||
let attached = null, | ||
eId = ++eventId, | ||
fn = handleEvent(handler, eId); | ||
S.cleanup(() => attached.removeEventListener(eventName, fn)); | ||
return data => element => { | ||
element[`__ev$${eventName}`] = data; | ||
element[`__ev$${eventName}Id`] = eId; | ||
if (attached) return; | ||
attached = true; | ||
Promise.resolve().then(() => { | ||
attached = 'getRootNode' in element ? element.getRootNode() : document; | ||
attached.addEventListener(eventName, fn); | ||
}); | ||
} | ||
} | ||
function selectOn(signal, handler) { | ||
let index = []; | ||
S.on(signal, prev => { | ||
let id = signal(); | ||
if (prev != null && index[prev]) handler(index[prev], false); | ||
if (id != null) handler(index[id], true); | ||
return id; | ||
}); | ||
return (id) => element => { | ||
index[id] = element; | ||
S.cleanup(() => index[id] = null); | ||
} | ||
} | ||
function multiSelectOn(signal, handler) { | ||
let index = []; | ||
S.on(signal, prev => { | ||
let value = signal(); | ||
[additions, removals] = shallowDiff(value, prev); | ||
additions.forEach(id => handler(index[id], true)); | ||
removals.forEach(id => handler(index[id], false)); | ||
return value; | ||
}); | ||
return id => element => { | ||
index[id] = element; | ||
S.cleanup(() => index[id] = null); | ||
} | ||
} | ||
export { State, ImmutableState, unwrap, from, map, pipe, memo, observable, delegateEvent, selectOn, multiSelectOn }; | ||
export { State, ImmutableState, unwrap, from, map, pipe, memo, observable }; |
'use strict'; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
var babelPluginJsxDomExpressions = require('babel-plugin-jsx-dom-expressions'); | ||
var solidJs = require('solid-js'); | ||
let runtime; | ||
var index = runtime = babelPluginJsxDomExpressions.createRuntime({ | ||
function handleEvent(handler, id) { | ||
return e => { | ||
let node = e.target, | ||
name = `__ev$${e.type}`; | ||
while (node && node !== this && !(node[name])) node = node.parentNode; | ||
if (node[name] && node[name + 'Id'] === id) handler(node[name], e); | ||
} | ||
} | ||
function shallowDiff(a, b) { | ||
let sa = new Set(a), sb = new Set(b); | ||
return [a.filter(i => !sb.has(i)), (b.filter(i => !sa.has(i)))]; | ||
} | ||
const r = babelPluginJsxDomExpressions.createRuntime({ | ||
wrap(el, accessor, isAttr, fn, deep) { | ||
@@ -14,3 +29,3 @@ solidJs.S.makeComputationNode(() => { | ||
if (typeof value === 'function' && !isAttr && !deep) { | ||
runtime.wrap(el, value, isAttr, fn, true); | ||
r.wrap(el, value, isAttr, fn, true); | ||
return; | ||
@@ -25,2 +40,52 @@ } | ||
module.exports = index; | ||
let eventId = 0; | ||
function delegateEvent(eventName, handler) { | ||
let attached = null, | ||
eId = ++eventId, | ||
fn = handleEvent(handler, eId); | ||
solidJs.S.cleanup(() => attached.removeEventListener(eventName, fn)); | ||
return data => element => { | ||
element[`__ev$${eventName}`] = data; | ||
element[`__ev$${eventName}Id`] = eId; | ||
if (attached) return; | ||
attached = true; | ||
Promise.resolve().then(() => { | ||
attached = 'getRootNode' in element ? element.getRootNode() : document; | ||
attached.addEventListener(eventName, fn); | ||
}); | ||
} | ||
} | ||
function selectOn(signal, handler) { | ||
let index = []; | ||
solidJs.S.on(signal, prev => { | ||
let id = signal(); | ||
if (prev != null && index[prev]) handler(index[prev], false); | ||
if (id != null) handler(index[id], true); | ||
return id; | ||
}); | ||
return id => element => { | ||
index[id] = element; | ||
solidJs.S.cleanup(() => index[id] = null); | ||
} | ||
} | ||
function multiSelectOn(signal, handler) { | ||
let index = []; | ||
solidJs.S.on(signal, prev => { | ||
let value = signal(); | ||
[additions, removals] = shallowDiff(value, prev); | ||
additions.forEach(id => handler(index[id], true)); | ||
removals.forEach(id => handler(index[id], false)); | ||
return value; | ||
}); | ||
return id => element => { | ||
index[id] = element; | ||
solidJs.S.cleanup(() => index[id] = null); | ||
} | ||
} | ||
exports.r = r; | ||
exports.delegateEvent = delegateEvent; | ||
exports.selectOn = selectOn; | ||
exports.multiSelectOn = multiSelectOn; |
@@ -741,63 +741,2 @@ 'use strict'; | ||
function handleEvent(handler, id) { | ||
return e => { | ||
let node = e.target, | ||
name = `__ev$${e.type}`; | ||
while (node && node !== this && !(node[name])) node = node.parentNode; | ||
if (node[name] && node[name + 'Id'] === id) handler(node[name], e); | ||
} | ||
} | ||
function shallowDiff(a, b) { | ||
let sa = new Set(a), sb = new Set(b); | ||
return [a.filter(i => !sb.has(i)), (b.filter(i => !sa.has(i)))]; | ||
} | ||
let eventId = 0; | ||
function delegateEvent(eventName, handler) { | ||
let attached = null, | ||
eId = ++eventId, | ||
fn = handleEvent(handler, eId); | ||
S.cleanup(() => attached.removeEventListener(eventName, fn)); | ||
return data => element => { | ||
element[`__ev$${eventName}`] = data; | ||
element[`__ev$${eventName}Id`] = eId; | ||
if (attached) return; | ||
attached = true; | ||
Promise.resolve().then(() => { | ||
attached = 'getRootNode' in element ? element.getRootNode() : document; | ||
attached.addEventListener(eventName, fn); | ||
}); | ||
} | ||
} | ||
function selectOn(signal, handler) { | ||
let index = []; | ||
S.on(signal, prev => { | ||
let id = signal(); | ||
if (prev != null && index[prev]) handler(index[prev], false); | ||
if (id != null) handler(index[id], true); | ||
return id; | ||
}); | ||
return (id) => element => { | ||
index[id] = element; | ||
S.cleanup(() => index[id] = null); | ||
} | ||
} | ||
function multiSelectOn(signal, handler) { | ||
let index = []; | ||
S.on(signal, prev => { | ||
let value = signal(); | ||
[additions, removals] = shallowDiff(value, prev); | ||
additions.forEach(id => handler(index[id], true)); | ||
removals.forEach(id => handler(index[id], false)); | ||
return value; | ||
}); | ||
return id => element => { | ||
index[id] = element; | ||
S.cleanup(() => index[id] = null); | ||
} | ||
} | ||
exports.S = S; | ||
@@ -812,4 +751,1 @@ exports.State = State; | ||
exports.observable = observable; | ||
exports.delegateEvent = delegateEvent; | ||
exports.selectOn = selectOn; | ||
exports.multiSelectOn = multiSelectOn; |
{ | ||
"name": "solid-js", | ||
"description": "A declarative JavaScript library for building user interfaces.", | ||
"version": "0.0.10-beta.2", | ||
"version": "0.0.10", | ||
"author": "Ryan Carniato", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
@@ -43,3 +43,3 @@ # Solid.js | ||
S.root(() => mountEl.appendChild(MyComponent())); | ||
S.root(() => mountEl.appendChild(<MyComponent />)); | ||
``` | ||
@@ -108,3 +108,3 @@ | ||
```js | ||
import r from 'solid-js/dom' | ||
import { r } from 'solid-js/dom' | ||
``` | ||
@@ -161,2 +161,2 @@ | ||
This project is still a work in progress. Although I've been working on it for the past 2 years it's been evolving considerably. I've decided to open source this at this point to share the concept. It took discovering the approaches used by [Surplus.js](https://github.com/adamhaile/surplus) to fill the missing pieces this library needed to prove out it's concept. I was impressed so much by Surplus that I'm using [S.js](https://github.com/adamhaile/S) for Signals. And now I believe we can have performance and a simple clean API. | ||
This project is still a work in progress. Although I've been working on it for the past 2 years it's been evolving considerably. I've decided to open source this at this point to share the concept. It took discovering the approaches used by [Surplus.js](https://github.com/adamhaile/surplus) to fill the missing pieces this library needed to prove out it's concept. And now I believe we can have performance and a simple clean API. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
91912
2046