Skip to content

Commit ab66f4d

Browse files
committed
Merge branch 'master' into move_code_form_apf_to_cloud9
Conflicts: client/js/apf_release.js
2 parents 5e9c236 + ac02689 commit ab66f4d

File tree

22 files changed

+655
-12
lines changed

22 files changed

+655
-12
lines changed

client/ext/code/code.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,13 @@ module.exports = ext.register("ext/code/code", {
358358

359359
if (!customType)
360360
_self.setCustomType(fileExt ? fileExt : file, mime);
361+
ide.dispatchEvent("track_action", {
362+
type: "syntax highlighting",
363+
fileType: fileExt,
364+
fileName: fileName,
365+
mime: mime,
366+
customType: customType
367+
});
361368
}
362369
}
363370
};

client/ext/console/console.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,8 @@ module.exports = ext.register("ext/console/console", {
261261

262262
ide.dispatchEvent("track_action", {
263263
type: "console",
264-
cmd: cmd
264+
cmd: cmd,
265+
argv: parser.argv
265266
});
266267

267268
var data = {

client/ext/debugger/inspector.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,4 +209,82 @@ exports.calcName = function(xmlNode, useDisplay){
209209
return path.join(".").replace(/\.\[/g, "[");
210210
};
211211

212+
/**
213+
* Given an xmlNode determines whether this item can be edited in realtime
214+
*/
215+
exports.isEditable = function(xmlNode) {
216+
if (!xmlNode) return false;
217+
218+
var type = xmlNode.getAttribute("type");
219+
220+
// we can edit these types
221+
switch (type) {
222+
case "string":
223+
case "null":
224+
case "number":
225+
case "boolean":
226+
break;
227+
default:
228+
return false;
229+
}
230+
231+
// V8 debugger cannot change variables that are locally scoped, so we need at least
232+
// one parent property.
233+
if (exports.calcName(xmlNode, true).indexOf(".") === -1) {
234+
return false;
235+
}
236+
237+
// ok, move along
238+
return true;
239+
};
240+
241+
/**
242+
* Determines whether a new value is valid to pass into an attribute
243+
*/
244+
exports.validateNewValue = function(xmlNode, value) {
245+
var type = xmlNode.getAttribute("type");
246+
var validator;
247+
248+
switch (type) {
249+
case "string":
250+
case "null":
251+
validator = /(.*|^$)/;
252+
break;
253+
case "number":
254+
validator = /^\d+(\.\d+)?$/;
255+
break;
256+
case "boolean":
257+
validator = /^(true|false)$/;
258+
break;
259+
default:
260+
return false; // other types cannot be edited
261+
}
262+
263+
return validator.test(value);
264+
};
265+
266+
/**
267+
* Updates the value of a property to a new value
268+
*/
269+
exports.setNewValue = function(xmlNode, value, callback) {
270+
// find the prop plus its ancestors
271+
var expression = exports.calcName(xmlNode, true);
272+
273+
// build an instruction for the compiler
274+
var instruction;
275+
switch (xmlNode.getAttribute("type")) {
276+
case "string":
277+
case "null":
278+
// escape strings
279+
instruction = expression + " = \"" + value.replace(/"/g, "\\\"") + "\"";
280+
break;
281+
default:
282+
instruction = expression + " = " + value;
283+
break;
284+
}
285+
286+
// dispatch it to the debugger
287+
exports.evaluate(instruction, callback);
288+
};
289+
212290
});

client/ext/filesystem/filesystem.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ module.exports = ext.register("ext/filesystem/filesystem", {
6060
}
6161

6262
var node = tree.selected;
63-
if (!node)
63+
if (!node && tree.xmlRoot)
6464
node = tree.xmlRoot.selectSingleNode("folder");
65+
if (!node)
66+
return;
6567
if (node.getAttribute("type") != "folder" && node.tagName != "folder")
6668
node = node.parentNode;
6769

client/ext/jslanguage/debugger.js

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/**
2+
* Cloud9 Language Foundation
3+
*
4+
* @copyright 2011, Ajax.org B.V.
5+
* @license GPLv3 <http://www.gnu.org/licenses/gpl.txt>
6+
*/
7+
8+
// contains language specific debugger bindings
9+
define(function(require, exports, module) {
10+
11+
var baseLanguageHandler = require('ext/language/base_handler');
12+
13+
var expressionBuilder = module.exports = Object.create(baseLanguageHandler);
14+
15+
/*** publics ***/
16+
17+
expressionBuilder.handlesLanguage = function(language) {
18+
return language === 'javascript';
19+
};
20+
21+
// builds an expression for the v8 debugger based on a node
22+
expressionBuilder.buildExpression = function(node) {
23+
if (!node) return null;
24+
25+
return getExpressionValue(node);
26+
};
27+
28+
/*** privates ***/
29+
30+
// get a string value of any expression
31+
var getExpressionValue = function(d) {
32+
if (d.value) return d.value;
33+
34+
var result;
35+
36+
d.rewrite(
37+
// var someVar = ...
38+
'VarDeclInit(x, _)', function(b) {
39+
result = b.x.value;
40+
},
41+
// var someVar;
42+
'VarDecl(x)', function(b) {
43+
result = b.x.value;
44+
},
45+
// e.x
46+
'PropAccess(e, x)', function(b) {
47+
result = getExpressionValue(b.e) + "." + b.x.value;
48+
},
49+
// x
50+
'Var(x)', function(b) {
51+
result = b.x.value;
52+
},
53+
// e(arg, ...)
54+
'Call(e, args)', function(b) {
55+
var method = getExpressionValue(b.e);
56+
var args = b.args.toArray().map(getExpressionValue).join(", ");
57+
result = method + "(" + args + ")";
58+
},
59+
// 10
60+
'Num(n)', function(b) {
61+
result = b.n.value;
62+
},
63+
// e[idx]
64+
'Index(e, idx)', function(b) {
65+
result = getExpressionValue(b.e) + "[" + getExpressionValue(b.idx) + "]";
66+
},
67+
// new SomeThing(arg, ...)
68+
'New(e, args)', function(b) {
69+
var method = getExpressionValue(b.e);
70+
var args = b.args.toArray().map(getExpressionValue).join(", ");
71+
result = "new " + method + "(" + args + ")";
72+
},
73+
// x (function argument)
74+
'FArg(x)', function(b) {
75+
result = b.x.value;
76+
},
77+
// 10 + 4
78+
'Op(op, e1, e2)', function(b) {
79+
result = getExpressionValue(b.e1) + " " + b.op.value + " " + getExpressionValue(b.e2);
80+
},
81+
// if nuthin' else matches
82+
function() {
83+
if(!result)
84+
result = "";
85+
}
86+
);
87+
return result;
88+
};
89+
90+
});

client/ext/jslanguage/jslanguage.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module.exports = ext.register("ext/jslanguage/jslanguage", {
2222
language.registerLanguageHandler('ext/jslanguage/parse');
2323
language.registerLanguageHandler('ext/jslanguage/scope_analyzer');
2424
language.registerLanguageHandler('ext/jslanguage/narcissus_jshint');
25+
language.registerLanguageHandler('ext/jslanguage/debugger');
2526
},
2627

2728
enable : function() {

client/ext/language/language.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ var WorkerClient = require("ace/worker/worker_client").WorkerClient;
1414
var complete = require('ext/language/complete');
1515
var marker = require('ext/language/marker');
1616
var refactor = require('ext/language/refactor');
17+
var liveInspect = require('ext/language/liveinspect');
1718

1819
var markup = require("text!ext/language/language.xml");
1920
var skin = require("text!ext/language/skin.xml");
@@ -72,12 +73,12 @@ module.exports = ext.register("ext/language/language", {
7273
marker.hook(this, worker);
7374
complete.hook(this, worker);
7475
refactor.hook(this, worker);
76+
liveInspect.hook(this, worker);
7577

7678
ide.addEventListener("init.ext/settings/settings", function (e) {
7779
e.ext.addSection("language", _self.name, "language", function () {});
7880
barSettings.insertMarkup(settings);
7981
});
80-
8182
},
8283

8384
init : function() {
@@ -114,6 +115,10 @@ module.exports = ext.register("ext/language/language", {
114115
worker.emit("change", e);
115116
marker.onChange(_self.editor.session, e);
116117
});
118+
119+
ide.addEventListener("liveinspect", function (e) {
120+
worker.emit("inspect", { data: { row: e.row, col: e.col } });
121+
});
117122
},
118123

119124
setPath: function() {

0 commit comments

Comments
 (0)