Skip to content

Instantly share code, notes, and snippets.

@rossjha
Last active August 22, 2022 16:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rossjha/a37b942553311f41cbb07bdce26acece to your computer and use it in GitHub Desktop.
Save rossjha/a37b942553311f41cbb07bdce26acece to your computer and use it in GitHub Desktop.
Range V
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
export default class extends Component {
@tracked start = 25;
@tracked end = 75;
@action setRangeValues([start, end]) {
this.start = start;
this.end = end;
}
}
import Controller from '@ember/controller';
export default class ApplicationController extends Controller {
}
import { modifier } from "ember-modifier";
export default modifier((element, [onInputRange]) => {
const rangeStart = element.querySelector('.range-start');
const rangeEnd = element.querySelector('.range-end');
function handleEvt(evt) {
const startValue = parseInt(rangeStart.value);
const endValue = parseInt(rangeEnd.value);
rangeStart.style.zIndex = 1;
rangeEnd.style.zIndex = 2;
if (startValue > endValue) {
rangeStart.style.zIndex = 2;
rangeEnd.style.zIndex = 1;
}
onInputRange([startValue, endValue]);
}
document.addEventListener("input", handleEvt);
return () => {
document.removeEventListener("input", handleEvt);
};
});
@import "https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css";
body{
background: #F9FAFB;
}
.Input-Range input[type="range"] {
pointer-events: none;
cursor: pointer;
}
.Input-Range input[type="range"]::-webkit-slider-thumb {
pointer-events: all;
}
.Input-Range input[type="range"]:focus {
outline: none;
}
.Input-Range input[type="range"]:focus::-webkit-slider-thumb {
outline: 3px solid blue;
border-radius: 50%;
}
<main class="container mx-auto my-8 bg-gray-50">
<MyForm/>
{{outlet}}
</main>
<div class="Input-Range relative h-4" ...attributes {{on-input-range @doOnInputRange}}>
<input
type="range"
class="range-start absolute w-full"
min={{@min}}
max={{@max}}
step={{@step}}
value={{@startValue}}
>
<input
type="range"
class="range-end absolute w-full"
min={{@min}}
max={{@max}}
step={{@step}}
value={{@endValue}}
>
</div>
<InputRange
@min="0"
@max="100"
@step="1"
@startValue={{this.start}}
@endValue={{this.end}}
@doOnInputRange={{this.setRangeValues}}
/>
<div>
{{concat "Start: " this.start " End: " this.end}}
</div>
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0",
"ember-data": "3.18.0",
"ember-truth-helpers": "3.0.0",
"ember-modifier": "3.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment