Cosmetic: adjust indentation

This commit is contained in:
Evan Czaplicki 2014-02-17 10:42:13 +01:00
parent fd74685db0
commit 8fbb9c799d

View file

@ -1,303 +1,303 @@
Elm.Native.Graphics.Input = {}; Elm.Native.Graphics.Input = {};
Elm.Native.Graphics.Input.make = function(elm) { Elm.Native.Graphics.Input.make = function(elm) {
elm.Native = elm.Native || {}; elm.Native = elm.Native || {};
elm.Native.Graphics = elm.Native.Graphics || {}; elm.Native.Graphics = elm.Native.Graphics || {};
elm.Native.Graphics.Input = elm.Native.Graphics.Input || {}; elm.Native.Graphics.Input = elm.Native.Graphics.Input || {};
if (elm.Native.Graphics.Input.values) return elm.Native.Graphics.Input.values; if (elm.Native.Graphics.Input.values) return elm.Native.Graphics.Input.values;
var Render = ElmRuntime.use(ElmRuntime.Render.Element); var Render = ElmRuntime.use(ElmRuntime.Render.Element);
var newNode = ElmRuntime.use(ElmRuntime.Render.Utils).newElement; var newNode = ElmRuntime.use(ElmRuntime.Render.Utils).newElement;
var Signal = Elm.Signal.make(elm); var Signal = Elm.Signal.make(elm);
var newElement = Elm.Graphics.Element.make(elm).newElement; var newElement = Elm.Graphics.Element.make(elm).newElement;
var JS = Elm.Native.JavaScript.make(elm); var JS = Elm.Native.JavaScript.make(elm);
var Utils = Elm.Native.Utils.make(elm); var Utils = Elm.Native.Utils.make(elm);
var Tuple2 = Utils.Tuple2; var Tuple2 = Utils.Tuple2;
function dropDown(values) { function dropDown(values) {
var entries = JS.fromList(values); var entries = JS.fromList(values);
var events = Signal.constant(entries[0]._1); var events = Signal.constant(entries[0]._1);
var drop = newNode('select'); var drop = newNode('select');
drop.style.border = '0 solid'; drop.style.border = '0 solid';
for (var i = 0; i < entries.length; ++i) { for (var i = 0; i < entries.length; ++i) {
var option = newNode('option'); var option = newNode('option');
var name = JS.fromString(entries[i]._0); var name = JS.fromString(entries[i]._0);
option.value = name; option.value = name;
option.innerHTML = name; option.innerHTML = name;
drop.appendChild(option); drop.appendChild(option);
} }
drop.addEventListener('change', function() { drop.addEventListener('change', function() {
elm.notify(events.id, entries[drop.selectedIndex]._1); elm.notify(events.id, entries[drop.selectedIndex]._1);
}); });
var t = drop.cloneNode(true); var t = drop.cloneNode(true);
t.style.visibility = "hidden"; t.style.visibility = "hidden";
elm.node.appendChild(t); elm.node.appendChild(t);
var style = window.getComputedStyle(t, null); var style = window.getComputedStyle(t, null);
var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0); var w = Math.ceil(style.getPropertyValue("width").slice(0,-2) - 0);
var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0); var h = Math.ceil(style.getPropertyValue("height").slice(0,-2) - 0);
elm.node.removeChild(t); elm.node.removeChild(t);
var element = A3(newElement, w, h, { var element = A3(newElement, w, h, {
ctor: 'Custom', ctor: 'Custom',
type: 'DropDown', type: 'DropDown',
render: function render(model) { return drop; }, render: function render(model) { return drop; },
update: function update(node, oldModel, newModel) {}, update: function update(node, oldModel, newModel) {},
model: {} model: {}
}); });
return Tuple2(Signal.constant(element), events); return Tuple2(Signal.constant(element), events);
} }
function buttons(defaultValue) { function buttons(defaultValue) {
var events = Signal.constant(defaultValue); var events = Signal.constant(defaultValue);
function render(model) { function render(model) {
var b = newNode('button'); var b = newNode('button');
b.style.display = 'block'; b.style.display = 'block';
b.elmEvent = model.event; b.elmEvent = model.event;
function click() { elm.notify(events.id, b.elmEvent); } function click() { elm.notify(events.id, b.elmEvent); }
b.addEventListener('click', click); b.addEventListener('click', click);
b.innerHTML = model.text; b.innerHTML = model.text;
return b; return b;
} }
function update(node, oldModel, newModel) { function update(node, oldModel, newModel) {
node.elmEvent = newModel.event; node.elmEvent = newModel.event;
var txt = newModel.text; var txt = newModel.text;
if (oldModel.text !== txt) node.innerHTML = txt; if (oldModel.text !== txt) node.innerHTML = txt;
} }
function button(evnt, txt) { function button(evnt, txt) {
return A3(newElement, 100, 40, { return A3(newElement, 100, 40, {
ctor: 'Custom', ctor: 'Custom',
type: 'Button', type: 'Button',
render: render, render: render,
update: update, update: update,
model: { event:evnt, text:JS.fromString(txt) } model: { event:evnt, text:JS.fromString(txt) }
}); });
} }
return { _:{}, button:F2(button), events:events }; return { _:{}, button:F2(button), events:events };
} }
function customButtons(defaultValue) { function customButtons(defaultValue) {
var events = Signal.constant(defaultValue); var events = Signal.constant(defaultValue);
function render(model) { function render(model) {
var btn = newNode('div'); var btn = newNode('div');
btn.elmEvent = model.event; btn.elmEvent = model.event;
btn.elmUp = Render.render(model.up); btn.elmUp = Render.render(model.up);
btn.elmHover = Render.render(model.hover); btn.elmHover = Render.render(model.hover);
btn.elmDown = Render.render(model.down); btn.elmDown = Render.render(model.down);
function replace(node) { function replace(node) {
if (node !== btn.firstChild) btn.replaceChild(node, btn.firstChild); if (node !== btn.firstChild) btn.replaceChild(node, btn.firstChild);
} }
var overCount = 0; var overCount = 0;
function over(e) { function over(e) {
if (overCount++ > 0) return; if (overCount++ > 0) return;
replace(btn.elmHover); replace(btn.elmHover);
} }
function out(e) { function out(e) {
if (btn.contains(e.toElement || e.relatedTarget)) return; if (btn.contains(e.toElement || e.relatedTarget)) return;
overCount = 0; overCount = 0;
replace(btn.elmUp); replace(btn.elmUp);
} }
function up() { function up() {
replace(btn.elmHover); replace(btn.elmHover);
elm.notify(events.id, btn.elmEvent); elm.notify(events.id, btn.elmEvent);
} }
function down() { replace(btn.elmDown); } function down() { replace(btn.elmDown); }
btn.addEventListener('mouseover', over); btn.addEventListener('mouseover', over);
btn.addEventListener('mouseout' , out); btn.addEventListener('mouseout' , out);
btn.addEventListener('mousedown', down); btn.addEventListener('mousedown', down);
btn.addEventListener('mouseup' , up); btn.addEventListener('mouseup' , up);
btn.appendChild(btn.elmUp); btn.appendChild(btn.elmUp);
var clicker = newNode('div'); var clicker = newNode('div');
clicker.style.width = btn.elmUp.style.width; clicker.style.width = btn.elmUp.style.width;
clicker.style.height = btn.elmUp.style.height; clicker.style.height = btn.elmUp.style.height;
clicker.style.position = 'absolute'; clicker.style.position = 'absolute';
clicker.style.top = 0; clicker.style.top = 0;
btn.appendChild(clicker); btn.appendChild(clicker);
return btn; return btn;
} }
function update(node, oldModel, newModel) { function update(node, oldModel, newModel) {
node.elmEvent = newModel.event; node.elmEvent = newModel.event;
Render.update(node.elmUp, oldModel.up, newModel.up) Render.update(node.elmUp, oldModel.up, newModel.up)
Render.update(node.elmHover, oldModel.hover, newModel.hover) Render.update(node.elmHover, oldModel.hover, newModel.hover)
Render.update(node.elmDown, oldModel.down, newModel.down) Render.update(node.elmDown, oldModel.down, newModel.down)
} }
function button(evnt, up, hover, down) { function button(evnt, up, hover, down) {
return A3(newElement, return A3(newElement,
Math.max(up.props.width, hover.props.width, down.props.width), Math.max(up.props.width, hover.props.width, down.props.width),
Math.max(up.props.height, hover.props.height, down.props.height), Math.max(up.props.height, hover.props.height, down.props.height),
{ ctor: 'Custom', { ctor: 'Custom',
type: 'CustomButton', type: 'CustomButton',
render: render, render: render,
update: update, update: update,
model: { event:evnt, up:up, hover:hover, down:down } model: { event:evnt, up:up, hover:hover, down:down }
}); });
} }
return { _:{}, customButton:F4(button), events:events }; return { _:{}, customButton:F4(button), events:events };
} }
function hoverables(defaultValue) { function hoverables(defaultValue) {
var events = Signal.constant(defaultValue); var events = Signal.constant(defaultValue);
function hoverable(handler, elem) { function hoverable(handler, elem) {
function onHover(bool) { function onHover(bool) {
elm.notify(events.id, handler(bool)); elm.notify(events.id, handler(bool));
} }
var props = Utils.replace([['hover',onHover]], elem.props); var props = Utils.replace([['hover',onHover]], elem.props);
return { props:props, element:elem.element }; return { props:props, element:elem.element };
} }
return { _:{}, hoverable:F2(hoverable), events:events }; return { _:{}, hoverable:F2(hoverable), events:events };
} }
function checkboxes(defaultValue) { function checkboxes(defaultValue) {
var events = Signal.constant(defaultValue); var events = Signal.constant(defaultValue);
function render(model) { function render(model) {
var b = newNode('input'); var b = newNode('input');
b.type = 'checkbox'; b.type = 'checkbox';
b.checked = model.checked; b.checked = model.checked;
b.style.display = 'block'; b.style.display = 'block';
b.elmHandler = model.handler; b.elmHandler = model.handler;
function change() { elm.notify(events.id, b.elmHandler(b.checked)); } function change() { elm.notify(events.id, b.elmHandler(b.checked)); }
b.addEventListener('change', change); b.addEventListener('change', change);
return b; return b;
} }
function update(node, oldModel, newModel) { function update(node, oldModel, newModel) {
node.elmHandler = newModel.handler; node.elmHandler = newModel.handler;
node.checked = newModel.checked; node.checked = newModel.checked;
return true; return true;
} }
function box(handler, checked) { function box(handler, checked) {
return A3(newElement, 13, 13, { return A3(newElement, 13, 13, {
ctor: 'Custom', ctor: 'Custom',
type: 'CheckBox', type: 'CheckBox',
render: render, render: render,
update: update, update: update,
model: { checked:checked, handler:handler } model: { checked:checked, handler:handler }
}); });
} }
return { _:{}, checkbox:F2(box), events:events }; return { _:{}, checkbox:F2(box), events:events };
} }
function setRange(node, start, end, dir) { function setRange(node, start, end, dir) {
if (node.parentNode) { if (node.parentNode) {
node.setSelectionRange(start, end, dir); node.setSelectionRange(start, end, dir);
} else { } else {
setTimeout(function(){node.setSelectionRange(start, end, dir);}, 0); setTimeout(function(){node.setSelectionRange(start, end, dir);}, 0);
} }
} }
function mkTextPool(type) { return function fields(defaultValue) { function mkTextPool(type) { return function fields(defaultValue) {
var events = Signal.constant(defaultValue); var events = Signal.constant(defaultValue);
var state = null; var state = null;
function render(model) { function render(model) {
var field = newNode('input'); var field = newNode('input');
field.elmHandler = model.handler; field.elmHandler = model.handler;
field.id = 'test'; field.id = 'test';
field.type = type; field.type = type;
field.placeholder = JS.fromString(model.placeHolder); field.placeholder = JS.fromString(model.placeHolder);
field.value = JS.fromString(model.state.string); field.value = JS.fromString(model.state.string);
setRange(field, model.state.selectionStart, model.state.selectionEnd, 'forward'); setRange(field, model.state.selectionStart, model.state.selectionEnd, 'forward');
field.style.border = 'none'; field.style.border = 'none';
state = model.state; state = model.state;
function update() { function update() {
var start = field.selectionStart, var start = field.selectionStart,
end = field.selectionEnd; end = field.selectionEnd;
if (field.selectionDirection === 'backward') { if (field.selectionDirection === 'backward') {
start = end; start = end;
end = field.selectionStart; end = field.selectionStart;
} }
state = { _:{}, state = { _:{},
string:JS.toString(field.value), string:JS.toString(field.value),
selectionStart:start, selectionStart:start,
selectionEnd:end }; selectionEnd:end };
elm.notify(events.id, field.elmHandler(state)); elm.notify(events.id, field.elmHandler(state));
} }
function mousedown() { function mousedown() {
update(); update();
elm.node.addEventListener('mouseup', mouseup); elm.node.addEventListener('mouseup', mouseup);
} }
function mouseup() { function mouseup() {
update(); update();
elm.node.removeEventListener('mouseup', mouseup) elm.node.removeEventListener('mouseup', mouseup)
} }
field.addEventListener('keyup', update); field.addEventListener('keyup', update);
field.addEventListener('mousedown', mousedown); field.addEventListener('mousedown', mousedown);
return field; return field;
} }
function update(node, oldModel, newModel) { function update(node, oldModel, newModel) {
node.elmHandler = newModel.handler; node.elmHandler = newModel.handler;
if (state === newModel.state) return; if (state === newModel.state) return;
var newStr = JS.fromString(newModel.state.string); var newStr = JS.fromString(newModel.state.string);
if (node.value !== newStr) node.value = newStr; if (node.value !== newStr) node.value = newStr;
var start = newModel.state.selectionStart; var start = newModel.state.selectionStart;
var end = newModel.state.selectionEnd; var end = newModel.state.selectionEnd;
var direction = 'forward'; var direction = 'forward';
if (end < start) { if (end < start) {
start = end; start = end;
end = newModel.state.selectionStart; end = newModel.state.selectionStart;
direction = 'backward'; direction = 'backward';
} }
if (node.selectionStart !== start if (node.selectionStart !== start
|| node.selectionEnd !== end || node.selectionEnd !== end
|| node.selectionDirection !== direction) { || node.selectionDirection !== direction) {
setRange(node, start, end, direction); setRange(node, start, end, direction);
} }
} }
function field(handler, placeHolder, state) { function field(handler, placeHolder, state) {
return A3(newElement, 200, 30, return A3(newElement, 200, 30,
{ ctor: 'Custom', { ctor: 'Custom',
type: type + 'Input', type: type + 'Input',
render: render, render: render,
update: update, update: update,
model: { handler:handler, model: { handler:handler,
placeHolder:placeHolder, placeHolder:placeHolder,
state:state } state:state }
}); });
} }
return { _:{}, field:F3(field), events:events }; return { _:{}, field:F3(field), events:events };
} }
} }
return elm.Native.Graphics.Input.values = { return elm.Native.Graphics.Input.values = {
buttons:buttons, buttons:buttons,
customButtons:customButtons, customButtons:customButtons,
hoverables:hoverables, hoverables:hoverables,
checkboxes:checkboxes, checkboxes:checkboxes,
fields:mkTextPool('text'), fields:mkTextPool('text'),
emails:mkTextPool('email'), emails:mkTextPool('email'),
passwords:mkTextPool('password'), passwords:mkTextPool('password'),
dropDown:dropDown dropDown:dropDown
}; };
}; };