New convention for storing module values, fixes bug

Before it was not possible to add values to anything except leafs of
the namespace structure.
This commit is contained in:
Evan Czaplicki 2013-09-30 01:32:27 -07:00
parent 2cb4fd8973
commit b40f2958d4
26 changed files with 88 additions and 59 deletions

View file

@ -282,9 +282,9 @@ jsModule modul =
show . prettyPrint $ setup (Just "Elm") (names modul ++ ["make"]) ++
[ assign ("Elm" : names modul ++ ["make"]) (function ["elm"] programStmts) ]
where
thisModule = dotSep ("elm" : names modul)
thisModule = dotSep ("elm" : names modul ++ ["values"])
programStmts =
concat [ setup (Just "elm") (names modul)
concat [ setup (Just "elm") (names modul ++ ["values"])
, [ IfSingleStmt () thisModule (ReturnStmt () (Just thisModule)) ]
, [ internalImports (List.intercalate "." (names modul)) ]
, concatMap jsImport (imports modul)
@ -296,7 +296,7 @@ jsModule modul =
, [ ReturnStmt () (Just thisModule) ]
]
jsExports = assign ("elm" : names modul) (ObjectLit () exs)
jsExports = assign ("elm" : names modul ++ ["values"]) (ObjectLit () exs)
where
exs = map entry . filter (not . isOp) $ "_op" : exports modul
entry x = (PropId () (var x), ref x)

View file

@ -1,7 +1,9 @@
Elm.Native.Basics = {};
Elm.Native.Basics.make = function(elm) {
if (elm.Native.Basics) return elm.Native.Basics;
elm.Native = elm.Native || {};
elm.Native.Basics = elm.Native.Basics || {};
if (elm.Native.Basics.values) return elm.Native.Basics.values;
var JS = Elm.Native.JavaScript.make(elm);
// var Maybe = Elm.Maybe(elm);
@ -104,5 +106,5 @@ Elm.Native.Basics.make = function(elm) {
snd:snd
};
return elm.Native.Basics = basics;
return elm.Native.Basics.values = basics;
};

View file

@ -1,7 +1,8 @@
Elm.Native.Char = {};
Elm.Native.Char.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Char) return elm.Native.Char;
elm.Native.Char = elm.Native.Char || {};
if (elm.Native.Char.values) return elm.Native.Char.values;
function isBetween(lo,hi) { return function(chr) {
var c = chr.charCodeAt(0);
@ -12,7 +13,7 @@ Elm.Native.Char.make = function(elm) {
var chk1 = isBetween('a'.charCodeAt(0),'f'.charCodeAt(0));
var chk2 = isBetween('A'.charCodeAt(0),'F'.charCodeAt(0));
return elm.Native.Char = {
return elm.Native.Char.values = {
fromCode : function(c) { return String.fromCharCode(c); },
toCode : function(c) { return c.toUpperCase().charCodeAt(0); },
toUpper : function(c) { return c.toUpperCase(); },

View file

@ -1,7 +1,8 @@
Elm.Native.Color = {};
Elm.Native.Color.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Color) return elm.Native.Color;
elm.Native.Color = elm.Native.Color || {};
if (elm.Native.Color.values) return elm.Native.Color.values;
var Utils = Elm.Native.Utils.make(elm);
@ -59,7 +60,7 @@ Elm.Native.Color.make = function(elm) {
return { ctor:"Color", _0:norm(r+m), _1:norm(g+m), _2:norm(b+m), _3:1 };
}
return elm.Native.Color = {
return elm.Native.Color.values = {
hsva:F4(hsva),
hsv:F3(hsv),
complement:complement

View file

@ -1,7 +1,8 @@
Elm.Native.Date = {};
Elm.Native.Date.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Date) return elm.Native.Date;
elm.Native.Date = elm.Native.Date || {};
if (elm.Native.Date.values) return elm.Native.Date.values;
var JS = Elm.JavaScript.make(elm);
var Maybe = Elm.Maybe.make(elm);
@ -17,7 +18,7 @@ Elm.Native.Date.make = function(elm) {
var monthTable = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
return elm.Native.Date = {
return elm.Native.Date.values = {
read : readDate,
year : function(d) { return d.getFullYear(); },
month : function(d) { return { ctor:monthTable[d.getMonth()] }; },

View file

@ -1,7 +1,8 @@
Elm.Native.Error = {};
Elm.Native.Error.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Error) return elm.Native.Error;
elm.Native.Error = elm.Native.Error || {};
if (elm.Native.Error.values) return elm.Native.Error.values;
var fromString = Elm.Native.JavaScript.make(elm).fromString;
@ -27,5 +28,5 @@ Elm.Native.Error.make = function(elm) {
function raise(str) { throw new Error(fromString(str)); }
return elm.Native.Error = { Case: Case, If: If, raise: raise };
return elm.Native.Error.values = { Case: Case, If: If, raise: raise };
};

View file

@ -3,7 +3,8 @@ Elm.Native.Graphics.Collage.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Graphics = elm.Native.Graphics || {};
if (elm.Native.Graphics.Collage) return elm.Native.Graphics.Collage;
elm.Native.Graphics.Collage = elm.Native.Graphics.Collage || {};
if (elm.Native.Graphics.Collage.values) return elm.Native.Graphics.Collage.values;
var newElement = Elm.Graphics.Element.make(elm).newElement;
var C = ElmRuntime.use(ElmRuntime.Render.Collage);
@ -17,6 +18,6 @@ Elm.Native.Graphics.Collage.make = function(elm) {
model: {w:w, h:h, forms:forms}
});
}
return elm.Native.Graphics.Collage = { collage:F3(collage) };
return elm.Native.Graphics.Collage.values = { collage:F3(collage) };
};

View file

@ -3,7 +3,8 @@ Elm.Native.Graphics.Input.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Graphics = elm.Native.Graphics || {};
if (elm.Native.Graphics.Input) return elm.Native.Graphics.Input;
elm.Native.Graphics.Input = elm.Native.Graphics.Input || {};
if (elm.Native.Graphics.Input.values) return elm.Native.Graphics.Input.values;
var Render = ElmRuntime.use(ElmRuntime.Render.Element);
var newNode = ElmRuntime.use(ElmRuntime.Render.Utils).newElement;
@ -289,7 +290,7 @@ Elm.Native.Graphics.Input.make = function(elm) {
}
}
return elm.Native.Graphics.Input = {
return elm.Native.Graphics.Input.values = {
buttons:buttons,
customButtons:customButtons,
hoverables:hoverables,

View file

@ -1,7 +1,8 @@
Elm.Native.JavaScript = {};
Elm.Native.JavaScript.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.JavaScript) return elm.Native.JavaScript;
elm.Native.JavaScript = elm.Native.JavaScript || {};
if (elm.Native.JavaScript.values) return elm.Native.JavaScript.values;
var List = Elm.Native.List.make(elm);
var Render = ElmRuntime.use(ElmRuntime.Render.Element);
@ -82,7 +83,7 @@ Elm.Native.JavaScript.make = function(elm) {
return Render.render(element);
}
return elm.Native.JavaScript = {
return elm.Native.JavaScript.values = {
toFloat : id,
toBool : id,
toInt : function(n) { return n|0; },

View file

@ -1,6 +1,10 @@
Elm.Native.Json = {};
Elm.Native.Json.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Json = elm.Native.Json || {};
if (elm.Native.Json.values) return elm.Native.Json.values;
var Maybe = Elm.Maybe.make(elm);
var Dict = Elm.Dict.make(elm);
var List = Elm.List.make(elm);
@ -58,7 +62,7 @@ Elm.Native.Json.make = function(elm) {
}
}
return elm.Native.Json = {
return elm.Native.Json.values = {
toJSString : F2(toPrettyJSString),
fromJSString : fromJSString,
toJSObject : fromValue,

View file

@ -1,9 +1,10 @@
Elm.Native.List = {};
Elm.Native.List.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.List) return elm.Native.List;
elm.Native.List = elm.Native.List || {};
if (elm.Native.List.values) return elm.Native.List.values;
if ('values' in Elm.Native.List)
return elm.Native.List = Elm.Native.List.values;
return elm.Native.List.values = Elm.Native.List.values;
var Utils = Elm.Native.Utils.make(elm);

View file

@ -1,6 +1,8 @@
Elm.Native.Prelude = {};
Elm.Native.Prelude.make = function(elm) {
if (elm.Native.Prelude) return elm.Native.Prelude;
elm.Native = elm.Native || {};
elm.Native.Prelude = elm.Native.Prelude || {};
if (elm.Native.Prelude.values) return elm.Native.Prelude.values;
var JS = Elm.Native.JavaScript.make(elm);
var Maybe = Elm.Maybe.make(elm);
@ -42,9 +44,9 @@ Elm.Native.Prelude.make = function(elm) {
return Maybe.Just(parseFloat(s));
}
return elm.Native.Prelude = {
return elm.Native.Prelude.values = {
readInt:readInt,
readFloat:readFloat,
readFloat:readFloat
};
};

View file

@ -1,7 +1,8 @@
Elm.Native.Show = {};
Elm.Native.Show.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Show) return elm.Native.Show;
elm.Native.Show = elm.Native.Show || {};
if (elm.Native.Show.values) return elm.Native.Show.values;
var NList = Elm.Native.List.make(elm);
var List = Elm.List.make(elm);
@ -95,5 +96,5 @@ Elm.Native.Show.make = function(elm) {
c === '\\' ? '\\\\' : c;
}
return elm.Native.Show = { show:show };
return elm.Native.Show.values = { show:show };
};

View file

@ -2,7 +2,8 @@ Elm.Native.Http = {};
Elm.Native.Http.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Http) return elm.Native.Http;
elm.Native.Http = elm.Native.Http || {};
if (elm.Native.Http.values) return elm.Native.Http.values;
var JS = Elm.JavaScript.make(elm);
@ -50,12 +51,12 @@ Elm.Native.Http.make = function(elm) {
}
function send(requests) {
var responses = Signal.constant(elm.Http.Waiting);
var responses = Signal.constant(elm.Http.values.Waiting);
var sender = A2( Signal.lift, registerReq([],responses), requests );
function f(x) { return function(y) { return x; } }
return A3( Signal.lift2, f, responses, sender );
}
return elm.Native.Http = {send:send};
return elm.Native.Http.values = {send:send};
};

View file

@ -2,7 +2,8 @@ Elm.Native.Keyboard = {};
Elm.Native.Keyboard.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Keyboard) return elm.Native.Keyboard;
elm.Native.Keyboard = elm.Native.Keyboard || {};
if (elm.Native.Keyboard.values) return elm.Native.Keyboard.values;
// Duplicated from Native.Signal
function send(node, timestep, changed) {
@ -103,7 +104,7 @@ Elm.Native.Keyboard.make = function(elm) {
var lastPressed = Signal.dropRepeats(downEvents);
return elm.Native.Keyboard = {
return elm.Native.Keyboard.values = {
isDown:is,
directions:F4(dir),
keysDown:keysDown,

View file

@ -2,7 +2,8 @@ Elm.Native.Mouse = {};
Elm.Native.Mouse.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Mouse) return elm.Native.Mouse;
elm.Native.Mouse = elm.Native.Mouse || {};
if (elm.Native.Mouse.values) return elm.Native.Mouse.values;
var Signal = Elm.Signal.make(elm);
var Utils = Elm.Native.Utils.make(elm);
@ -55,7 +56,7 @@ Elm.Native.Mouse.make = function(elm) {
elm.notify(position.id, getXY(e));
});
return elm.Native.Mouse = {
return elm.Native.Mouse.values = {
position: position,
x:x,
y:y,

View file

@ -2,7 +2,8 @@ Elm.Native.Random = {};
Elm.Native.Random.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Random) return elm.Native.Random;
elm.Native.Random = elm.Native.Random || {};
if (elm.Native.Random.values) return elm.Native.Random.values;
var Signal = Elm.Signal.make(elm);
@ -16,8 +17,8 @@ Elm.Native.Random.make = function(elm) {
return A2( Signal.lift, f, signal );
}
elm.Native.Random = { range: F3(range) };
elm.Native.Random['flt'] = flt;
return elm.Native.Random;
return elm.Native.Random.values = {
range: F3(range),
flt: flt
};
};

View file

@ -3,7 +3,8 @@ Elm.Native.Signal = {};
Elm.Native.Signal.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Signal) return elm.Native.Signal;
elm.Native.Signal = elm.Native.Signal || {};
if (elm.Native.Signal.values) return elm.Native.Signal.values;
var Utils = Elm.Native.Utils.make(elm);
var foldl1 = Elm.List.make(elm).foldl1;
@ -203,7 +204,7 @@ Elm.Native.Signal.make = function(elm) {
function merge(s1,s2) { return new Merge(s1,s2); }
function merges(ss) { return A2(foldl1, F2(merge), ss); }
return elm.Native.Signal = {
return elm.Native.Signal.values = {
constant : function(v) { return new Input(v); },
lift : F2(lift ),
lift2 : F3(lift2),

View file

@ -1,6 +1,10 @@
Elm.Native.Time = {};
Elm.Native.Time.make = function(elm) {
elm.Native = elm.Native || {};
elm.Native.Time = elm.Native.Time || {};
if (elm.Native.Time.values) return elm.Native.Time.values;
var Signal = Elm.Signal.make(elm);
var NS = Elm.Native.Signal.make(elm);
var Maybe = Elm.Maybe.make(elm);
@ -49,7 +53,7 @@ Elm.Native.Time.make = function(elm) {
var t = Date.parse(s);
return isNaN(t) ? Maybe.Nothing : Maybe.Just(t);
}
return elm.Native.Time = {
return elm.Native.Time.values = {
fpsWhen : F2(fpsWhen),
fps : function(t) { return fpsWhen(t, Signal.constant(true)); },
every : function(t) { return everyWhen(t, Signal.constant(true)) },

View file

@ -2,7 +2,8 @@ Elm.Native.Touch = {};
Elm.Native.Touch.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Touch) return elm.Native.Touch;
elm.Native.Touch = elm.Native.Touch || {};
if (elm.Native.Touch.values) return elm.Native.Touch.values;
var Signal = Elm.Signal.make(elm);
var JS = Elm.JavaScript.make(elm);
@ -143,6 +144,6 @@ Elm.Native.Touch.make = function(elm) {
return sig2;
}();
return elm.Native.Touch = { touches: touches, taps: taps };
return elm.Native.Touch.values = { touches: touches, taps: taps };
};

View file

@ -2,7 +2,8 @@ Elm.Native.WebSocket = {};
Elm.Native.WebSocket.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.WebSocket) return elm.Native.WebSocket;
elm.Native.WebSocket = elm.Native.WebSocket || {};
if (elm.Native.WebSocket.values) return elm.Native.WebSocket.values;
var Signal = Elm.Signal.make(elm);
var JS = Elm.JavaScript.make(elm);
@ -33,5 +34,5 @@ Elm.Native.WebSocket.make = function(elm) {
return A3(Signal.lift2, F2(take1), incoming, A2(Signal.lift, send, outgoing));
}
return elm.Native.WebSocket = { connect: F2(open) };
return elm.Native.WebSocket.values = { connect: F2(open) };
};

View file

@ -2,7 +2,8 @@ Elm.Native.Window = {};
Elm.Native.Window.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Window) return elm.Native.Window;
elm.Native.Window = elm.Native.Window || {};
if (elm.Native.Window.values) return elm.Native.Window.values;
var Signal = Elm.Signal.make(elm);
var Tuple2 = Elm.Native.Utils.make(elm).Tuple2;
@ -34,7 +35,7 @@ Elm.Native.Window.make = function(elm) {
}
elm.addListener([dimensions.id], window, 'resize', resizeIfNeeded);
return elm.Native.Window = {
return elm.Native.Window.values = {
dimensions:dimensions,
width:width,
height:height,

View file

@ -1,7 +1,8 @@
Elm.Native.Text = {};
Elm.Native.Text.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Text) return elm.Native.Text;
elm.Native.Text = elm.Native.Text || {};
if (elm.Native.Text.values) return elm.Native.Text.values;
var JS = Elm.JavaScript.make(elm);
var htmlHeight = Elm.Native.Utils.make(elm).htmlHeight;
@ -108,7 +109,7 @@ Elm.Native.Text.make = function(elm) {
return position('left')(toText(v));
}
return elm.Native.Text = {
return elm.Native.Text.values = {
toText: toText,
header : header,

View file

@ -1,9 +1,9 @@
Elm.Native.Transform2D = {};
Elm.Native.Transform2D.make = function(elm) {
elm.Native = elm.Native || {};
if (elm.Native.Transform2D) return elm.Native.Transform2D;
elm.Native.Transform2D = elm.Native.Transform2D || {};
if (elm.Native.Transform2D.values) return elm.Native.Transform2D.values;
var A;
if (typeof Float32Array === 'undefined') {
@ -80,7 +80,7 @@ Elm.Native.Transform2D.make = function(elm) {
m21*ndx + m22*ndy + mdy]);
}
return elm.Native.Transform2D = {
return elm.Native.Transform2D.values = {
identity:identity,
matrix:F6(matrix),
rotation:rotation,

View file

@ -1,10 +1,9 @@
Elm.Native.Utils = {};
Elm.Native.Utils.make = function(elm) {
'use strict';
elm.Native = elm.Native || {};
if (elm.Native.Utils) return elm.Native.Utils;
elm.Native.Utils = elm.Native.Utils || {};
if (elm.Native.Utils.values) return elm.Native.Utils.values;
function eq(x,y) {
if (x === y) return true;
@ -144,7 +143,7 @@ Elm.Native.Utils.make = function(elm) {
elm.addListener(elm.inputs, elm.node, 'mouseover', adjustOffset);
}
return elm.Native.Utils = {
return elm.Native.Utils.values = {
eq:eq,
cmp:cmp,
compare:F2(compare),

View file

@ -164,7 +164,7 @@ function initGraphics(elm, Module) {
function domUpdate(newScene, currentScene) {
ElmRuntime.draw(function(_) {
Render.update(elm.node.firstChild, currentScene, newScene);
if (elm.Native.Window) elm.Native.Window.resizeIfNeeded();
if (elm.Native.Window) elm.Native.Window.values.resizeIfNeeded();
});
return newScene;
}
@ -172,7 +172,7 @@ function initGraphics(elm, Module) {
// must check for resize after 'renderer' is created so
// that changes show up.
if (elm.Native.Window) elm.Native.Window.resizeIfNeeded();
if (elm.Native.Window) elm.Native.Window.values.resizeIfNeeded();
return renderer;
}