forked from MapComplete/MapComplete
Add elevator icons
This commit is contained in:
parent
92bd6414e4
commit
3441e7c9f7
5 changed files with 77 additions and 46 deletions
|
@ -4,9 +4,10 @@ import {UIEventSource} from "../../Logic/UIEventSource";
|
||||||
export default class Slider extends InputElement<number> {
|
export default class Slider extends InputElement<number> {
|
||||||
|
|
||||||
private readonly _value: UIEventSource<number>
|
private readonly _value: UIEventSource<number>
|
||||||
private min: number;
|
private readonly min: number;
|
||||||
private max: number;
|
private readonly max: number;
|
||||||
private step: number;
|
private readonly step: number;
|
||||||
|
private readonly vertical: boolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a slider input element for natural numbers
|
* Constructs a slider input element for natural numbers
|
||||||
|
@ -16,13 +17,15 @@ export default class Slider extends InputElement<number> {
|
||||||
*/
|
*/
|
||||||
constructor(min: number, max: number, options?: {
|
constructor(min: number, max: number, options?: {
|
||||||
value?: UIEventSource<number>,
|
value?: UIEventSource<number>,
|
||||||
step?: 1 | number
|
step?: 1 | number,
|
||||||
|
vertical?: false | boolean
|
||||||
}) {
|
}) {
|
||||||
super();
|
super();
|
||||||
this.max = max;
|
this.max = max;
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this._value = options?.value ?? new UIEventSource<number>(min)
|
this._value = options?.value ?? new UIEventSource<number>(min)
|
||||||
this.step = options?.step ?? 1;
|
this.step = options?.step ?? 1;
|
||||||
|
this.vertical = options?.vertical ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetValue(): UIEventSource<number> {
|
GetValue(): UIEventSource<number> {
|
||||||
|
@ -39,6 +42,10 @@ export default class Slider extends InputElement<number> {
|
||||||
el.oninput = () => {
|
el.oninput = () => {
|
||||||
valuestore.setData(Number(el.value))
|
valuestore.setData(Number(el.value))
|
||||||
}
|
}
|
||||||
|
if(this.vertical){
|
||||||
|
el.classList.add("vertical")
|
||||||
|
el.setAttribute('orient','vertical'); // firefox only workaround...
|
||||||
|
}
|
||||||
valuestore.addCallbackAndRunD(v => el.value = ""+valuestore.data)
|
valuestore.addCallbackAndRunD(v => el.value = ""+valuestore.data)
|
||||||
return el;
|
return el;
|
||||||
}
|
}
|
||||||
|
|
|
@ -387,6 +387,16 @@
|
||||||
],
|
],
|
||||||
"sources": []
|
"sources": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "elevator.svg",
|
||||||
|
"license": "CC-BY-SA 4.0",
|
||||||
|
"authors": [
|
||||||
|
"Yveltal"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
"https://commons.wikimedia.org/wiki/File:HZM_elevator_icon.svg"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "envelope.svg",
|
"path": "envelope.svg",
|
||||||
"license": "CC0; trivial",
|
"license": "CC0; trivial",
|
||||||
|
|
|
@ -811,6 +811,10 @@ video {
|
||||||
margin: 0.25rem;
|
margin: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.m-2 {
|
||||||
|
margin: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.m-4 {
|
.m-4 {
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
}
|
}
|
||||||
|
@ -831,10 +835,6 @@ video {
|
||||||
margin: 0.75rem;
|
margin: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.m-2 {
|
|
||||||
margin: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-6 {
|
.m-6 {
|
||||||
margin: 1.5rem;
|
margin: 1.5rem;
|
||||||
}
|
}
|
||||||
|
@ -858,6 +858,14 @@ video {
|
||||||
margin-bottom: 0.75rem;
|
margin-bottom: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mb-0 {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mt-8 {
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
.ml-3 {
|
.ml-3 {
|
||||||
margin-left: 0.75rem;
|
margin-left: 0.75rem;
|
||||||
}
|
}
|
||||||
|
@ -954,10 +962,6 @@ video {
|
||||||
margin-right: 0.25rem;
|
margin-right: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mb-0 {
|
|
||||||
margin-bottom: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.box-border {
|
.box-border {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
@ -1046,6 +1050,10 @@ video {
|
||||||
height: 2.5rem;
|
height: 2.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.h-14 {
|
||||||
|
height: 3.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.h-full {
|
.h-full {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
@ -1432,10 +1440,6 @@ video {
|
||||||
border-bottom-width: 1px;
|
border-bottom-width: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.border-solid {
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
.border-blue-500 {
|
.border-blue-500 {
|
||||||
--tw-border-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
border-color: rgba(59, 130, 246, var(--tw-border-opacity));
|
border-color: rgba(59, 130, 246, var(--tw-border-opacity));
|
||||||
|
@ -1475,11 +1479,6 @@ video {
|
||||||
--tw-border-opacity: 0.5;
|
--tw-border-opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-blue-200 {
|
|
||||||
--tw-bg-opacity: 1;
|
|
||||||
background-color: rgba(191, 219, 254, var(--tw-bg-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-white {
|
.bg-white {
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
|
background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
|
||||||
|
@ -2031,7 +2030,7 @@ a {
|
||||||
height: min-content;
|
height: min-content;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* alex */
|
/* slider */
|
||||||
|
|
||||||
input[type="range"].vertical {
|
input[type="range"].vertical {
|
||||||
-webkit-writing-mode: bt-lr;
|
-webkit-writing-mode: bt-lr;
|
||||||
|
@ -2045,24 +2044,31 @@ input[type="range"].vertical {
|
||||||
padding: 0 5px;
|
padding: 0 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
.elevatorslider::-webkit-slider-thumb {
|
.elevatorslider::-webkit-slider-thumb {
|
||||||
-webkit-appearance: none;
|
width: 100px;
|
||||||
appearance: none;
|
height: 100px;
|
||||||
width: 23px;
|
|
||||||
height: 24px;
|
|
||||||
border: 0;
|
border: 0;
|
||||||
background: url("../MapComplete/assets/svg/bug.svg");
|
background-color: #00000000 !important;
|
||||||
|
background-image: url("/assets/svg/elevator.svg");
|
||||||
|
background-size: contain;
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.elevatorslider::-moz-range-thumb {
|
.elevatorslider::-moz-range-thumb {
|
||||||
width: 23px;
|
width: 100px;
|
||||||
height: 25px;
|
height: 100px;
|
||||||
border: 0;
|
border: 0;
|
||||||
background: url("../MapComplete/assets/svg/bug.svg");
|
background-color: #00000000 !important;
|
||||||
|
background-image: url("/assets/svg/elevator.svg");
|
||||||
|
background-size: contain;
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
} */
|
}
|
||||||
|
|
||||||
.border-detail {
|
.border-detail {
|
||||||
border-color: var(--foreground-color);
|
border-color: var(--foreground-color);
|
||||||
|
|
27
index.css
27
index.css
|
@ -237,22 +237,31 @@ input[type="range"].vertical {
|
||||||
padding: 0 5px;
|
padding: 0 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* .elevatorslider::-webkit-slider-thumb {
|
.elevatorslider::-webkit-slider-thumb {
|
||||||
appearance: none;
|
width: 100px;
|
||||||
width: 23px;
|
height: 100px;
|
||||||
height: 24px;
|
|
||||||
border: 0;
|
border: 0;
|
||||||
background: url("/assets/svg/bug.svg") !important;
|
background-color: #00000000 !important;
|
||||||
|
background-image: url("/assets/svg/elevator.svg");
|
||||||
|
background-size: contain;
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.elevatorslider::-moz-range-thumb {
|
.elevatorslider::-moz-range-thumb {
|
||||||
width: 23px;
|
width: 100px;
|
||||||
height: 25px;
|
height: 100px;
|
||||||
border: 0;
|
border: 0;
|
||||||
background: url("/assets/svg/bug.svg") !important;
|
background-color: #00000000 !important;
|
||||||
|
background-image: url("/assets/svg/elevator.svg");
|
||||||
|
background-size: contain;
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
} */
|
}
|
||||||
|
|
||||||
.border-detail {
|
.border-detail {
|
||||||
border-color: var(--foreground-color);
|
border-color: var(--foreground-color);
|
||||||
|
|
9
test.ts
9
test.ts
|
@ -8,7 +8,7 @@ import Slider from "./UI/Input/Slider";
|
||||||
import Toggle, { ClickableToggle } from "./UI/Input/Toggle";
|
import Toggle, { ClickableToggle } from "./UI/Input/Toggle";
|
||||||
|
|
||||||
const testData = ["-1", "0", "0.5", "1", "1.5", "2"]
|
const testData = ["-1", "0", "0.5", "1", "1.5", "2"]
|
||||||
let slider = new Slider(0, testData.length - 1);
|
let slider = new Slider(0, testData.length - 1, {vertical: true});
|
||||||
|
|
||||||
const toggleClass = "flex border-2 border-blue-500 rounded-full w-10 h-10 place-content-center items-center"
|
const toggleClass = "flex border-2 border-blue-500 rounded-full w-10 h-10 place-content-center items-center"
|
||||||
|
|
||||||
|
@ -23,11 +23,10 @@ const values = testData.map((data, i) => new ClickableToggle(
|
||||||
}
|
}
|
||||||
))
|
))
|
||||||
.ToggleOnClick()
|
.ToggleOnClick()
|
||||||
.SetClass("flex flex-column bg-slate-200 m-4 w-10 h-10"))
|
.SetClass("flex flex-column bg-slate-200 m-2 w-10 h-10"))
|
||||||
|
|
||||||
const valCombine = new Combine(values.reverse())
|
const valCombine = new Combine(values.reverse())
|
||||||
|
|
||||||
slider.SetClass("flex vertical m-4 elevatorslider")
|
slider.SetClass("flex m-4 elevatorslider mb-0").SetStyle("height: "+3.25*testData.length+"rem")
|
||||||
|
|
||||||
new Combine([valCombine, slider]).SetClass("flex flex-row h-10").AttachTo("extradiv")
|
|
||||||
|
|
||||||
|
new Combine([valCombine.SetClass("mt-8"), slider]).SetClass("flex flex-row h-14").AttachTo("extradiv")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue