mirror of
https://github.com/pebble-dev/clay.git
synced 2026-08-31 22:36:56 -04:00
add radio component
This commit is contained in:
@@ -8,5 +8,6 @@ module.exports = {
|
||||
select: require('./select'),
|
||||
submit: require('./submit'),
|
||||
text: require('./text'),
|
||||
toggle: require('./toggle')
|
||||
toggle: require('./toggle'),
|
||||
radio: require('./radio')
|
||||
};
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
name: 'radio',
|
||||
template: require('../../templates/components/radio.tpl'),
|
||||
style: require('../../styles/clay/components/radio.scss'),
|
||||
manipulator: 'radio',
|
||||
defaults: {
|
||||
label: '',
|
||||
options: [],
|
||||
}
|
||||
};
|
||||
@@ -53,22 +53,25 @@ function ClayConfig(settings, config, $rootContainer) {
|
||||
$container.add($wrapper);
|
||||
_addItems(item.items, $wrapper);
|
||||
} else {
|
||||
var clayItem = new ClayItem(item).initialize();
|
||||
var _item = _.copyObj(item);
|
||||
_item.clayId = _items.length;
|
||||
|
||||
if (item.id) {
|
||||
_itemsById[item.id] = clayItem;
|
||||
var clayItem = new ClayItem(_item).initialize();
|
||||
|
||||
if (_item.id) {
|
||||
_itemsById[_item.id] = clayItem;
|
||||
}
|
||||
|
||||
if (item.appKey) {
|
||||
_itemsByAppKey[item.appKey] = clayItem;
|
||||
if (_item.appKey) {
|
||||
_itemsByAppKey[_item.appKey] = clayItem;
|
||||
}
|
||||
|
||||
_items.push(clayItem);
|
||||
|
||||
// set the value of the item via the manipulator to ensure consistency
|
||||
var value = typeof _settings[item.appKey] !== 'undefined' ?
|
||||
_settings[item.appKey] :
|
||||
(item.defaultValue || '');
|
||||
var value = typeof _settings[_item.appKey] !== 'undefined' ?
|
||||
_settings[_item.appKey] :
|
||||
(_item.defaultValue || '');
|
||||
|
||||
clayItem.set(value);
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ function ClayItem(config) {
|
||||
};
|
||||
|
||||
// attach event methods
|
||||
ClayEvents.call(self, self.$manipulatorTarget);
|
||||
ClayEvents.call(self, self.$element);
|
||||
|
||||
// attach the manipulator methods to the clayItem
|
||||
_.eachObj(_component.manipulator, function(methodName, method) {
|
||||
|
||||
@@ -48,6 +48,19 @@ module.exports = {
|
||||
disable: disable,
|
||||
enable: enable
|
||||
},
|
||||
radio: {
|
||||
get: function() {
|
||||
return this.$element.select('input:checked').get('value');
|
||||
},
|
||||
set: function(value) {
|
||||
this.$element
|
||||
.select('input[value="' + value.replace('"', '\\"') + '"]')
|
||||
.set('checked', true);
|
||||
return this.trigger('change');
|
||||
},
|
||||
disable: disable,
|
||||
enable: enable
|
||||
},
|
||||
color: {
|
||||
get: function() {
|
||||
return parseInt(this.$manipulatorTarget.get('value'), 16);
|
||||
|
||||
@@ -50,11 +50,10 @@ h6 {
|
||||
@include font-size(0.8);
|
||||
}
|
||||
|
||||
.component {
|
||||
label {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-bottom: $item-spacing-v;
|
||||
|
||||
.input {
|
||||
white-space: nowrap;
|
||||
@@ -84,6 +83,10 @@ h6 {
|
||||
}
|
||||
}
|
||||
|
||||
.component {
|
||||
padding-bottom: $item-spacing-v;
|
||||
@include tap-highlight();
|
||||
}
|
||||
|
||||
.section {
|
||||
background: $color-gray-4;
|
||||
@@ -126,14 +129,6 @@ h6 {
|
||||
|
||||
}
|
||||
|
||||
label.component{
|
||||
-webkit-tap-highlight-color: rgba(255, 255, 255, 0.1);
|
||||
|
||||
&:active {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
strong {
|
||||
@include font-pfdin(medium);
|
||||
color: $color-orange;
|
||||
|
||||
@@ -33,3 +33,11 @@
|
||||
font-size:$font-size;
|
||||
line-height: $base-line-height * ceil($font-size / $base-line-height);
|
||||
}
|
||||
|
||||
@mixin tap-highlight($color: rgba(255, 255, 255, 0.1)) {
|
||||
-webkit-tap-highlight-color: $color;
|
||||
|
||||
&:active {
|
||||
background-color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
@import "bourbon";
|
||||
@import "clay";
|
||||
|
||||
.component-radio {
|
||||
|
||||
@include tap-highlight(rgba(0,0,0,0));
|
||||
display: block;
|
||||
|
||||
|
||||
> .label {
|
||||
display: block;
|
||||
padding-bottom: $item-spacing-v / 2;
|
||||
}
|
||||
|
||||
.radio-group {
|
||||
|
||||
label {
|
||||
padding: $item-spacing-v / 2 0;
|
||||
@include tap-highlight();
|
||||
}
|
||||
|
||||
.label {
|
||||
font-size: 0.9em;
|
||||
padding: 0 $item-spacing-h / 2;
|
||||
}
|
||||
|
||||
input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
i {
|
||||
display: block;
|
||||
position: relative;
|
||||
border-radius: $base-height;
|
||||
width: $base-height;
|
||||
height: $base-height;
|
||||
border: 2px solid $color-gray-7;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
input:checked ~ i {
|
||||
border-color: $color-orange;
|
||||
|
||||
&:after {
|
||||
$padding: 15%;
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: $padding;
|
||||
right: $padding;
|
||||
top: $padding;
|
||||
bottom: $padding;
|
||||
border-radius: $base-height;
|
||||
background: $color-orange;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
<div class="component component-radio">
|
||||
<span class="label">{{{label}}}</span>
|
||||
<div class="radio-group">
|
||||
{{each options}}
|
||||
<label>
|
||||
<span class="label">{{{this.label}}}</span>
|
||||
<input
|
||||
type="radio"
|
||||
value="{{this.value}}"
|
||||
name="clay-{{clayId}}"
|
||||
data-manipulator-target
|
||||
/>
|
||||
<i></i>
|
||||
</label>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user