"browser-dom" in
-: $ ( string -- result )
+: elements ( string -- result )
#! Call JQuery's $ function
window { "result" } "" "$" { "string" } alien-invoke ;
+: html ( string -- element )
+ #! Set the innerHTML of element using jQuery
+ { } "" "html" { "string" } alien-invoke ;
+
+: bind-event ( name element quot -- )
+ >function swap { } "" "bind" { "string" "function" } alien-invoke ;
"scratchpad" in
+
+: example1 ( -- )
+ "<button id='test'>Press Me</button>" "#playground" elements html ;
+
+: example2 ( -- )
+ "click" "#test" elements [ "clicked" alert ] bind-event ;
+
+: example3 ( -- )
+ [
+ [
+ >r "click" "#test" elements r> [ continue ] curry bind-event
+ "Waiting for click on button" alert
+ continue
+ ] callcc0
+ drop "Click done!" alert
+ ] callcc0 ;
+
factor.call_next(next);
});
+factor.add_word("kernel", ">function", "primitive", function(next) {
+ var stack = factor.cont.data_stack;
+ var word = stack.pop();
+ stack.push(function() { word.func(function() { }) });
+ factor.call_next(next);
+});
+
+factor.add_word("kernel", "curry", "primitive", function(next) {
+ var stack = factor.cont.data_stack;
+ var quot = stack.pop();
+ var value = stack.pop();
+
+ stack.push(factor.make_quotation("quotation", function(next) {
+ factor.cont.data_stack.push(value);
+ quot.execute(factor.cont.next);
+ }));
+ factor.call_next(next);
+});
+
/* Math vocabulary */
factor.add_word("math", "*", "primitive", function(next) {
var stack = factor.cont.data_stack;
for(var i = 0; i < arg_types.length; ++i) {
args[i] = stack.pop();
}
- var v = obj[method_name].apply(obj, args);
+ var v = obj[method_name].apply(obj, args.reverse());
if(return_values.length > 0)
stack.push(v);
factor.call_next(next);
factor.call_next(next);
});
+factor.add_word("alien", "set-alien-property", "primitive", function(next) {
+ var stack = factor.cont.data_stack;
+ var obj = stack.pop();
+ var property_name = stack.pop();
+ var data = stack.pop();
+ obj[property_name] = v;
+ factor.call_next(next);
+});
+
factor.add_word("words", "vocabs", "primitive", function(next) {
var stack = factor.cont.data_stack;
var result = [];