diff --git a/configs/client-default.js b/configs/client-default.js index 94c4ae24..e6bdcd70 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -502,7 +502,10 @@ module.exports = function(options) { "plugins/c9.ide.installer/commands/bash", "plugins/c9.ide.installer/commands/npm", "plugins/c9.ide.installer/commands/symlink", - "plugins/c9.ide.installer/commands/tar.gz", + { + packagePath: "plugins/c9.ide.installer/commands/tar.gz", + bashBin: options.bashBin + }, "plugins/c9.ide.installer/commands/ubuntu", { packagePath: "plugins/c9.ide.installer/installer", diff --git a/node_modules/ace_tree/lib/ace_tree/mouse/default_handlers.js b/node_modules/ace_tree/lib/ace_tree/mouse/default_handlers.js index 4fe20010..7fd87c06 100644 --- a/node_modules/ace_tree/lib/ace_tree/mouse/default_handlers.js +++ b/node_modules/ace_tree/lib/ace_tree/mouse/default_handlers.js @@ -137,10 +137,12 @@ function DefaultHandlers(mouseHandler) { } this.$clickNode = null; } else if (dom.hasCssClass(target, "checkbox")) { - var nodes = editor.selection.getSelectedNodes(); node.isChecked = !node.isChecked; - nodes.forEach(function(n){ n.isChecked = node.isChecked }); - provider._signal(node.isChecked ? "check" : "uncheck", nodes); + if (inSelection) { + var nodes = editor.selection.getSelectedNodes(); + nodes.forEach(function(n){ n.isChecked = node.isChecked }); + } + provider._signal(node.isChecked ? "check" : "uncheck", inSelection ? nodes : [node]); provider._signal("change") } else if (dom.hasCssClass(target, "icon-ok")) { if (ev.getShiftKey()) { diff --git a/package.json b/package.json index 07003e15..dd171e66 100644 --- a/package.json +++ b/package.json @@ -77,13 +77,13 @@ "c9.ide.behaviors": "#6aad7006a0", "c9.ide.closeconfirmation": "#a28bfd8272", "c9.ide.configuration": "#b8470f4107", - "c9.ide.dialog.wizard": "#3641096e13", + "c9.ide.dialog.wizard": "#e03db0af98", "c9.ide.fontawesome": "#781602c5d8", "c9.ide.format": "#f51451ac57", "c9.ide.help.support": "#60e88f5680", "c9.ide.imgeditor": "#08bbc53578", "c9.ide.immediate": "#6845a93705", - "c9.ide.installer": "#f996c8aa17", + "c9.ide.installer": "#a04eed6a5f", "c9.ide.mount": "#32e79866ee", "c9.ide.navigate": "#64156c7f4a", "c9.ide.newresource": "#9a7464cc47", diff --git a/plugins/c9.fs/proc.js b/plugins/c9.fs/proc.js index 2ce7ece1..9aac1923 100644 --- a/plugins/c9.fs/proc.js +++ b/plugins/c9.fs/proc.js @@ -7,11 +7,14 @@ define(function(require, exports, module) { var vfs = imports.vfs; var Plugin = imports.Plugin; + var ProcessToPty = require("./proc2pty"); + /***** Initialization *****/ var plugin = new Plugin("Ajax.org", main.consumes); var emit = plugin.getEmitter(); + var installMode; var tmuxName = options.tmuxName; /***** Register and define API *****/ @@ -171,6 +174,15 @@ define(function(require, exports, module) { * @singleton **/ plugin.freezePublicAPI({ + /** + * @ignore + */ + get installMode(){ return installMode; }, + set installMode(_vfs) { + vfs = _vfs || imports.vfs; + installMode = _vfs ? true : false; + }, + _events: [ /** * @event beforeSpawn Fires right before a file is executed @@ -334,6 +346,14 @@ define(function(require, exports, module) { * @fires afterPty */ pty: function(path, options, callback) { + if (installMode) { + plugin.spawn(path, options, function(err, process){ + if (err) return callback(err); + callback(null, new ProcessToPty(process)); + }); + return; + } + emit("beforePty", {path: path, options: options}); if (!options.encoding) diff --git a/plugins/c9.fs/proc2pty.js b/plugins/c9.fs/proc2pty.js new file mode 100644 index 00000000..249cda20 --- /dev/null +++ b/plugins/c9.fs/proc2pty.js @@ -0,0 +1,27 @@ +define(function(require, exports, module) { + var EventEmitter = require("events").EventEmitter; + + module.exports = function(process){ + var pty = new EventEmitter(); + pty.write = function(data){ + process.stdin.write(data); + }; + pty.resize = function(){}; + pty.destroy = + pty.end = function(){ + process.kill(); + }; + + process.stdout.on("data", function(chunk){ + pty.emit("data", chunk); + }); + process.stderr.on("data", function(chunk){ + pty.emit("data", chunk); + }); + process.on("exit", function(code){ + pty.emit("exit", code); + }); + + return pty; + } +}); \ No newline at end of file diff --git a/plugins/c9.ide.dialog/dialog.js b/plugins/c9.ide.dialog/dialog.js index f240aa71..c2b5da11 100644 --- a/plugins/c9.ide.dialog/dialog.js +++ b/plugins/c9.ide.dialog/dialog.js @@ -71,24 +71,17 @@ define(function(require, module, exports) { var title = options.title; var heading = options.heading; var body = options.body; - var custom = options.custom; var className = options.class; var modal = options.modal; var zindex = options.zindex; var allowClose = options.allowClose; var elements = options.elements || []; - var resizable = options.resizable || false; + var resizable = false; var widths = options.widths || {}; var count = 0; var dialog, buttons, titles; - var loaded; - function load(){ - if (loaded) return; - loaded = true; - } - var drawn = false; function draw(htmlNode) { if (drawn) return; @@ -168,8 +161,8 @@ define(function(require, module, exports) { html: titles.$int }); - if (resizable) - plugin.resizable = resizable; + if (options.resizable) + plugin.resizable = options.resizable; } /***** Method *****/ @@ -365,6 +358,11 @@ define(function(require, module, exports) { return node; } + plugin.on("unload", function(){ + drawn = false; + resizable = false; + }); + /***** Register and define API *****/ plugin.freezePublicAPI.baseclass(); @@ -443,12 +441,16 @@ define(function(require, module, exports) { resizable = v; if (!dialog) return; - dialog.setAttribute("height", v ? dialog.getHeight() : ""); - dialog.setAttribute("width", v ? dialog.getWidth() : ""); + if (!height) + dialog.setAttribute("height", v ? dialog.getHeight() : ""); + if (!width) + dialog.setAttribute("width", v ? dialog.getWidth() : ""); + dialog.setAttribute("class", "dialog " + (v ? "" : "relative") + (options.dark ? " dark" : "") + (className ? " " + className : "")); + // titles.setAttribute("anchors", v ? "0 0 46 0" : ""); // buttons.setAttribute("bottom", v ? "0" : ""); // buttons.setAttribute("left", v ? "0" : ""); diff --git a/plugins/c9.ide.ui/widgets.datagrid.js b/plugins/c9.ide.ui/widgets.datagrid.js index fbf087ee..329c3764 100644 --- a/plugins/c9.ide.ui/widgets.datagrid.js +++ b/plugins/c9.ide.ui/widgets.datagrid.js @@ -16,9 +16,10 @@ define(function(require, exports, module) { if (!options) throw new Error("options are required"); if (!options.baseName) - options.baseName = "tree"; + options.baseName = "datagrid"; + if (!options.theme) - options.theme = "blackdg"; + options.theme = "blackdg ace-tree-" + (options.baseName || "datagrid"); var model = new TreeModel(); model.columns = options.columns; diff --git a/plugins/c9.ide.ui/widgets.less b/plugins/c9.ide.ui/widgets.less index f70ce2f8..7035b5c0 100644 --- a/plugins/c9.ide.ui/widgets.less +++ b/plugins/c9.ide.ui/widgets.less @@ -1,7 +1,7 @@ .custom-tree.ace_tree { background: transparent; border: none; - font: 11px Tahoma, Arial; + // font: @general-font-size @general-font-family; .font-smoothing(@tree-font-smoothing) } @@ -43,6 +43,25 @@ line-height: 1.5em; } +.ace_tree .tree-row .checkbox{ + outline: 1px solid rgba(0, 0, 0, 0.16); + background: white; + width: 13px; + height: 13px; + margin: -2px 5px 0 0px; + display: inline-block; + vertical-align: middle; + pointer-events: auto; +} +.ace_tree .tree-row .checkbox.checked{ + background: white url("@{image-path}/@{menu-check}"); + background-position: -2px -2px; +} +.ace_tree .tree-row .checkbox.half-checked{ + background: #DDDDDD url("@{image-path}/@{menu-check}"); + background-position: -2px -2px; +} + .custom-tree.ace_tree .tree-row .toggler{ .image-2x("@{tree-arrow}", 20px, 10px); margin: 0 1px 0 0; diff --git a/plugins/c9.ide.ui/widgets.list.js b/plugins/c9.ide.ui/widgets.list.js index 8bf49e0f..f2c76caf 100644 --- a/plugins/c9.ide.ui/widgets.list.js +++ b/plugins/c9.ide.ui/widgets.list.js @@ -56,6 +56,7 @@ define(function(require, exports, module) { ? new TreeModel() : new ListModel()); model.filterCaseInsensitive = true; + model.$sortNodes = false; if (!options.rowHeight) options.rowHeight = 23; @@ -80,7 +81,9 @@ define(function(require, exports, module) { scrollbarVisibilityChanged: acetree.renderer, resize: acetree.renderer, expand: model, - collapse: model + collapse: model, + check: model, + uncheck: model }; emit.sticky("draw"); @@ -262,7 +265,10 @@ define(function(require, exports, module) { model.getCheckboxHTML = value ? function(node){ return ""; + + (node.isChecked == -1 + ? "half-checked " + : (node.isChecked ? "checked " : "")) + + "'>"; } : null; }, @@ -360,7 +366,7 @@ define(function(require, exports, module) { * */ get sort(){ return model.sort; }, - set sort(fn){ + set sort(fn){ debugger; model.$sortNodes = fn ? true : false; model.$sorted = fn ? true : false; model.sort = fn;