jslinting before going forward

This commit is contained in:
Danny Yoo 2011-08-23 13:21:39 -04:00
parent 693bec328d
commit a29188582f
3 changed files with 329 additions and 238 deletions

View File

@ -9,4 +9,3 @@
#:transparent) #:transparent)
(define-predicate AtomicArity? AtomicArity) (define-predicate AtomicArity? AtomicArity)
(define-predicate listof-atomic-arity? (Listof AtomicArity)) (define-predicate listof-atomic-arity? (Listof AtomicArity))

View File

@ -1,59 +1,67 @@
var makePrimitiveProcedure = plt.baselib.functions.makePrimitiveProcedure; /*jslint browser: true, unparam: true, vars: true, white: true, plusplus: true, maxerr: 50, indent: 4 */
var makeClosure = plt.baselib.functions.makeClosure; /*global plt,MACHINE,$,EXPORTS*/
var finalizeClosureCall = plt.baselib.functions.finalizeClosureCall; (function() {
var PAUSE = plt.runtime.PAUSE;
"use strict";
var makePrimitiveProcedure = plt.baselib.functions.makePrimitiveProcedure;
var makeClosure = plt.baselib.functions.makeClosure;
var finalizeClosureCall = plt.baselib.functions.finalizeClosureCall;
var PAUSE = plt.runtime.PAUSE;
var resourceStructType = var resourceStructType =
MACHINE.modules['whalesong/resource/structs.rkt'].namespace['struct:resource']; MACHINE.modules['whalesong/resource/structs.rkt'].namespace['struct:resource'];
// A View represents a functional representation of the DOM tree. // A View represents a functional representation of the DOM tree.
var View = function(top, focused, eventHandlers, pendingActions) { var View = function(top, focused, eventHandlers, pendingActions) {
// top: dom node // top: dom node
this.top = top; this.top = top;
this.focused = focused; this.focused = focused;
this.eventHandlers = eventHandlers; this.eventHandlers = eventHandlers;
this.pendingActions = pendingActions; this.pendingActions = pendingActions;
}; };
View.prototype.toString = function() { return "#<View>"; }
View.prototype.updateFocused = function(focused) { View.prototype.toString = function() { return "#<View>"; };
return new View(this.top, focused, eventHandlers, pendingActions);
};
View.prototype.initialRender = function(top) { View.prototype.updateFocused = function(focused) {
return new View(this.top, focused, this.eventHandlers, this.pendingActions);
};
View.prototype.initialRender = function(top) {
top.empty(); top.empty();
$(document.head).append(this.top.find("head").children()); $(document.head).append(this.top.find("head").children());
top.append(this.top.find("body").children()); top.append(this.top.find("body").children());
}; };
var isView = plt.baselib.makeClassPredicate(View); var isView = plt.baselib.makeClassPredicate(View);
var isResource = resourceStructType.predicate; var isResource = resourceStructType.predicate;
var resourcePath = function(r) { return resourceStructType.accessor(r, 0); }; // var resourcePath = function(r) { return resourceStructType.accessor(r, 0); };
var resourceKey = function(r) { return resourceStructType.accessor(r, 1); }; // var resourceKey = function(r) { return resourceStructType.accessor(r, 1); };
var resourceContent = function(r) { return resourceStructType.accessor(r, 2); }; var resourceContent = function(r) { return resourceStructType.accessor(r, 2); };
var checkResource = plt.baselib.check.makeCheckArgumentType( var checkProcedure = plt.baselib.check.checkProcedure;
isResource, 'resource'); // var checkResource = plt.baselib.check.makeCheckArgumentType(
var checkResourceOrView = plt.baselib.check.makeCheckArgumentType( // isResource, 'resource');
var checkResourceOrView = plt.baselib.check.makeCheckArgumentType(
function(x) { return isView(x) || isResource(x); }, function(x) { return isView(x) || isResource(x); },
'resource or view'); 'resource or view');
var checkView = plt.baselib.check.makeCheckArgumentType( // var checkView = plt.baselib.check.makeCheckArgumentType(
isView, 'view'); // isView, 'view');
// coerseToView: (U resource View) -> View // coerseToView: (U resource View) -> View
var coerseToView = function(x, onSuccess, onFail) { var coerseToView = function(x, onSuccess, onFail) {
var dom, v; var dom;
if (isView(x)) { if (isView(x)) {
return onSuccess(x); return onSuccess(x);
} else if (isResource(x)) { } else if (isResource(x)) {
@ -69,59 +77,60 @@ var coerseToView = function(x, onSuccess, onFail) {
} else { } else {
return onFail(new Error("Unable to coerse to view")); return onFail(new Error("Unable to coerse to view"));
} }
}; };
var WorldHandler = function(args) { var WorldHandler = function(args) {
this.args = args; this.args = args;
}; };
var InitialViewHandler = function(args, view) { var InitialViewHandler = function(args, view) {
WorldHandler.call(this, args); WorldHandler.call(this, args);
// view: View // view: View
this.view = view; this.view = view;
}; };
InitialViewHandler.prototype = plt.baselib.heir(WorldHandler.prototype); InitialViewHandler.prototype = plt.baselib.heir(WorldHandler.prototype);
InitialViewHandler.prototype.toString = function() { return "#<initial-view>"; }; InitialViewHandler.prototype.toString = function() { return "#<initial-view>"; };
var isInitialViewHandler = plt.baselib.makeClassPredicate(InitialViewHandler); var isInitialViewHandler = plt.baselib.makeClassPredicate(InitialViewHandler);
var StopWhenHandler = function(args, stopWhen) { var StopWhenHandler = function(args, stopWhen) {
WorldHandler.call(this, args); WorldHandler.call(this, args);
// stopWhen: Racket procedure (World -> boolean) // stopWhen: Racket procedure (World -> boolean)
this.stopWhen = stopWhen; this.stopWhen = stopWhen;
}; };
StopWhenHandler.prototype = plt.baselib.heir(WorldHandler.prototype); StopWhenHandler.prototype = plt.baselib.heir(WorldHandler.prototype);
StopWhenHandler.prototype.toString = function() { return "#<stop-when>"; }; StopWhenHandler.prototype.toString = function() { return "#<stop-when>"; };
var isStopWhenHandler = plt.baselib.makeClassPredicate(StopWhenHandler); // var isStopWhenHandler = plt.baselib.makeClassPredicate(StopWhenHandler);
var OnTickHandler = function(args, onTick, delay) { var OnTickHandler = function(args, onTick, delay) {
WorldHandler.call(this, args); WorldHandler.call(this, args);
// stopWhen: Racket procedure (World -> boolean) // stopWhen: Racket procedure (World -> boolean)
this.onTick = onTick; this.onTick = onTick;
this.delay = delay; this.delay = delay;
}; };
OnTickHandler.prototype = plt.baselib.heir(WorldHandler.prototype); OnTickHandler.prototype = plt.baselib.heir(WorldHandler.prototype);
OnTickHandler.prototype.toString = function() { return "#<on-tick>"; }; OnTickHandler.prototype.toString = function() { return "#<on-tick>"; };
var isOnTickHandler = plt.baselib.makeClassPredicate(OnTickHandler); // var isOnTickHandler = plt.baselib.makeClassPredicate(OnTickHandler);
var findHandler = function(MACHINE, pred) {
var findHandler = function(MACHINE, pred) {
var i; var i;
for (i = 1; i < MACHINE.argcount; i++) { for (i = 1; i < MACHINE.argcount; i++) {
if (pred(MACHINE.env[MACHINE.env.length - 1 - i])) { if (pred(MACHINE.env[MACHINE.env.length - 1 - i])) {
@ -129,31 +138,114 @@ var findHandler = function(MACHINE, pred) {
} }
} }
return undefined; return undefined;
}; };
// var startHandlers = function(MACHINE, handlers, onEvent, success, fail) { // var startHandlers = function(MACHINE, handlers, onEvent, success, fail) {
// if (handlers.length === 0) { // if (handlers.length === 0) {
// success(); // success();
// } // }
// handlers[0].onStart(MACHINE, onEvent, // handlers[0].onStart(MACHINE, onEvent,
// function(data) { // function(data) {
// startHandlers(MACHINE, handlers.slice(1), onEvent, success, fail); // startHandlers(MACHINE, handlers.slice(1), onEvent, success, fail);
// }); // });
// } // }
//////////////////////////////////////////////////////////////////////
EXPORTS['big-bang'] = makeClosure(
/* Event sources.
An event source are the inputs to a web world program.
Pause and Unpause are semantically meant to be cheaper than start, stop, so
that's why they're a part of this API.
*/
var EventSource = function() {};
EventSource.prototype.onStart = function(fireEvent) {
};
// The default behavior of pause is to cause the event source to stop.
EventSource.prototype.onPause = function() {
this.onStop();
};
// The default behavior of unpause is to start an event source up again.
EventSource.prototype.onUnpause = function(fireEvent) {
this.onStart(fireEvent);
};
EventSource.prototype.onStop = function() {
};
var TickEventSource = function(delay) {
this.delay = delay;
this.id = undefined;
// either undefined, or an integer representing the
// id to cancel a timeout.
};
TickEventSource.prototype = plt.baselib.heir(EventSource.prototype);
TickEventSource.prototype.onStart = function(fireEvent) {
this.id = setInterval(
function() {
fireEvent();
},
this.delay);
};
TickEventSource.prototype.onStop = function() {
if (this.id !== undefined) {
clearInterval(this.id);
this.id = undefined;
}
};
var BindEventSource = function(type, element) {
this.type = type;
this.element = element;
this.handler = undefined;
};
BindEventSource.prototype = plt.baselib.heir(EventSource.prototype);
BindEventSource.prototype.onStart = function(fireEvent) {
this.handler =
function(evt) {
fireEvent(evt);
};
$(this.element).bind(this.type,
this.handler);
};
BindEventSource.prototype.onStop = function() {
if (this.handler !== undefined) {
$(this.element).unbind(this.type, this.handler);
this.handler = undefined;
}
};
//////////////////////////////////////////////////////////////////////
EXPORTS['big-bang'] = makeClosure(
'big-bang', 'big-bang',
plt.baselib.arity.makeArityAtLeast(1), plt.baselib.arity.makeArityAtLeast(1),
function(MACHINE) { function(MACHINE) {
var oldArgcount = MACHINE.argcount; //var oldArgcount = MACHINE.argcount;
var world = MACHINE.env[MACHINE.env.length - 1]; //var world = MACHINE.env[MACHINE.env.length - 1];
var initialViewHandler = findHandler(MACHINE, isInitialViewHandler); var initialViewHandler = findHandler(MACHINE, isInitialViewHandler);
var top = $("<div/>"); var top = $("<div/>");
MACHINE.params.currentDisplayer(MACHINE, top); MACHINE.params.currentDisplayer(MACHINE, top);
@ -165,26 +257,27 @@ EXPORTS['big-bang'] = makeClosure(
// Initialize event handlers to send to that channel. // Initialize event handlers to send to that channel.
var onRestart = function() { // var onRestart = function() {
restart(function(MACHINE) { // restart(function(MACHINE) {
MACHINE.argcount = oldArgcount; // MACHINE.argcount = oldArgcount;
finalizeClosureCall(MACHINE, "ok"); // finalizeClosureCall(MACHINE, "ok");
}); // });
}; // };
}); });
}); });
EXPORTS['initial-view'] = makeClosure( EXPORTS['initial-view'] = makeClosure(
'initial-view', 'initial-view',
1, 1,
function(MACHINE) { function(MACHINE) {
var resourceOrView = checkResourceOrView(MACHINE, 'initial-view', 0);; var resourceOrView = checkResourceOrView(MACHINE, 'initial-view', 0);
var oldArgcount = MACHINE.argcount; var oldArgcount = MACHINE.argcount;
PAUSE(function(restart) { PAUSE(function(restart) {
coerseToView(resourceOrView, coerseToView(resourceOrView,
function(v) { function(v) {
restart(function(MACHINE) { restart(function(MACHINE) {
MACHINE.argcount = oldArgcount;
finalizeClosureCall(MACHINE, finalizeClosureCall(MACHINE,
new InitialViewHandler( new InitialViewHandler(
{ {
@ -216,7 +309,7 @@ EXPORTS['initial-view'] = makeClosure(
EXPORTS['stop-when'] = makePrimitiveProcedure( EXPORTS['stop-when'] = makePrimitiveProcedure(
'stop-when', 'stop-when',
1, 1,
function(MACHINE) { function(MACHINE) {
@ -224,25 +317,24 @@ EXPORTS['stop-when'] = makePrimitiveProcedure(
return new StopWhenHandler( return new StopWhenHandler(
{ {
onStart : function(MACHINE, onEvent, k) { onStart : function(MACHINE, onEvent, k) {
k() k();
}, },
onPause : function(MACHINE, data, k) { onPause : function(MACHINE, data, k) {
k(data) k(data);
}, },
onResume : function(MACHINE, data, k) { onResume : function(MACHINE, data, k) {
k(data) k(data);
}, },
onStop : function(MACHINE, data, k) { onStop : function(MACHINE, data, k) {
k() k();
} }
}, },
stopWhen stopWhen
); );
return undefined;
}); });
EXPORTS['on-tick'] = makePrimitiveProcedure( EXPORTS['on-tick'] = makePrimitiveProcedure(
'on-tick', 'on-tick',
1, 1,
function(MACHINE) { function(MACHINE) {
@ -257,21 +349,20 @@ EXPORTS['on-tick'] = makePrimitiveProcedure(
}, },
onPause : function(MACHINE, data, k) { onPause : function(MACHINE, data, k) {
clearInterval(data.id); clearInterval(data.id);
k(data) k(data);
}, },
onResume : function(MACHINE, data, k) { onResume : function(MACHINE, data, k) {
data.id = setInterval(function () { data.onEvent() }, data.id = setInterval(function () { data.onEvent(); },
this.delay); this.delay);
k(data) k(data);
}, },
onStop : function(MACHINE, data, k) { onStop : function(MACHINE, data, k) {
clearInterval(data.id); clearInterval(data.id);
k() k();
} }
}, },
onTick onTick
); );
return undefined;
}); });
@ -279,4 +370,5 @@ EXPORTS['on-tick'] = makePrimitiveProcedure(
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
}());

View File

@ -1,6 +1,6 @@
#lang racket/base #lang racket/base
(provide big-bang initial-view stop-when) (provide big-bang initial-view stop-when on-tick)
(define (big-bang world . handlers) (define (big-bang world . handlers)
(error 'big-bang "Please run in JavaScript context.")) (error 'big-bang "Please run in JavaScript context."))