@@ -208,26 +208,24 @@ Elm.Native.Graphics.Input.make = function(elm) {
208208 field.elm_signal = model.signal;
209209 field.elm_handler = model.handler;
210210
211− field.id = 'test';
212− field.type = type;
211+ field.type = model.type;
213212 field.placeholder = JS.fromString(model.placeHolder);
214− field.value = JS.fromString(model.state.string);
215− setRange(field, model.state.selectionStart, model.state.selectionEnd, 'forward');
213+ field.value = JS.fromString(model.content.string);
214+ var selection = model.content.selection;
215+ var direction = selection.direction.ctor === 'Forward' ? 'forward' : 'backward';
216+ setRange(field, selection.start, selection.end, direction);
216217 field.style.border = 'none';
217− state = model.state;
218218
219219 function update() {
220− var start = field.selectionStart;
221− var end = field.selectionEnd;
222− if (field.selectionDirection === 'backward') {
223− start = end;
224− end = field.selectionStart;
225− }
226− elm.notify(events.id, field.elm_handler({
220+ var direction = field.selectionDirection === 'backward' ? 'Backward' : 'Forward';
221+ elm.notify(field.elm_signal.id, field.elm_handler({
227222 _:{},
228223 string:JS.toString(field.value),
229− selectionStart:start,
230− selectionEnd:end
224+ selection: {
225+ start:field.selectionStart,
226+ end:field.selectionEnd,
227+ direction: { ctor:direction }
228+ },
231229 }));
232230 }
233231 function mousedown() {
@@ -246,16 +244,16 @@ Elm.Native.Graphics.Input.make = function(elm) {
246244
247245 function updateField(node, oldModel, newModel) {
248246 node.elmHandler = newModel.handler;
249− var newStr = JS.fromString(newModel.state.string);
247+ var newStr = JS.fromString(newModel.content.string);
250248 if (node.value !== newStr) node.value = newStr;
251249
252− var start = newModel.state.selectionStart;
253− var end = newModel.state.selectionEnd;
254− var direction = 'forward';
250+ var selection = newModel.content.selection;
251+ var start = selection.start;
252+ var end = selection.end;
253+ var direction = selection.direction.ctor === 'Forward' ? 'forward' : 'backward';
255254 if (end < start) {
256255 start = end;
257− end = newModel.state.selectionStart;
258− direction = 'backward';
256+ end = selection.start;
259257 }
260258
261259 if (node.selectionStart !== start
@@ -266,17 +264,18 @@ Elm.Native.Graphics.Input.make = function(elm) {
266264 }
267265
268266 function mkField(type) {
269− function field(signal, handler, placeHolder, state) {
267+ function field(signal, handler, placeHolder, content) {
270268 return A3(newElement, 200, 30, {
271269 ctor: 'Custom',
272270 type: type + 'Input',
273− render: render,
274− update: update,
271+ render: renderField,
272+ update: updateField,
275273 model: {
276274 signal:signal,
277275 handler:handler,
278276 placeHolder:placeHolder,
279− state:state
277+ content:content,
278+ type:type
280279 }
281280 });
282281 }