* Commit updated Javascript packages * Bump preact from 10.5.4 to 10.5.5 in /build/javascript (#265) * Trying a new github workflow to install javascript packages * Bump tailwindcss from 1.9.2 to 1.9.4 in /build/javascript (#266) Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 1.9.2 to 1.9.4. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/master/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v1.9.2...v1.9.4) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Commit updated Javascript packages * Bump preact from 10.5.4 to 10.5.5 in /build/javascript Bumps [preact](https://github.com/preactjs/preact) from 10.5.4 to 10.5.5. - [Release notes](https://github.com/preactjs/preact/releases) - [Commits](https://github.com/preactjs/preact/compare/10.5.4...10.5.5) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Gabe Kangas <gabek@real-ity.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Owncast <owncast@owncast.online> * Bump @justinribeiro/lite-youtube in /build/javascript Bumps [@justinribeiro/lite-youtube](https://github.com/justinribeiro/lite-youtube) from 0.9.0 to 0.9.1. - [Release notes](https://github.com/justinribeiro/lite-youtube/releases) - [Commits](https://github.com/justinribeiro/lite-youtube/commits) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Owncast <owncast@owncast.online> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gabe Kangas <gabek@real-ity.com>
196 lines
6.0 KiB
JavaScript
196 lines
6.0 KiB
JavaScript
import {
|
|
render as preactRender,
|
|
hydrate as preactHydrate,
|
|
options,
|
|
toChildArray,
|
|
Component
|
|
} from 'preact';
|
|
|
|
export const REACT_ELEMENT_TYPE =
|
|
(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||
|
|
0xeac7;
|
|
|
|
const CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;
|
|
|
|
// Input types for which onchange should not be converted to oninput.
|
|
// type="file|checkbox|radio", plus "range" in IE11.
|
|
// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches "range")
|
|
const ONCHANGE_INPUT_TYPES =
|
|
typeof Symbol != 'undefined' ? /fil|che|rad/i : /fil|che|ra/i;
|
|
|
|
// Some libraries like `react-virtualized` explicitly check for this.
|
|
Component.prototype.isReactComponent = {};
|
|
|
|
// `UNSAFE_*` lifecycle hooks
|
|
// Preact only ever invokes the unprefixed methods.
|
|
// Here we provide a base "fallback" implementation that calls any defined UNSAFE_ prefixed method.
|
|
// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.
|
|
// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.
|
|
// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.
|
|
// See https://github.com/preactjs/preact/issues/1941
|
|
[
|
|
'componentWillMount',
|
|
'componentWillReceiveProps',
|
|
'componentWillUpdate'
|
|
].forEach(key => {
|
|
Object.defineProperty(Component.prototype, key, {
|
|
configurable: true,
|
|
get() {
|
|
return this['UNSAFE_' + key];
|
|
},
|
|
set(v) {
|
|
Object.defineProperty(this, key, {
|
|
configurable: true,
|
|
writable: true,
|
|
value: v
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Proxy render() since React returns a Component reference.
|
|
* @param {import('./internal').VNode} vnode VNode tree to render
|
|
* @param {import('./internal').PreactElement} parent DOM node to render vnode tree into
|
|
* @param {() => void} [callback] Optional callback that will be called after rendering
|
|
* @returns {import('./internal').Component | null} The root component reference or null
|
|
*/
|
|
export function render(vnode, parent, callback) {
|
|
// React destroys any existing DOM nodes, see #1727
|
|
// ...but only on the first render, see #1828
|
|
if (parent._children == null) {
|
|
parent.textContent = '';
|
|
}
|
|
|
|
preactRender(vnode, parent);
|
|
if (typeof callback == 'function') callback();
|
|
|
|
return vnode ? vnode._component : null;
|
|
}
|
|
|
|
export function hydrate(vnode, parent, callback) {
|
|
preactHydrate(vnode, parent);
|
|
if (typeof callback == 'function') callback();
|
|
|
|
return vnode ? vnode._component : null;
|
|
}
|
|
|
|
let oldEventHook = options.event;
|
|
options.event = e => {
|
|
if (oldEventHook) e = oldEventHook(e);
|
|
e.persist = empty;
|
|
e.isPropagationStopped = isPropagationStopped;
|
|
e.isDefaultPrevented = isDefaultPrevented;
|
|
return (e.nativeEvent = e);
|
|
};
|
|
|
|
function empty() {}
|
|
|
|
function isPropagationStopped() {
|
|
return this.cancelBubble;
|
|
}
|
|
|
|
function isDefaultPrevented() {
|
|
return this.defaultPrevented;
|
|
}
|
|
|
|
let classNameDescriptor = {
|
|
configurable: true,
|
|
get() {
|
|
return this.class;
|
|
}
|
|
};
|
|
|
|
let oldVNodeHook = options.vnode;
|
|
options.vnode = vnode => {
|
|
let type = vnode.type;
|
|
let props = vnode.props;
|
|
let normalizedProps = props;
|
|
|
|
// only normalize props on Element nodes
|
|
if (typeof type === 'string') {
|
|
normalizedProps = {};
|
|
|
|
for (let i in props) {
|
|
let value = props[i];
|
|
|
|
if (i === 'defaultValue' && 'value' in props && props.value == null) {
|
|
// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.
|
|
// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.
|
|
i = 'value';
|
|
} else if (i === 'download' && value === true) {
|
|
// Calling `setAttribute` with a truthy value will lead to it being
|
|
// passed as a stringified value, e.g. `download="true"`. React
|
|
// converts it to an empty string instead, otherwise the attribute
|
|
// value will be used as the file name and the file will be called
|
|
// "true" upon downloading it.
|
|
value = '';
|
|
} else if (/ondoubleclick/i.test(i)) {
|
|
i = 'ondblclick';
|
|
} else if (
|
|
/^onchange(textarea|input)/i.test(i + type) &&
|
|
!ONCHANGE_INPUT_TYPES.test(props.type)
|
|
) {
|
|
i = 'oninput';
|
|
} else if (/^on(Ani|Tra|Tou|BeforeInp)/.test(i)) {
|
|
i = i.toLowerCase();
|
|
} else if (CAMEL_PROPS.test(i)) {
|
|
i = i.replace(/[A-Z0-9]/, '-$&').toLowerCase();
|
|
} else if (value === null) {
|
|
value = undefined;
|
|
}
|
|
|
|
normalizedProps[i] = value;
|
|
}
|
|
|
|
// Add support for array select values: <select multiple value={[]} />
|
|
if (
|
|
type == 'select' &&
|
|
normalizedProps.multiple &&
|
|
Array.isArray(normalizedProps.value)
|
|
) {
|
|
// forEach() always returns undefined, which we abuse here to unset the value prop.
|
|
normalizedProps.value = toChildArray(props.children).forEach(child => {
|
|
child.props.selected =
|
|
normalizedProps.value.indexOf(child.props.value) != -1;
|
|
});
|
|
}
|
|
|
|
vnode.props = normalizedProps;
|
|
}
|
|
|
|
if (type && props.class != props.className) {
|
|
classNameDescriptor.enumerable = 'className' in props;
|
|
if (props.className != null) normalizedProps.class = props.className;
|
|
Object.defineProperty(normalizedProps, 'className', classNameDescriptor);
|
|
}
|
|
|
|
vnode.$$typeof = REACT_ELEMENT_TYPE;
|
|
|
|
if (oldVNodeHook) oldVNodeHook(vnode);
|
|
};
|
|
|
|
// Only needed for react-relay
|
|
let currentComponent;
|
|
const oldBeforeRender = options._render;
|
|
options._render = function(vnode) {
|
|
if (oldBeforeRender) {
|
|
oldBeforeRender(vnode);
|
|
}
|
|
currentComponent = vnode._component;
|
|
};
|
|
|
|
// This is a very very private internal function for React it
|
|
// is used to sort-of do runtime dependency injection. So far
|
|
// only `react-relay` makes use of it. It uses it to read the
|
|
// context value.
|
|
export const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {
|
|
ReactCurrentDispatcher: {
|
|
current: {
|
|
readContext(context) {
|
|
return currentComponent._globalContext[context._id].props.value;
|
|
}
|
|
}
|
|
}
|
|
};
|