2Elm.Native.Ports.make = function(elm) {
3 elm.Native = elm.Native || {};
4 elm.Native.Ports = elm.Native.Ports || {};
5 if (elm.Native.Ports.values) return elm.Native.Ports.values;
7 var Signal = Elm.Signal.make(elm);
9 function incomingSignal(converter) {
10 converter.isSignal = true;
14 function outgoingSignal(converter) {
15 return function(signal) {
17 function subscribe(handler) {
18 subscribers.push(handler);
20 function unsubscribe(handler) {
21 subscribers.pop(subscribers.indexOf(handler));
23 A2( Signal.lift, function(value) {
24 var val = converter(value);
25 var len = subscribers.length;
26 for (var i = 0; i < len; ++i) {
30 return { subscribe:subscribe, unsubscribe:unsubscribe };
34 function portIn(name, converter) {
35 var jsValue = elm.ports.incoming[name];
36 if (jsValue === undefined) {
37 throw new Error("Initialization Error: port '" + name +
38 "' was not given an input!");
40 elm.ports.uses[name] += 1;
42 var elmValue = converter(jsValue);
44 throw new Error("Initialization Error on port '" + name + "': \n" + e.message);
47 // just return a static value if it is not a signal
48 if (!converter.isSignal) {
52 // create a signal if necessary
53 var signal = Signal.constant(elmValue);
54 function send(jsValue) {
56 var elmValue = converter(jsValue);
58 throw new Error("Error sending to port '" + name + "': \n" + e.message);
60 setTimeout(function() {
61 elm.notify(signal.id, elmValue);
64 elm.ports.outgoing[name] = { send:send };
68 function portOut(name, converter, value) {
70 elm.ports.outgoing[name] = converter(value);
72 throw new Error("Initialization Error on port '" + name + "': \n" + e.message);
77 return elm.Native.Ports.values = {
78 incomingSignal: incomingSignal,
79 outgoingSignal: outgoingSignal,
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list