annotate mquery.js @ 69:ba032565c7a5

Fix handling of variable style access to self and parent object messages defined with lambdas. Improve test case for this bug to include parent object access as well as self object access.
author Mike Pavone <pavone@retrodev.com>
date Sat, 14 Jul 2012 19:24:04 -0700
parents 668f533e5284
children 76a21129e8f5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 function each(container, fun)
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 if (container instanceof Array) {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 for (var i = 0; i < container.length; i++) {
23
068d63627b16 Populate in scope symbol buttons when clicking on a symbol in the source
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
5 fun(i, container[i]);
0
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 } else {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 for (var i in container) {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 if (container.hasOwnProperty(i)) {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 fun(i, container[i]);
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15
25
4d87c38404d6 List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents: 23
diff changeset
16 function q(query, el)
0
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 {
25
4d87c38404d6 List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents: 23
diff changeset
18 return el === undefined ? document.querySelector(query) : el.querySelector(query);
0
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 }
25
4d87c38404d6 List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents: 23
diff changeset
20 function qall(query, el)
0
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 {
25
4d87c38404d6 List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents: 23
diff changeset
22 return el === undefined ? document.querySelectorAll(query) : el.querySelectorAll(query);
0
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 function hide(el)
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 el.style.display = 'none';
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 function show(el, dtype)
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 if (dtype === undefined) {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 dtype = 'block';
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 }
9
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
35 el.style.display = dtype;
0
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 function onReady(fun)
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 if (document.readyState == 'complete') {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 fun();
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 } else {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 document.onreadystatechange = function() {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44 if (document.readyState == 'complete') {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 fun();
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 document.onreadystatechange = null;
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52 function addClass(el, classname)
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 var classes = el.className.split(' ');
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 if (classes.indexOf(classname) == -1) {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 classes.push(classname);
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57 el.className = classes.join(' ');
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 function removeClass(el, classname)
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 var classes = el.className.split(' ');
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 var idx = classes.indexOf(classname);
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65 if (idx > -1) {
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 classes.splice(idx, 1);
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 el.className = classes.join(' ');
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69 }
3d1b8e96f5dc Initial commit
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70
9
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
71 function ajax(method, url, data, onSuccess, onFail, onOthers)
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
72 {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
73 var req;
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
74 try {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
75 req = new XMLHttpRequest();
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
76 } catch (e) {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
77 req = new ActiveXObject("Microsoft.XMLHTTP");
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
78 }
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
79 req.onreadystatechange = function() {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
80 if (req.readyState == 4) {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
81 if ((req.status >= 200 && req.status <= 299) || req.status == 0) {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
82 onSuccess(req);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
83 } else if(onFail) {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
84 onFail(req);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
85 } else {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
86 console.log('request failed:', req);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
87 }
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
88 } else if(onOthers) {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
89 onOthers(req);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
90 }
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
91 }
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
92 req.open(method, url);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
93 if (data && 'mime' in data) {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
94 req.setRequestHeader('Content-Type', data.mime);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
95 req.send(data);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
96 } else {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
97 req.send(data);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
98 }
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
99 }
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
100
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
101 function get(url, onSuccess, onFail, onOthers)
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
102 {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
103 ajax('GET', url, undefined, onSuccess, onFail, onOthers);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
104 }
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
105
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
106 function post(url, data, onSuccess, onFail, onOthers)
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
107 {
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
108 ajax('POST', url, data, onSuccess, onFail, onOthers);
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
109 }
37d7f60a8ea1 Allow use of tabletproglang programs in script tags
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
110
14
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
111 function newEl(tagname, props)
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
112 {
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
113 var el = document.createElement(tagname);
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
114 if (typeof props == 'object') {
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
115 each(props, function (key, val) {
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
116 el[key] = val;
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
117 });
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
118 }
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
119 return el;
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
120 }
85fb6ba15bc6 Start turning AST into HTML in editor
Mike Pavone <pavone@retrodev.com>
parents: 9
diff changeset
121
31
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents: 25
diff changeset
122 function setText(parent, text)
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents: 25
diff changeset
123 {
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents: 25
diff changeset
124 parent.innerHTML = '';
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents: 25
diff changeset
125 parent.appendChild(document.createTextNode(text));
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents: 25
diff changeset
126 return parent;
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents: 25
diff changeset
127 }
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents: 25
diff changeset
128