Skip to content

Commit 01d3acf

Browse files
committed
Merge pull request hojberg#14 from EtienneLem/master
Keydown event
2 parents 1b4fb74 + 5e3fdd2 commit 01d3acf

File tree

2 files changed

+50
-6
lines changed

2 files changed

+50
-6
lines changed

public/js/lib/views/arrow_configuration_view.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,20 @@ if (!('CSSArrowPlease' in window)) window.CSSArrowPlease = {};
5151
**/
5252
_attachEvents: function () {
5353
var _updateModelProxy = $.proxy( this._updateModel, this),
54+
_updateInputProxy = $.proxy( this._updateInput, this),
5455
container = this.container,
55-
selectors = [ '.position',
56-
'.size',
57-
'.base_color',
58-
'.border_width',
59-
'.border_color'
56+
selectors = [ { classname: '.position', keyboard_interactive: false },
57+
{ classname: '.size', keyboard_interactive: true },
58+
{ classname: '.base_color', keyboard_interactive: false },
59+
{ classname: '.border_width', keyboard_interactive: true },
60+
{ classname: '.border_color', keyboard_interactive: false }
6061
];
6162

6263
$.each(selectors, function (i, selector) {
63-
container.delegate(selector, 'change', _updateModelProxy);
64+
container.delegate(selector.classname, 'change', _updateModelProxy);
65+
if (selector.keyboard_interactive) {
66+
container.delegate(selector.classname, 'keydown', _updateInputProxy);
67+
}
6468
});
6569
},
6670

@@ -85,6 +89,18 @@ if (!('CSSArrowPlease' in window)) window.CSSArrowPlease = {};
8589

8690
if (attr === 'borderWidth' || attr === 'size') val = parseInt(val, 10);
8791
this.model.set(attr, val);
92+
},
93+
94+
_updateInput: function (ev) {
95+
if (ev.keyCode != 38 && ev.keyCode != 40) return;
96+
97+
var target = $(ev.currentTarget),
98+
val = parseInt(target.val()),
99+
increment = ev.keyCode == 38 ? 1 : -1,
100+
multiply = ev.shiftKey ? 10 : 1
101+
102+
target.val(val + increment * multiply);
103+
this._updateModel(ev)
88104
}
89105

90106
};

public/js/spec/views/arrow_configuration_view_spec.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,34 @@ describe("CSSArrowPlease.ArrowConfigurationView", function () {
6969
expect( arrow.get('borderColor') ).toEqual('#f00');
7070
});
7171

72+
it('increases or decreases value accordingly when arrows are pressed', function() {
73+
var objects = [
74+
{ selector: '.size', arrowAttr: 'size', defaultVal: 30 },
75+
{ selector: '.border_width', arrowAttr: 'borderWidth', defaultVal: 4 }
76+
],
77+
keystrokes = [
78+
{ key: 38, increment: 1, shift: false },
79+
{ key: 38, increment: 10, shift: true },
80+
{ key: 40, increment: -1, shift: false },
81+
{ key: 40, increment: -10, shift: true }
82+
];
83+
84+
$.each(objects, function (i, object) {
85+
var elem = $container.find(object.selector),
86+
defaultVal = object.defaultVal,
87+
arrowAttr = object.arrowAttr;
88+
89+
$.each(keystrokes, function (i, keystroke) {
90+
var keydown = $.Event('keydown')
91+
keydown.keyCode = keystroke.key;
92+
keydown.shiftKey = keystroke.shift;
93+
94+
elem.val(defaultVal).trigger(keydown);
95+
expect( arrow.get(arrowAttr) ).toEqual(defaultVal + keystroke.increment);
96+
});
97+
});
98+
});
99+
72100
});
73101
});
74102

0 commit comments

Comments
 (0)