match slider as function
This commit is contained in:
parent
c93e4a951a
commit
276cf858fc
2 changed files with 26 additions and 28 deletions
|
|
@ -13,7 +13,7 @@ export class SliderWidget extends WidgetType {
|
||||||
}
|
}
|
||||||
|
|
||||||
eq(other) {
|
eq(other) {
|
||||||
const isSame = other.value.toFixed(4) == this.value.toFixed(4);
|
const isSame = other.value.toFixed(4) == this.value.toFixed(4) && other.min == this.min && other.max == this.max;
|
||||||
return isSame;
|
return isSame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@ export class SliderWidget extends WidgetType {
|
||||||
slider.value = this.value;
|
slider.value = this.value;
|
||||||
slider.from = this.from;
|
slider.from = this.from;
|
||||||
slider.to = this.to;
|
slider.to = this.to;
|
||||||
slider.className = 'w-16';
|
slider.className = 'w-16 translate-y-1.5';
|
||||||
return wrap;
|
return wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -52,26 +52,28 @@ let nodeValue = (node, view) => view.state.doc.sliceString(node.from, node.to);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}; */
|
}; */
|
||||||
// matches something like 123.xxx and returns slider widget
|
|
||||||
let matchNumberSlider = (node, view) => {
|
// matches something like slider(123) and returns slider widget
|
||||||
if (
|
let matchSliderFunction = (node, view) => {
|
||||||
node.name === 'MemberExpression' &&
|
if (node.name === 'CallExpression' /* && node.node.firstChild.name === 'ArgList' */) {
|
||||||
node.node.firstChild.name === 'Number' &&
|
let name = nodeValue(node.node.firstChild, view); // slider ?
|
||||||
node.node.lastChild.name === 'PropertyName'
|
if (name === 'slider') {
|
||||||
) {
|
const args = node.node.lastChild.getChildren('Number');
|
||||||
// node is sth like 123.xxx
|
if (!args.length) {
|
||||||
let prop = nodeValue(node.node.lastChild, view); // get prop name (e.g. xxx)
|
return;
|
||||||
if (prop === 'slider') {
|
}
|
||||||
let value = nodeValue(node.node.firstChild, view); // get number (e.g. 123)
|
const [value, min = 0, max = 1] = args.map((node) => nodeValue(node, view));
|
||||||
// console.log('slider value', value);
|
//console.log('slider value', value, min, max);
|
||||||
let { from, to } = node.node.firstChild;
|
let { from, to } = args[0];
|
||||||
let min = 0;
|
let widget = Decoration.widget({
|
||||||
let max = 10;
|
|
||||||
return Decoration.widget({
|
|
||||||
widget: new SliderWidget(Number(value), min, max, from, to),
|
widget: new SliderWidget(Number(value), min, max, from, to),
|
||||||
side: 0,
|
side: 0,
|
||||||
});
|
});
|
||||||
|
//widget._range = widget.range(from);
|
||||||
|
widget._range = widget.range(node.from);
|
||||||
|
return widget;
|
||||||
}
|
}
|
||||||
|
// node is sth like 123.xxx
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -83,14 +85,11 @@ export function sliders(view) {
|
||||||
from,
|
from,
|
||||||
to,
|
to,
|
||||||
enter: (node) => {
|
enter: (node) => {
|
||||||
let numberSlider = matchNumberSlider(node, view);
|
let widget = matchSliderFunction(node, view);
|
||||||
if (numberSlider) {
|
// let widget = matchNumber(node, view);
|
||||||
widgets.push(numberSlider.range(node.from));
|
if (widget) {
|
||||||
|
widgets.push(widget._range || widget.range(node.from));
|
||||||
}
|
}
|
||||||
/* let number = matchNumber(node, view);
|
|
||||||
if (number) {
|
|
||||||
widgets.push(number.range(node.from));
|
|
||||||
} */
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -150,11 +149,9 @@ function updateSliderValue(view, e) {
|
||||||
if (before === next) {
|
if (before === next) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//console.log('before', before, '->', insert);
|
|
||||||
let change = { from: draggedSlider.from, to: draggedSlider.to, insert };
|
let change = { from: draggedSlider.from, to: draggedSlider.to, insert };
|
||||||
draggedSlider.to = draggedSlider.from + insert.length;
|
draggedSlider.to = draggedSlider.from + insert.length;
|
||||||
//console.log('change', change);
|
|
||||||
view.dispatch({ changes: change });
|
view.dispatch({ changes: change });
|
||||||
|
window.postMessage({ type: 'slider-change', value: next });
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ module.exports = {
|
||||||
content: [
|
content: [
|
||||||
'./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}',
|
'./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}',
|
||||||
'../packages/react/src/**/*.{html,js,jsx,md,mdx,ts,tsx}',
|
'../packages/react/src/**/*.{html,js,jsx,md,mdx,ts,tsx}',
|
||||||
|
'../packages/codemirror/slider.mjs',
|
||||||
],
|
],
|
||||||
theme: {
|
theme: {
|
||||||
extend: {
|
extend: {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue