Merge branch 'master' of github.com:c9/newclient into support-tracking/php-breakpoint

This commit is contained in:
Brady Dowling 2015-08-07 14:24:39 +00:00
commit 44bfedca0a
22 changed files with 177 additions and 88 deletions

1
.gitignore vendored
View File

@ -43,6 +43,7 @@ node_modules/kaefer/node_modules/
!node_modules/ui
!node_modules/react-bootstrap
!node_modules/oldclient
!node_modules/vargs
node_modules/oldclient/node_modules
node_modules/oldclient/plugins-server/c9.api.project/tmp*

View File

@ -2,7 +2,7 @@ Cloud9 3.0 SDK for Plugin Development
======================================
This is the core repository for the Cloud9 v3 SDK. The SDK allows you to run a version of Cloud9 that allows you to develop plugins and create a custom IDE based on Cloud9.
#### Project Status: *ALPHA*
During the alpha stage, expect many things to break, not work or simply fail.

View File

@ -700,6 +700,13 @@ module.exports = function(options) {
staticPrefix: staticPrefix + "/plugins/c9.ide.collab/notifications"
},
];
if (options.standalone || options.local) {
plugins.push(
"plugins/c9.ide.scm/status",
"plugins/c9.ide.scm/editor"
);
}
if (packaging || !devel) {
plugins.push({

View File

@ -56,9 +56,7 @@ var Marker = function(parentEl) {
};
this.update = function(config) {
var config = config || this.config;
if (!config)
return;
if (!config) return;
this.config = config;

View File

@ -46,7 +46,7 @@ exports.createElement = function(tag, ns) {
};
exports.hasCssClass = function(el, name) {
var classes = (el.className || "").split(/\s+/g);
var classes = (el.className + "").split(/\s+/g);
return classes.indexOf(name) !== -1;
};
@ -84,7 +84,7 @@ exports.toggleCssClass = function(el, name) {
add = false;
classes.splice(index, 1);
}
if(add)
if (add)
classes.push(name);
el.className = classes.join(" ");

View File

@ -76,7 +76,7 @@ function DefaultHandlers(mouseHandler) {
title = provider.getTooltipText ? provider.getTooltipText(node) : provider.getText(node);
}
if (editor.container.title != title)
if (!editor.tooltip && editor.container.title != title)
editor.container.title = title;
this.updateHoverState(node);
};

View File

@ -2,6 +2,7 @@ define(function(require, exports, module) {
"use strict";
var dom = require("ace/lib/dom");
var lang = require("ace/lib/lang");
var MouseEvent = require("./mouse/mouse_event").MouseEvent;
dom.importCssString(".no-events * {pointer-events:none!important}");
function Tooltip(tree) {
this.tree = tree;
@ -9,7 +10,8 @@ function Tooltip(tree) {
this.tree.on("mousewheel", this.onMouseMove.bind(this, null));
this.tree.renderer.scroller.addEventListener("mouseout", this.onMouseOut.bind(this));
this.setUp();
// this.tree.renderer.on("afterRender", this.updateNodeClass.bind(this));
this.update = this.update.bind(this);
this.tree.renderer.on("afterRender", this.updateNodeClass.bind(this));
this.clearDelayed = lang.delayedCall(this.onMouseMove.bind(this), 50);
}
@ -20,7 +22,7 @@ function Tooltip(tree) {
this.root.className = container.className + " no-events";
this.root.style.cssText = "border: 0px;margin: 0px;"
+ "position: absolute; bottom: initial; right: initial; width: auto; height: auto;"
+ "overflow: visible;z-index: 1000000; white-space: pre;"
+ "overflow: visible;z-index: 190000; white-space: pre;"
+ "pointer-events: none";
// var color = dom.computedStyle(container).backgroundColor;
// if (!color)
@ -28,20 +30,24 @@ function Tooltip(tree) {
document.body.appendChild(this.root);
};
this.updateNode = function(treeNode) {
this.updateNode = function(treeDomNode) {
if (this.node) {
this.node.parentNode.removeChild(this.node);
this.node = null;
}
this.treeNode = treeNode;
if (!treeNode) {
this.treeDomNode = treeDomNode;
var rect = treeDomNode && treeDomNode.getBoundingClientRect();
var maxW = this.tree.renderer.layerConfig.width;
if (!rect || treeDomNode.lastChild.getBoundingClientRect().right <= maxW) {
this.root.style.display = "none";
return;
}
// if (rect.width )
this.root.className = this.tree.container.className + " no-events";
this.root.style.display = "";
var rect = treeNode.getBoundingClientRect();
this.node = treeNode.cloneNode(true);
this.node = treeDomNode.cloneNode(true);
this.node.style.margin = "0px";
this.root.appendChild(this.node);
@ -50,10 +56,11 @@ function Tooltip(tree) {
};
this.updateNodeClass = function() {
if (this.node && this.treeNode) {
if (this.treeNode.parentNode == this.tree.renderer.$cellLayer.element)
this.node.className = this.treeNode.className;
else
if (this.node && this.treeDomNode) {
if (this.treeDomNode.parentNode == this.tree.renderer.$cellLayer.element) {
this.node.className = this.treeDomNode.className;
this.root.className = this.tree.container.className + " no-events";
} else
this.updateNode(null);
}
};
@ -67,20 +74,25 @@ function Tooltip(tree) {
};
this.onMouseMove = function(ev) {
var target = ev && ev.domEvent.target;
while (target && !dom.hasCssClass(target, "tree-row")) {
target = target.parentElement;
}
if (target == this.treeNode)
var node = ev && ev.getNode && ev.getNode();
if (node == this.treeNode)
return;
this.updateNode(target);
if (target)
this.treeNode = node;
if (node)
this.clearDelayed.cancel();
this.tree.renderer.on("afterRender", this.update);
};
this.update = function() {
var renderer = this.tree.renderer;
renderer.off("afterRender", this.update);
var i = renderer.layerConfig.vRange.indexOf(this.treeNode);
var domNode = renderer.$cellLayer.getDomNodeAtIndex(i + renderer.layerConfig.firstRow);
this.updateNode(domNode, this.treeNode);
};
this.onMouseOut = function(e) {
this.onMouseMove({domEvent: e})
this.onMouseMove();
};
this.onMouseOver = function(ev) {
this.clearDelayed.schedule();

View File

@ -105,6 +105,7 @@ var Tree = function(element, cellWidth, cellHeight) {
}
this.provider = provider;
this.model = provider; // TODO remove provider in favor of model
if (provider) {
this.renderer.setDataProvider(provider);

View File

@ -110,6 +110,7 @@ var VirtualRenderer = function(container, cellWidth, cellHeight) {
h: 0
};
this.$scrollIntoView = null;
this.$loop = new RenderLoop(
this.$renderChanges.bind(this),
@ -142,6 +143,7 @@ var VirtualRenderer = function(container, cellWidth, cellHeight) {
**/
this.setDataProvider = function(provider) {
this.provider = provider;
this.model = provider;
if (this.scrollMargin.top && provider && provider.getScrollTop() <= 0)
provider.setScrollTop(-this.scrollMargin.top);
@ -300,6 +302,12 @@ var VirtualRenderer = function(container, cellWidth, cellHeight) {
// provider.setScrollTop(this.getScrollTop());
changes |= this.CHANGE_SCROLL;
}
if (this.$scrollIntoView)
if (this.$scrollIntoView.model == this.model) {
this.scrollCaretIntoView(this.$scrollIntoView.caret, this.$scrollIntoView.offset);
this.$scrollIntoView = null;
}
}
if (width && (force || size.width != width)) {
@ -517,6 +525,9 @@ var VirtualRenderer = function(container, cellWidth, cellHeight) {
this.$updateScrollBar();
this._signal("afterRender");
if (this.$scrollIntoView)
this.$scrollIntoView = null;
};
@ -688,6 +699,14 @@ var VirtualRenderer = function(container, cellWidth, cellHeight) {
* Scrolls the Caret into the first visible area of the editor
**/
this.scrollCaretIntoView = function(caret, offset) {
this.$scrollIntoView = {
caret: caret,
offset: offset,
scrollTop: this.scrollTop,
model: this.model,
height: this.$size.scrollerHeight
};
// the editor is not visible
if (this.$size.scrollerHeight === 0)
return;
@ -703,8 +722,7 @@ var VirtualRenderer = function(container, cellWidth, cellHeight) {
var height = nodePos.height;
var left = 0;
var width = 0;
if (this.scrollTop > top) {
if (offset)
top -= offset * this.$size.scrollerHeight;
@ -726,6 +744,8 @@ var VirtualRenderer = function(container, cellWidth, cellHeight) {
} else if (scrollLeft + this.$size.scrollerWidth < left + width) {
this.provider.setScrollLeft(Math.round(left + width - this.$size.scrollerWidth));
}
this.$scrollIntoView.scrollTop = this.scrollTop;
};
/**

View File

@ -134,7 +134,7 @@ var processLoadQueue = function(err, id) {
}
};
define.amd = true;
define.amd = {};
define.queue = [];
define.loaded = {};
define.errors = {};
@ -296,7 +296,7 @@ require.MODULE_LOAD_URL = MODULE_LOAD_URL;
require.toUrl = function(moduleName, ext, skipExt) {
var absRe = /^([\w\+\.\-]+:|\/)/;
var index = moduleName.indexOf("!");
if (index !== -1 || !ext)
if (index !== -1 || !ext || /^\/|\.js$/.test(moduleName))
ext = "";
var paths = config.paths;

View File

@ -1,7 +1,7 @@
{
"name": "c9",
"description": "New Cloud9 Client",
"version": "3.0.2234",
"version": "3.0.2278",
"author": "Ajax.org B.V. <info@ajax.org>",
"private": true,
"main": "bin/c9",
@ -33,7 +33,7 @@
"rusha": "~0.7.2",
"send": "~0.1.4",
"simple-mime": "~0.0.8",
"tern": "git://github.com/cloud9ide/tern.git#42164cde34b4cb057fa0c53d3881a58d903a3135",
"tern": "git://github.com/cloud9ide/tern.git#749e64a0f0fed91f883ff055df37b4bfc9f2d980",
"tern_from_ts": "git://github.com/cloud9ide/tern_from_ts.git#6a0107e602b0d044fe1753533cf31f52cf5fb95a",
"through": "2.2.0",
"tmp": "~0.0.20",
@ -55,7 +55,7 @@
"c9"
],
"c9plugins": {
"c9.ide.language": "#4a3fb360aa",
"c9.ide.language": "#c8a0de682c",
"c9.ide.language.css": "#ef8a28943e",
"c9.ide.language.generic": "#77d43cfaf0",
"c9.ide.language.html": "#bbe81afed1",
@ -65,7 +65,7 @@
"c9.ide.language.javascript.eslint": "#9b2721c3d0",
"c9.ide.language.javascript.tern": "#a8f7ed0e30",
"c9.ide.language.javascript.infer": "#cfec494a3c",
"c9.ide.language.jsonalyzer": "#ba3e0d298c",
"c9.ide.language.jsonalyzer": "#103e701afc",
"c9.ide.collab": "#b49eda3791",
"c9.ide.local": "#a9703b630c",
"c9.ide.find": "#6cc6d3379d",
@ -94,7 +94,7 @@
"c9.ide.navigate": "#f358997d93",
"c9.ide.newresource": "#f1f0624768",
"c9.ide.openfiles": "#28a4f5af16",
"c9.ide.preview": "#d10e9d75e1",
"c9.ide.preview": "#a75e218d3e",
"c9.ide.preview.browser": "#c50007ebbc",
"c9.ide.preview.markdown": "#ab8d30ad9f",
"c9.ide.pubsub": "#a85fb27eca",
@ -105,13 +105,13 @@
"c9.ide.run": "#1e99c8c1d2",
"c9.ide.run.build": "#ad45874c88",
"c9.ide.run.debug.xdebug": "#3b1520f83d",
"c9.ide.save": "#58b8616a88",
"c9.ide.scm": "#undefined",
"c9.ide.terminal.monitor": "#b0b4d03280",
"c9.ide.save": "#cc613b6ead",
"c9.ide.scm": "#f3847917b8",
"c9.ide.terminal.monitor": "#b52a3f2144",
"c9.ide.theme.flat": "#2de8414db7",
"c9.ide.threewaymerge": "#229382aa0b",
"c9.ide.undo": "#b028bcb4d5",
"c9.ide.upload": "#0bd010d3dc",
"c9.ide.welcome": "#c370b3f191"
"c9.ide.welcome": "#0cb72cfc56"
}
}

View File

@ -109,10 +109,11 @@ define(function(require, exports, module) {
}
var name = argv._[1];
var test = name == ".";
if (test)
name = require("path").basename(process.cwd());
install(
name,
{
@ -223,7 +224,7 @@ define(function(require, exports, module) {
var version = parts[1];
var repository;
if ((!version || options.debug) && !options.test) {
if (!options.test) {
if (verbose)
console.log("Retrieving package info");
@ -232,8 +233,10 @@ define(function(require, exports, module) {
if (verbose)
console.log("Found:", info);
if (!version)
version = info.latest;
version = info.latest;
repository = info.repository;
installPackage();
@ -362,7 +365,9 @@ define(function(require, exports, module) {
request.on('response', function(res) {
if (res.statusCode != 200)
return callback(new Error("Unknown Error:" + res.statusCode));
return callback(new Error("Unknown Error getting "
+ host + (port ? ":" + port : "")
+ path + ":" + res.statusCode));
});
file.on('finish', function() {
@ -451,10 +456,10 @@ define(function(require, exports, module) {
return callback(null, { version: "test" });
if (verbose)
console.log("Notifying c9.io that packages needs to be installed");
console.log("Notifying c9.io that package is installed");
var endpoint = options.global ? api.user : api.project;
var url = "install/" + packageName + "/" + version + "?mode=silent";
var url = "install/" + name + "/" + version + "?mode=silent";
endpoint.post(url, function(err, info){
callback(err, info);

View File

@ -37,6 +37,7 @@ describe("cli.publish", function(){
baseTest(function (err, s) {
// Services can be tested immediately by mocking API signatures params - (req, res, next) - or (user, params, callback)
services = s;
HOST = "localhost:" + s.apiPort;
next(err);
});
});
@ -49,7 +50,7 @@ describe("cli.publish", function(){
var json = {
"name": "c9.ide.example",
"latest": "1.0.0",
"owner": "https://api.c9.dev/user/2000",
"owner": "https://api.$DOMAIN/user/2000",
"enabled": true,
"categories": [
"example"
@ -60,10 +61,14 @@ describe("cli.publish", function(){
},
"longname": "c9.ide.example",
"website": "",
"description": "Cloud9 Custom Example Plugin",
"star_avg": 0,
"description": "",
"star_count": 0,
"star_total": 0,
"installs": 0,
"screenshots": [
"example"
// TODO Screenshots are broken
// "example"
]
};
@ -118,13 +123,6 @@ describe("cli.publish", function(){
done();
});
});
it("should fail if the description in the package.json is missing", function(done){
fs.writeFileSync(packagePath, packageJson.replace(/"description":.*/, ''));
runCLI("publish", ["major"], function(err, stdout, stderr){
expect(stderr).to.match(/ERROR: Missing description property in package.json/);
done();
});
});
it("should fail if the repository in the package.json is missing", function(done){
fs.writeFileSync(packagePath, packageJson.replace(/"repository[\s\S]*?\},/, ""));
runCLI("publish", ["major"], function(err, stdout, stderr){
@ -157,9 +155,10 @@ describe("cli.publish", function(){
it("should publish when using force and increase the patch version", function(done){
var strJson = packageJson.replace(/"version": "[\d\.]+"/, '"version": "0.0.0"');
fs.writeFileSync(packagePath, strJson);
runCLI("publish", ["patch", "--force"], function(err, stdout, stderr){
fs.writeFileSync(readmePath, readmeMD);
runCLI("publish", ["patch", "--force", "--tag"], function(err, stdout, stderr){
assert(!err, err);
expect(stdout).to.match(/Succesfully published version 0.0.1/);
expect(stdout).to.match(/Successfully published version 0.0.1/);
runCLI("list", ["--json"], function(err, stdout, stderr){
assert(!err, err);
@ -182,7 +181,7 @@ describe("cli.publish", function(){
fs.writeFileSync(readmePath, readmeMD);
runCLI("publish", ["minor"], function(err, stdout, stderr){
assert(!err, err);
expect(stdout).to.match(/Succesfully published version 0.1.0/);
expect(stdout).to.match(/Successfully published version 0.1.0/);
runCLI("list", ["--json"], function(err, stdout, stderr){
assert(!err, err);
@ -204,7 +203,7 @@ describe("cli.publish", function(){
it("should increase the major version", function(done){
runCLI("publish", ["major"], function(err, stdout, stderr){
assert(!err, err);
expect(stdout).to.match(/Succesfully published version 1.0.0/);
expect(stdout).to.match(/Successfully published version 1.0.0/);
runCLI("list", ["--json"], function(err, stdout, stderr){
assert(!err, err);
@ -226,7 +225,7 @@ describe("cli.publish", function(){
it("should hide the package when it is unpublished", function(done){
runCLI("unpublish", [], function(err, stdout, stderr){
assert(!err, err);
expect(stdout).to.match(/Succesfully disabled package/);
expect(stdout).to.match(/Successfully disabled package/);
runCLI("list", ["--json"], function(err, stdout, stderr){
assert(!err, err);
@ -237,7 +236,7 @@ describe("cli.publish", function(){
});
});
describe("install and remove (uninstall)", function() {
describe.only("install and remove (uninstall)", function() {
var pluginDir = join(process.env.HOME, ".c9/plugins/c9.ide.example");
// Lets make sure there is at least one package in the database
@ -265,7 +264,7 @@ describe("cli.publish", function(){
it("should install a package locally", function(done){
runCLI("install", ["--local", "c9.ide.example"], function(err, stdout, stderr){
expect(stdout).to.match(/Succesfully installed c9.ide.example@10.0.0/);
expect(stdout).to.match(/Successfully installed c9.ide.example@10.0.0/);
expect(fs.existsSync(pluginDir)).ok;
done();
});
@ -278,30 +277,40 @@ describe("cli.publish", function(){
});
it("should install a package in debug mode", function(done){
runCLI("install", ["--force", "--debug", "c9.ide.example"], function(err, stdout, stderr){
expect(stdout).to.match(/Succesfully installed c9.ide.example/);
expect(stdout).to.match(/Successfully installed c9.ide.example/);
expect(fs.existsSync(join(pluginDir, "/.git"))).ok;
done();
});
});
it("should install a package via the database", function(done){
runCLI("install", ["c9.ide.example"], function(err, stdout, stderr){
expect(stdout).to.match(/Succesfully installed c9.ide.example/);
runCLI("install", ["c9.ide.example", "--force"], function(err, stdout, stderr){
expect(stdout).to.match(/Successfully installed c9.ide.example/);
// @TODO check if it's actually in the database - add list --own to cli
done();
});
});
// it("should install a package with a specific version via the database", function(done){
// runCLI("install", ["c9.ide.example@1.0.0", "--force"], function(err, stdout, stderr){
// console.log(stdout, stderr);
// expect(stdout).to.match(/Successfully installed c9.ide.example@1.0.0/);
// // @TODO check if it's actually in the database - add list --own to cli
// done();
// });
// });
it("should remove a package locally", function(done){
runCLI("remove", ["--local", "c9.ide.example"], function(err, stdout, stderr){
expect(stdout).to.match(/Succesfully removed c9.ide.example/);
expect(stdout).to.match(/Successfully removed c9.ide.example/);
expect(fs.existsSync(pluginDir)).not.ok;
done();
});
});
it("should remove a from the database", function(done){
runCLI("remove", ["c9.ide.example"], function(err, stdout, stderr){
expect(stdout).to.match(/Succesfully removed c9.ide.example/);
expect(stdout).to.match(/Successfully removed c9.ide.example/);
// @TODO check if it's actually in the database - add list --own to cli

View File

@ -1672,6 +1672,11 @@ define(function(require, exports, module) {
*/
defineSyntax: defineSyntax,
/**
* @ignore
*/
getSyntaxForPath: getSyntaxForPath,
/**
* @ignore this is used by statusbar
*/

View File

@ -104,6 +104,8 @@ define(function(require, exports, module) {
}, 500);
function exec(command, editor, args, e) {
var sCommand = command;
if (!editor || editor.fake)
editor = emit("getEditor");
@ -119,8 +121,10 @@ define(function(require, exports, module) {
if (typeof command === 'string')
command = commands[command];
if (!command)
if (!command) {
console.warn("Could not find command ", sCommand);
return false;
}
if (command.isAvailable && !command.isAvailable(editor, args, e))
return; //Disable commands for other contexts

View File

@ -12,7 +12,7 @@
.box-shadow(~"inset 1px 1px @{button-glossy-hover-shadow-color}, inset -1px -1px @{button-glossy-hover-shadow-color}");
text-shadow: @button-glossy-hover-text-shadow;
}
.c9-toolbarbutton-glossyDown {
.c9-toolbarbutton-glossyDown, .c9-toolbarbutton-glossyActive {
border: 1px solid @button-glossy-active-border-color;
.gradient(~"linear-gradient(top, @{button-glossy-active-background-1} 0%, @{button-glossy-active-background-2} 55%, @{button-glossy-active-background-3} 55%, @{button-glossy-active-background-4} 100%)");
.box-shadow(~"inset 1px 1px @{button-glossy-active-shadow-color}, inset -1px -1px @{button-glossy-active-shadow-color}");

View File

@ -185,10 +185,12 @@ require([
});
});
after(function(done) {
document.body.style.marginBottom = "";
done();
});
if (!onload.remain) {
after(function(done) {
document.body.style.marginBottom = "";
done();
});
}
});
onload && onload();

View File

@ -30,6 +30,7 @@ define(function(require, exports, module) {
var showError = imports["dialog.error"].show;
var Tree = require("ace_tree/tree");
var Tooltip = require("ace_tree/tooltip");
var TreeEditor = require("ace_tree/edit");
var markup = require("text!./tree.xml");
@ -237,6 +238,8 @@ define(function(require, exports, module) {
tree.setDataProvider(fsCache.model);
tree.setOption("enableDragDrop", true);
// tree.tooltip = new Tooltip(tree);
fsCache.model.$indentSize = 12;
fsCache.model.getIconHTML = function(node) {
var icon = node.isFolder ? "folder" : util.getFileIcon(node.label);

View File

@ -203,7 +203,8 @@ apf.vbox = function(struct, tagName) {
var nodes = this.childNodes;
for (var i = 0, l = nodes.length; i < l; i++) {
if ((node = nodes[i]).nodeFunc != apf.NODE_VISIBLE || !node.$amlLoaded) //|| node.visible === false
var node = nodes[i];
if (node.nodeFunc != apf.NODE_VISIBLE || !node.$amlLoaded) //|| node.visible === false
continue;
node.$ext.style.textAlign = apf.getStyle(node.$ext, "textAlign") || "left";

View File

@ -22,7 +22,8 @@ var places = {
Ace: {
kitchen_sink: ["/static/lib/ace/kitchen-sink.html", "/../lib/ace/test/tests.html"],
tree: "/static/lib/ace_tree/demo.html",
list: "/static/lib/ace_tree/list_demo.html"
list: "/static/lib/ace_tree/list_demo.html",
diff: "/static/plugins/c9.ide.scm/diff/index.html"
},
Treehugger: {
test: "/static/lib/treehugger/test.html"

View File

@ -16,7 +16,7 @@
<div id="mocha"></div>
<div id='jserror' width='100%' height='20px' style='font: 10px \"courier new\"; color: red; display: none;'></div>
<script src="require.js"></script>
<script src="mini_require.js"></script>
<script src="/configs/require_config.js"></script>
<script src="lib/mocha/mocha.js"></script>
<script>
@ -156,7 +156,7 @@
require([path]);
}
// allow running some tests in both client and server
["amd-loader", "../../test/setup_paths"].forEach(defineEmpty);
["amd-loader", "test/setup_paths"].forEach(defineEmpty);
// require.config({paths: {chai: "lib/chai/chai"}});
@ -173,7 +173,13 @@
});
var deps = ["text!/test/all.json", "lib/architect/architect", "lib/chai/chai", "test.js"];
var deps = [
"text!/test/all.json",
"lib/architect/architect",
"lib/chai/chai",
"test",
"plugins/c9.ide.ui/lib_less1.5"
];
if (options.ui === "none")
deps.shift();
@ -226,8 +232,10 @@
running = false;
lastDone && lastDone();
}
running ? done() : mocha.run(done);
running = true;
if (!running) {
running = true;
mocha.run(done);
}
};
onload.remain = onload.remain == "1";
@ -347,14 +355,14 @@
}
/* global requirejs require: true*/
var defaultModules = Object.keys(requirejs.s.contexts._.defined).filter(function(x) {
var defaultModules = Object.keys(define.modules).filter(function(x) {
return !/text!/.test(x);
});
function cleanupRequireModules() {
Object.keys(require.s.contexts._.defined).forEach(function(x) {
Object.keys(define.modules).forEach(function(x) {
if (/text!/.test(x) || defaultModules.indexOf(x) != -1)
return;
if (/lib\/ace|lib\/treehugger|\/ctags\/ctags$/.test(x) && !/_test/.test(x))
if (/^ace|^treehugger|\/ctags\/ctags$/.test(x) && !/_test/.test(x))
return;
require.undef(x);
@ -363,8 +371,18 @@
if (require == requirejs) {
require = function(a, b, c) {
if (!c && Array.isArray(a))
c = function(err) { lastDone(err.message); };
return requirejs(a, b, c);
c = function(err) {
lastDone && lastDone(err.message);
};
// workaround for sync minirequire behaviour
var bt = b && function() {
var args = [].slice.call(arguments);
var self = this;
setTimeout(function() {
b.apply(self, args);
});
};
return requirejs(a, bt, c);
};
Object.keys(requirejs).forEach(function(x) {
if (!(x in require)) {

View File

@ -122,13 +122,16 @@ filefinder.prototype.treewalk = function(basedir, subdir, fnpattern, blacklist,
function next() {
var file = list[i++];
if (!file) return cb(null, foundfilesarray.length);
var partName = path.join(subdir, file);
var filepath = path.join(fulldir, file);
// get file info
fs.stat(filepath, function(err, stat) {
if (stat && stat.isDirectory()) {
if (blacklist && blacklist.indexOf(partName + "/") !== -1)
return next();
// directory, so recurse
_self.treewalk(basedir, path.join(subdir, file), fnpattern, blacklist, foundfilesarray, function(err, res) {
_self.treewalk(basedir, partName, fnpattern, blacklist, foundfilesarray, function(err, res) {
results = results.concat(res);
next();
});
@ -141,7 +144,6 @@ filefinder.prototype.treewalk = function(basedir, subdir, fnpattern, blacklist,
}
// check if blacklisted
var partName = path.join(subdir, file);
if (!blacklist || blacklist.indexOf(partName) == -1) {
if (DEBUGMODE) console.log("file found: %s", partName);
foundfilesarray.push(partName);