Skip to content

Commit 4d8b25b

Browse files
committed
feat(MdSlider): add editable option
1 parent dcb93d3 commit 4d8b25b

File tree

3 files changed

+86
-2
lines changed

3 files changed

+86
-2
lines changed

docs/app/pages/Components/Slider/Slider.vue

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<example src="./examples/Example.vue" />
22
<example src="./examples/WithLabel.vue" />
3+
<example src="./examples/Editable.vue" />
34

45
<template>
56
<page-container centered :title="$t('pages.slider.title')">
@@ -13,6 +14,7 @@
1314
<code-example title="Slider" :component="examples['example']" />
1415
<code-example title="Slider with label" :component="examples['with-label']" />
1516

17+
<code-example title="Slider with editable field" :component="examples['editable']" />
1618
<api-item title="API - md-slider">
1719
<p>The following options can be applied to all sliders:</p>
1820

@@ -40,11 +42,17 @@
4042
description: 'The model variable to bind the selection value. If no value is assigned, then it will use default value.',
4143
defaults: '0'
4244
},
45+
{
46+
name: 'md-editable',
47+
type: 'Boolean',
48+
description: 'Enables field for editable value of slider.',
49+
defaults: 'false'
50+
},
4351
{
4452
name: 'min',
4553
type: 'Number',
4654
description: 'Minimal value for slider.',
47-
defaults: '0'
55+
defaults: ''
4856
},
4957
{
5058
name: 'max',
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<template>
2+
<div class="slider-example">
3+
<div class="slider-demo-box" :style="{ background: getRGB }"></div>
4+
<div class="sliders-demo">
5+
<md-slider v-model="r" :max="255" md-editable>
6+
R
7+
</md-slider>
8+
<md-slider v-model="g" :max="255" md-editable>
9+
G
10+
</md-slider>
11+
<md-slider v-model="b" :max="255" md-editable>
12+
B
13+
</md-slider>
14+
</div>
15+
</div>
16+
</template>
17+
18+
<script>
19+
export default {
20+
name: 'Example',
21+
data: () => ({
22+
r: 178,
23+
g: 255,
24+
b: 89
25+
}),
26+
computed: {
27+
getRGB () {
28+
return `rgba(${this.r},${this.g},${this.b})`
29+
}
30+
}
31+
}
32+
</script>
33+
34+
<style lang="scss" scoped>
35+
.slider-example {
36+
max-width: 240px;
37+
border: 1px solid rgba(0,0,0,0.12);
38+
.slider-demo-box {
39+
height: 160px;
40+
padding: 16px;
41+
}
42+
.sliders-demo {
43+
padding: 16px 16px 0;
44+
}
45+
}
46+
</style>
47+

src/components/MdSlider/MdSlider.vue

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
<div class="md-slider-background-upper" :style="upperStyles"></div>
1515
</div>
1616
</div>
17+
<div class="md-slider-editable" v-if="mdEditable">
18+
<md-field>
19+
<md-input v-model.number="editableField" v-bind="{ disabled }"></md-input>
20+
</md-field>
21+
</div>
1722
</div>
1823
</template>
1924

@@ -41,9 +46,21 @@
4146
},
4247
name: String,
4348
required: Boolean,
44-
disabled: Boolean
49+
disabled: Boolean,
50+
mdEditable: Boolean
4551
},
4652
computed: {
53+
editableField: {
54+
get () {
55+
return this.value
56+
},
57+
set (newValue) {
58+
const value = (newValue < this.min)
59+
? this.min
60+
: newValue > this.max ? this.max : newValue
61+
this.currentValue = value || this.min
62+
},
63+
},
4764
currentValue: {
4865
get () {
4966
return this.value
@@ -84,6 +101,18 @@
84101
label {
85102
white-space: nowrap;
86103
}
104+
.md-slider-editable {
105+
width: 30px;
106+
.md-field {
107+
padding: 0;
108+
margin: 0;
109+
min-height: 20px;
110+
input {
111+
max-width: 30px;
112+
text-align: center;
113+
}
114+
}
115+
}
87116
}
88117
89118
.md-slider {

0 commit comments

Comments
 (0)