driver-worker
Advanced tools
Comparing version 0.6.6-2 to 0.6.6-3
@@ -8,2 +8,6 @@ "use strict"; | ||
var _setStyle = _interopRequireDefault(require("./set-style")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } | ||
@@ -30,113 +34,23 @@ | ||
} : true; | ||
var UNBUBBLES = ['appear', 'disappear', 'scroll', 'blur', 'focus', 'load', 'unload', 'resize']; | ||
function isUnbubbleEvent(evtName) { | ||
return UNBUBBLES.indexOf(evtName) !== -1; | ||
} | ||
var PREFIX_PROPS = { | ||
flex: true, | ||
alignItems: true, | ||
alignSelf: true, | ||
flexDirection: true, | ||
justifyContent: true, | ||
flexWrap: true, | ||
lineClamp: true, | ||
textSizeAdjust: true, | ||
textDecorationLine: true, | ||
textDecorationColor: true, | ||
textDecorationStyle: true, | ||
textDecorationSkip: true, | ||
writingMode: true, | ||
animatin: true, | ||
animationName: true, | ||
animationDuration: true, | ||
animationTimingFunction: true, | ||
animationDelay: true, | ||
animationIterationCount: true, | ||
animationDirection: true, | ||
animationFillMode: true, | ||
animationPlayState: true, | ||
transform: true, | ||
transformOrigin: true, | ||
transformStyle: true, | ||
perspective: true, | ||
perspectiveOrigin: true, | ||
backfaceVisibility: true, | ||
appearance: true, | ||
userSelect: true, | ||
columns: true, | ||
columnWidth: true, | ||
columnCount: true, | ||
columnGap: true, | ||
columnRule: true, | ||
columnRuleWidth: true, | ||
columnRuleStyle: true, | ||
columnRuleColor: true, | ||
columnSpan: true, | ||
columnFill: true, | ||
columnBreakBefore: true, | ||
columnBreakAfter: true, | ||
columnBreakInside: true | ||
var NO_BUBBLES_EVENTS = { | ||
// Resource Events and Progress Events | ||
load: true, | ||
error: true, | ||
unload: true, | ||
abort: true, | ||
loadstart: true, | ||
progress: true, | ||
loadend: true, | ||
// Focus Events | ||
blur: true, | ||
focus: true, | ||
// View Events | ||
scroll: true, | ||
// Not bubles on elements | ||
appear: true, | ||
disappear: true, | ||
// Uncategorized events | ||
invalid: true | ||
}; | ||
var PREFIX_PROP_VALS = { | ||
position: 'sticky', | ||
display: 'flex' | ||
}; | ||
var StylePrefixer = { | ||
shouldPrefix: function shouldPrefix(prop) { | ||
return PREFIX_PROPS[prop] || PREFIX_PROP_VALS[prop]; | ||
} | ||
}; | ||
Object.keys(PREFIX_PROPS).forEach(function (prop) { | ||
StylePrefixer[prop] = function (value) { | ||
var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
style['webkit' + prop[0].toUpperCase() + prop.slice(1)] = value; | ||
style[prop] = value; | ||
return style; | ||
}; | ||
}); | ||
Object.keys(PREFIX_PROP_VALS).forEach(function (prop) { | ||
var rule = PREFIX_PROPS[prop]; | ||
StylePrefixer[prop] = function (value) { | ||
var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
if (value === rule) { | ||
style[prop] = ['-webkit-' + rule, rule]; | ||
} else { | ||
style[prop] = value; | ||
} | ||
return style; | ||
}; | ||
}); | ||
function applyCompatibleStyle(node, styleObject) { | ||
var tranformedStyles = {}; | ||
for (var prop in styleObject) { | ||
var val = styleObject[prop]; | ||
if (StylePrefixer.shouldPrefix(prop)) { | ||
StylePrefixer[prop](val, tranformedStyles); | ||
} else { | ||
tranformedStyles[prop] = val; | ||
} | ||
} | ||
for (var _prop in tranformedStyles) { | ||
var transformValue = tranformedStyles[_prop]; // if browser only accept -webkit-flex | ||
// node.style.display = 'flex' will not work | ||
if (Array.isArray(transformValue)) { | ||
for (var i = 0; i < transformValue.length; i++) { | ||
node.style[_prop] = transformValue[i]; | ||
} | ||
} else { | ||
node.style[_prop] = transformValue; | ||
} | ||
} | ||
} | ||
var _default = function _default(_ref) { | ||
@@ -149,11 +63,20 @@ var worker = _ref.worker, | ||
function getNode(node) { | ||
if (!node) return null; | ||
if (node.nodeName === 'BODY') return document.body; | ||
return NODES.get(node.$$id); | ||
function setNode(vnode, node) { | ||
node.$$id = vnode.$$id; | ||
return NODES.set(vnode.$$id, node); | ||
} | ||
function _addEvent(name, vnode) { | ||
if (isUnbubbleEvent(name)) { | ||
addUnbubbleEvent(name, vnode); | ||
function getNode(vnode) { | ||
if (!vnode) return null; | ||
if (vnode.nodeName === 'BODY') return document.body; | ||
return NODES.get(vnode.$$id); | ||
} | ||
function deleteNode(vnode) { | ||
return NODES.delete(vnode.$$id); | ||
} | ||
function _addEvent(node, name) { | ||
if (NO_BUBBLES_EVENTS[name]) { | ||
addNoBubblesEventListener(node, name); | ||
} else { | ||
@@ -172,5 +95,5 @@ var registeredCount = registeredEventCounts[name]; | ||
function _removeEvent(name, vnode) { | ||
if (isUnbubbleEvent(name)) { | ||
removeUnbubbleEvent(name, vnode); | ||
function _removeEvent(node, name) { | ||
if (NO_BUBBLES_EVENTS[name]) { | ||
removeNoBubblesEventListener(node, name); | ||
} else { | ||
@@ -185,36 +108,29 @@ registeredEventCounts[name]--; | ||
var unbubbleEventStore = {}; | ||
function addNoBubblesEventListener(node, name) { | ||
function listener(evt) { | ||
var target = { | ||
$$id: node.$$id | ||
}; | ||
worker.postMessage({ | ||
type: 'event', | ||
event: { | ||
type: name, | ||
target: target, | ||
currentTarget: target, | ||
detail: evt.detail | ||
} | ||
}); | ||
} | ||
function addUnbubbleEvent(name, vnode) { | ||
var evtStore = unbubbleEventStore[name] = unbubbleEventStore[name] || {}; // el may not add to DOM Tree | ||
setTimeout(function () { | ||
var el = getNode(vnode); | ||
if (el) { | ||
el.addEventListener(name, evtStore[vnode.$$id] = function (evt) { | ||
var target = { | ||
$$id: el.$$id | ||
}; | ||
worker.postMessage({ | ||
type: 'event', | ||
event: { | ||
type: name, | ||
target: target, | ||
currentTarget: target, | ||
detail: evt.detail | ||
} | ||
}); | ||
}); | ||
} | ||
}, 0); | ||
; | ||
node["__$".concat(name, "_listener__")] = listener; | ||
node.addEventListener(name, listener); | ||
} | ||
function removeUnbubbleEvent(name, vnode) { | ||
var evtStore = unbubbleEventStore[name] = unbubbleEventStore[name] || {}; | ||
function removeNoBubblesEventListener(node, name) { | ||
var listener = node["__$".concat(name, "_listener__")]; | ||
if (evtStore[vnode.$$id]) { | ||
var el = getNode(vnode); | ||
el && el.removeEventListener(name, evtStore[vnode.$$id]); | ||
delete evtStore[vnode.$$id]; | ||
if (listener) { | ||
node.removeEventListener(name, listener); | ||
node["__$".concat(name, "_listener__")] = null; | ||
} | ||
@@ -326,3 +242,3 @@ } | ||
if (vnode.style) { | ||
applyCompatibleStyle(node, vnode.style); | ||
(0, _setStyle.default)(node, vnode.style); | ||
} | ||
@@ -350,3 +266,3 @@ | ||
for (var _i2 = 0; _i2 < vnode.events.length; _i2++) { | ||
_addEvent(vnode.events[_i2], vnode); | ||
_addEvent(node, vnode.events[_i2]); | ||
} | ||
@@ -358,4 +274,3 @@ } | ||
node.$$id = vnode.$$id; | ||
NODES.set(vnode.$$id, node); | ||
setNode(vnode, node); | ||
return node; | ||
@@ -383,3 +298,5 @@ } // Returns "attributes" if it was an attribute mutation. | ||
for (var i = removedNodes.length; i--;) { | ||
parent.removeChild(getNode(removedNodes[i])); | ||
var node = getNode(removedNodes[i]); | ||
parent.removeChild(node); | ||
deleteNode(node); | ||
} | ||
@@ -405,10 +322,9 @@ } | ||
style = _ref3.style; | ||
var vnode = target; | ||
var node = getNode(vnode); | ||
var node = getNode(target); // TODO: some with `createNode`, should processed by one method | ||
if (style) { | ||
applyCompatibleStyle(node, style); | ||
(0, _setStyle.default)(node, style); | ||
} else if (newValue == null) { | ||
node.removeAttribute(attributeName); | ||
} else if (_typeof(newValue) === 'object') { | ||
} else if (_typeof(newValue) === 'object' || typeof newValue === 'boolean') { | ||
node[attributeName] = newValue; | ||
@@ -422,4 +338,3 @@ } else { | ||
newValue = _ref4.newValue; | ||
var vnode = target; | ||
var node = getNode(vnode); | ||
var node = getNode(target); | ||
node[TEXT_CONTENT_ATTR] = newValue; | ||
@@ -430,4 +345,5 @@ }, | ||
eventName = _ref5.eventName; | ||
var node = getNode(target); | ||
_addEvent(eventName, target); | ||
_addEvent(node, eventName); | ||
}, | ||
@@ -437,4 +353,5 @@ removeEvent: function removeEvent(_ref6) { | ||
eventName = _ref6.eventName; | ||
var node = getNode(target); | ||
_removeEvent(eventName, target); | ||
_removeEvent(node, eventName); | ||
}, | ||
@@ -446,4 +363,3 @@ canvasRenderingContext2D: function canvasRenderingContext2D(_ref7) { | ||
properties = _ref7.properties; | ||
var vnode = target; | ||
var canvas = getNode(vnode); | ||
var canvas = getNode(target); | ||
var context = canvas.getContext('2d'); | ||
@@ -450,0 +366,0 @@ |
{ | ||
"name": "driver-worker", | ||
"version": "0.6.6-2", | ||
"version": "0.6.6-3", | ||
"description": "Worker driver for Rax", | ||
@@ -5,0 +5,0 @@ "license": "BSD-3-Clause", |
@@ -52,12 +52,12 @@ const global = typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : new Function('return this')(); | ||
function isProperty(node, prop, val) { | ||
return typeof val === 'object' || ( | ||
return typeof val === 'object' || | ||
node.nodeType === 1 && BOOL_PROPERTY[node.nodeName] && BOOL_PROPERTY[node.nodeName][prop] | ||
); | ||
; | ||
} | ||
const setImmediate = global.setImmediate || function (cb) { | ||
const setImmediate = global.setImmediate || function(cb) { | ||
return setTimeout(cb, 0); | ||
}; | ||
const requestAnimationFrame = global.requestAnimationFrame || function (cb) { | ||
const requestAnimationFrame = global.requestAnimationFrame || function(cb) { | ||
return setTimeout(cb, 16); | ||
@@ -71,3 +71,3 @@ }; | ||
export default function () { | ||
export default function() { | ||
let observers = []; | ||
@@ -553,6 +553,6 @@ let pendingMutations = false; | ||
Object.defineProperty(this, property, { | ||
get: function () { | ||
get: function() { | ||
return propertyValues[property]; | ||
}, | ||
set: function (value) { | ||
set: function(value) { | ||
propertyValues[property] = value; | ||
@@ -559,0 +559,0 @@ } |
@@ -0,1 +1,3 @@ | ||
import setStyle from './set-style'; | ||
// feature-detect support for event listener options | ||
@@ -21,134 +23,44 @@ let supportsPassive = false; | ||
const UNBUBBLES = [ | ||
'appear', | ||
'disappear', | ||
'scroll', | ||
'blur', | ||
'focus', | ||
'load', | ||
'unload', | ||
'resize', | ||
]; | ||
function isUnbubbleEvent(evtName) { | ||
return UNBUBBLES.indexOf(evtName) !== -1; | ||
} | ||
const PREFIX_PROPS = { | ||
flex: true, | ||
alignItems: true, | ||
alignSelf: true, | ||
flexDirection: true, | ||
justifyContent: true, | ||
flexWrap: true, | ||
lineClamp: true, | ||
textSizeAdjust: true, | ||
textDecorationLine: true, | ||
textDecorationColor: true, | ||
textDecorationStyle: true, | ||
textDecorationSkip: true, | ||
writingMode: true, | ||
animatin: true, | ||
animationName: true, | ||
animationDuration: true, | ||
animationTimingFunction: true, | ||
animationDelay: true, | ||
animationIterationCount: true, | ||
animationDirection: true, | ||
animationFillMode: true, | ||
animationPlayState: true, | ||
transform: true, | ||
transformOrigin: true, | ||
transformStyle: true, | ||
perspective: true, | ||
perspectiveOrigin: true, | ||
backfaceVisibility: true, | ||
appearance: true, | ||
userSelect: true, | ||
columns: true, | ||
columnWidth: true, | ||
columnCount: true, | ||
columnGap: true, | ||
columnRule: true, | ||
columnRuleWidth: true, | ||
columnRuleStyle: true, | ||
columnRuleColor: true, | ||
columnSpan: true, | ||
columnFill: true, | ||
columnBreakBefore: true, | ||
columnBreakAfter: true, | ||
columnBreakInside: true, | ||
const NO_BUBBLES_EVENTS = { | ||
// Resource Events and Progress Events | ||
load: true, | ||
error: true, | ||
unload: true, | ||
abort: true, | ||
loadstart: true, | ||
progress: true, | ||
loadend: true, | ||
// Focus Events | ||
blur: true, | ||
focus: true, | ||
// View Events | ||
scroll: true, // Not bubles on elements | ||
appear: true, | ||
disappear: true, | ||
// Uncategorized events | ||
invalid: true | ||
}; | ||
const PREFIX_PROP_VALS = { | ||
position: 'sticky', | ||
display: 'flex', | ||
}; | ||
export default ({ worker, tagNamePrefix = '' }) => { | ||
const NODES = new Map(); | ||
const registeredEventCounts = {}; | ||
const StylePrefixer = { | ||
shouldPrefix(prop) { | ||
return PREFIX_PROPS[prop] || PREFIX_PROP_VALS[prop]; | ||
}, | ||
}; | ||
Object.keys(PREFIX_PROPS).forEach((prop) => { | ||
StylePrefixer[prop] = (value, style = {}) => { | ||
style['webkit' + prop[0].toUpperCase() + prop.slice(1)] = value; | ||
style[prop] = value; | ||
return style; | ||
}; | ||
}); | ||
Object.keys(PREFIX_PROP_VALS).forEach((prop) => { | ||
const rule = PREFIX_PROPS[prop]; | ||
StylePrefixer[prop] = (value, style = {}) => { | ||
if (value === rule) { | ||
style[prop] = ['-webkit-' + rule, rule]; | ||
} else { | ||
style[prop] = value; | ||
} | ||
return style; | ||
}; | ||
}); | ||
function applyCompatibleStyle(node, styleObject) { | ||
let tranformedStyles = {}; | ||
for (let prop in styleObject) { | ||
let val = styleObject[prop]; | ||
if (StylePrefixer.shouldPrefix(prop)) { | ||
StylePrefixer[prop](val, tranformedStyles); | ||
} else { | ||
tranformedStyles[prop] = val; | ||
} | ||
function setNode(vnode, node) { | ||
node.$$id = vnode.$$id; | ||
return NODES.set(vnode.$$id, node); | ||
} | ||
for (let prop in tranformedStyles) { | ||
const transformValue = tranformedStyles[prop]; | ||
// if browser only accept -webkit-flex | ||
// node.style.display = 'flex' will not work | ||
if (Array.isArray(transformValue)) { | ||
for (let i = 0; i < transformValue.length; i++) { | ||
node.style[prop] = transformValue[i]; | ||
} | ||
} else { | ||
node.style[prop] = transformValue; | ||
} | ||
function getNode(vnode) { | ||
if (!vnode) return null; | ||
if (vnode.nodeName === 'BODY') return document.body; | ||
return NODES.get(vnode.$$id); | ||
} | ||
} | ||
export default ({ worker, tagNamePrefix = '' }) => { | ||
const NODES = new Map(); | ||
const registeredEventCounts = {}; | ||
function getNode(node) { | ||
if (!node) return null; | ||
if (node.nodeName === 'BODY') return document.body; | ||
return NODES.get(node.$$id); | ||
function deleteNode(vnode) { | ||
return NODES.delete(vnode.$$id); | ||
} | ||
function addEvent(name, vnode) { | ||
if (isUnbubbleEvent(name)) { | ||
addUnbubbleEvent(name, vnode); | ||
function addEvent(node, name) { | ||
if (NO_BUBBLES_EVENTS[name]) { | ||
addNoBubblesEventListener(node, name); | ||
} else { | ||
@@ -167,5 +79,5 @@ const registeredCount = registeredEventCounts[name]; | ||
function removeEvent(name, vnode) { | ||
if (isUnbubbleEvent(name)) { | ||
removeUnbubbleEvent(name, vnode); | ||
function removeEvent(node, name) { | ||
if (NO_BUBBLES_EVENTS[name]) { | ||
removeNoBubblesEventListener(node, name); | ||
} else { | ||
@@ -179,31 +91,26 @@ registeredEventCounts[name]--; | ||
const unbubbleEventStore = {}; | ||
function addUnbubbleEvent(name, vnode) { | ||
const evtStore = unbubbleEventStore[name] = unbubbleEventStore[name] || {}; | ||
// el may not add to DOM Tree | ||
setTimeout(() => { | ||
const el = getNode(vnode); | ||
if (el) { | ||
el.addEventListener(name, evtStore[vnode.$$id] = function (evt) { | ||
const target = { $$id: el.$$id }; | ||
worker.postMessage({ | ||
type: 'event', | ||
event: { | ||
type: name, | ||
target, | ||
currentTarget: target, | ||
detail: evt.detail | ||
} | ||
}); | ||
}); | ||
} | ||
}, 0); | ||
function addNoBubblesEventListener(node, name) { | ||
function listener(evt) { | ||
const target = { | ||
$$id: node.$$id | ||
}; | ||
worker.postMessage({ | ||
type: 'event', | ||
event: { | ||
type: name, | ||
target, | ||
currentTarget: target, | ||
detail: evt.detail | ||
} | ||
}); | ||
}; | ||
node[`__$${name}_listener__`] = listener; | ||
node.addEventListener(name, listener); | ||
} | ||
function removeUnbubbleEvent(name, vnode) { | ||
const evtStore = unbubbleEventStore[name] = unbubbleEventStore[name] || {}; | ||
if (evtStore[vnode.$$id]) { | ||
const el = getNode(vnode); | ||
el && el.removeEventListener(name, evtStore[vnode.$$id]); | ||
delete evtStore[vnode.$$id]; | ||
function removeNoBubblesEventListener(node, name) { | ||
const listener = node[`__$${name}_listener__`]; | ||
if (listener) { | ||
node.removeEventListener(name, listener); | ||
node[`__$${name}_listener__`] = null; | ||
} | ||
@@ -214,6 +121,4 @@ } | ||
function getTouch(e) { | ||
let t = | ||
e.changedTouches && e.changedTouches[0] || | ||
e.touches && e.touches[0] || | ||
e; | ||
let t = e.changedTouches && e.changedTouches[0] || | ||
e.touches && e.touches[0] || e; | ||
return t && { pageX: t.pageX, pageY: t.pageY }; | ||
@@ -301,2 +206,3 @@ } | ||
node = document.createElement(tagNamePrefix + vnode.nodeName); | ||
if (vnode.className) { | ||
@@ -307,3 +213,3 @@ node.className = vnode.className; | ||
if (vnode.style) { | ||
applyCompatibleStyle(node, vnode.style); | ||
setStyle(node, vnode.style); | ||
} | ||
@@ -331,3 +237,3 @@ | ||
for (let i = 0; i < vnode.events.length; i++) { | ||
addEvent(vnode.events[i], vnode); | ||
addEvent(node, vnode.events[i]); | ||
} | ||
@@ -339,4 +245,3 @@ } | ||
node.$$id = vnode.$$id; | ||
NODES.set(vnode.$$id, node); | ||
setNode(vnode, node); | ||
return node; | ||
@@ -358,3 +263,5 @@ } | ||
for (let i = removedNodes.length; i--;) { | ||
parent.removeChild(getNode(removedNodes[i])); | ||
let node = getNode(removedNodes[i]); | ||
parent.removeChild(node); | ||
deleteNode(node); | ||
} | ||
@@ -377,10 +284,10 @@ } | ||
attributes({ target, attributeName, newValue, style }) { | ||
let vnode = target; | ||
let node = getNode(vnode); | ||
let node = getNode(target); | ||
// TODO: some with `createNode`, should processed by one method | ||
if (style) { | ||
applyCompatibleStyle(node, style); | ||
setStyle(node, style); | ||
} else if (newValue == null) { | ||
node.removeAttribute(attributeName); | ||
} else if (typeof newValue === 'object') { | ||
} else if (typeof newValue === 'object' || typeof newValue === 'boolean') { | ||
node[attributeName] = newValue; | ||
@@ -392,15 +299,15 @@ } else { | ||
characterData({ target, newValue }) { | ||
let vnode = target; | ||
let node = getNode(vnode); | ||
let node = getNode(target); | ||
node[TEXT_CONTENT_ATTR] = newValue; | ||
}, | ||
addEvent({ target, eventName }) { | ||
addEvent(eventName, target); | ||
let node = getNode(target); | ||
addEvent(node, eventName); | ||
}, | ||
removeEvent({ target, eventName }) { | ||
removeEvent(eventName, target); | ||
let node = getNode(target); | ||
removeEvent(node, eventName); | ||
}, | ||
canvasRenderingContext2D({ target, method, args, properties }) { | ||
let vnode = target; | ||
let canvas = getNode(vnode); | ||
let canvas = getNode(target); | ||
let context = canvas.getContext('2d'); | ||
@@ -407,0 +314,0 @@ |
85085
10
2668