kopia lustrzana https://github.com/c9/core
Merge remote-tracking branch 'origin/master' into preview-perf
commit
92e3ba7187
|
@ -21,11 +21,10 @@ We have several documentation resources for you:
|
|||
<tr><th>SDK documentation</th><td>http://cloud9-sdk.readme.io/v0.1/docs</td></tr>
|
||||
<tr><th>API documentation</th><td>http://docs.c9.io/api</td></tr>
|
||||
<tr><th>User documentation</th><td>http://docs.c9.io</td></tr>
|
||||
<tr><th>User docs repo</th><td>https://github.com/c9/docs.c9.io</td></tr>
|
||||
</table>
|
||||
|
||||
Please joing the mailinglist to get support or give support to the growing community of plugin developers:
|
||||
https://groups.google.com/forum/#!forum/cloud9-plugin-development
|
||||
https://groups.google.com/forum/#!forum/cloud9-sdk
|
||||
|
||||
#### Installation ####
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
"no use strict";
|
||||
;(function(window) {
|
||||
if (typeof window.window != "undefined" && window.document) {
|
||||
if (typeof window.window != "undefined" && window.document)
|
||||
return;
|
||||
if (window.require && window.define)
|
||||
return;
|
||||
}
|
||||
|
||||
window.console = function() {
|
||||
var msgs = Array.prototype.slice.call(arguments, 0);
|
||||
|
@ -38,7 +39,7 @@ window.normalizeModule = function(parentId, moduleName) {
|
|||
var base = parentId.split("/").slice(0, -1).join("/");
|
||||
moduleName = (base ? base + "/" : "") + moduleName;
|
||||
|
||||
while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
|
||||
while (moduleName.indexOf(".") !== -1 && previous != moduleName) {
|
||||
var previous = moduleName;
|
||||
moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
|
||||
}
|
||||
|
@ -73,6 +74,7 @@ window.require = function(parentId, id) {
|
|||
var path = chunks.join("/") + ".js";
|
||||
|
||||
window.require.id = id;
|
||||
window.require.modules[id] = {}; // prevent infinite loop on broken modules
|
||||
importScripts(path);
|
||||
return window.require(parentId, id);
|
||||
};
|
||||
|
@ -101,9 +103,9 @@ window.define = function(id, deps, factory) {
|
|||
}
|
||||
|
||||
if (!deps.length)
|
||||
// If there is no dependencies, we inject 'require', 'exports' and
|
||||
// 'module' as dependencies, to provide CommonJS compatibility.
|
||||
deps = ['require', 'exports', 'module'];
|
||||
// If there is no dependencies, we inject "require", "exports" and
|
||||
// "module" as dependencies, to provide CommonJS compatibility.
|
||||
deps = ["require", "exports", "module"];
|
||||
|
||||
var req = function(childId) {
|
||||
return window.require(id, childId);
|
||||
|
@ -114,16 +116,16 @@ window.define = function(id, deps, factory) {
|
|||
factory: function() {
|
||||
var module = this;
|
||||
var returnExports = factory.apply(this, deps.map(function(dep) {
|
||||
switch(dep) {
|
||||
// Because 'require', 'exports' and 'module' aren't actual
|
||||
// dependencies, we must handle them seperately.
|
||||
case 'require': return req;
|
||||
case 'exports': return module.exports;
|
||||
case 'module': return module;
|
||||
// But for all other dependencies, we can just go ahead and
|
||||
// require them.
|
||||
default: return req(dep);
|
||||
}
|
||||
switch (dep) {
|
||||
// Because "require", "exports" and "module" aren't actual
|
||||
// dependencies, we must handle them seperately.
|
||||
case "require": return req;
|
||||
case "exports": return module.exports;
|
||||
case "module": return module;
|
||||
// But for all other dependencies, we can just go ahead and
|
||||
// require them.
|
||||
default: return req(dep);
|
||||
}
|
||||
}));
|
||||
if (returnExports)
|
||||
module.exports = returnExports;
|
||||
|
@ -186,7 +188,7 @@ window.onmessage = function(e) {
|
|||
sender = window.sender = initSender();
|
||||
var clazz = require(msg.module)[msg.classname];
|
||||
main = window.main = new clazz(sender);
|
||||
}
|
||||
}
|
||||
else if (msg.event && sender) {
|
||||
sender._signal(msg.event, msg.data);
|
||||
}
|
||||
|
|
|
@ -143,9 +143,9 @@ function DefaultHandlers(mouseHandler) {
|
|||
editor.selection.toggleSelect(node);
|
||||
}
|
||||
} else if (ev.getAccelKey()) {
|
||||
if (isMultiSelect && inSelection)
|
||||
if (inSelection && isMultiSelect)
|
||||
this.delayedSelect = "toggle";
|
||||
else
|
||||
else if (!inSelection || isMultiSelect)
|
||||
editor.selection.toggleSelect(node);
|
||||
} else if (ev.getShiftKey()) {
|
||||
editor.selection.expandSelection(node);
|
||||
|
|
|
@ -1,91 +1,175 @@
|
|||
(function() {
|
||||
|
||||
var ACE_NAMESPACE = "";
|
||||
var MODULE_LOAD_URL = "/load/module";
|
||||
|
||||
var global = (function() { return this; })();
|
||||
if (!global && typeof window != "undefined") global = window; // can happen in strict mode
|
||||
|
||||
var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg;
|
||||
var cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g;
|
||||
|
||||
if (!ACE_NAMESPACE && typeof requirejs !== "undefined")
|
||||
return;
|
||||
|
||||
|
||||
var _define = function(module, deps, payload) {
|
||||
if (typeof module !== 'string') {
|
||||
if (_define.original)
|
||||
_define.original.apply(window, arguments);
|
||||
else {
|
||||
console.error('dropping module because define wasn\'t a string.');
|
||||
console.trace();
|
||||
}
|
||||
return;
|
||||
function getInlineDeps(fn) {
|
||||
var deps = [];
|
||||
if (fn.length) {
|
||||
fn.toString().replace(commentRegExp, "")
|
||||
.replace(cjsRequireRegExp, function (match, dep) {
|
||||
deps.push(dep);
|
||||
});
|
||||
deps = ["require", "exports", "module"].concat(deps);
|
||||
}
|
||||
return deps;
|
||||
}
|
||||
|
||||
if (arguments.length == 2)
|
||||
payload = deps;
|
||||
|
||||
_define.amd = true;
|
||||
if (!_define.modules) {
|
||||
_define.modules = {};
|
||||
_define.payloads = {};
|
||||
var define = function(name, deps, callback) {
|
||||
// Allow for anonymous modules
|
||||
if (typeof name !== "string") {
|
||||
callback = deps;
|
||||
deps = name;
|
||||
name = null;
|
||||
}
|
||||
if (_define.modules[module])
|
||||
// This module may not have dependencies
|
||||
if (deps && !Array.isArray(deps)) {
|
||||
callback = deps;
|
||||
deps = null;
|
||||
}
|
||||
|
||||
if (!name)
|
||||
return defQueue.push([deps, callback]);
|
||||
|
||||
if (define.loaded[name])
|
||||
return;
|
||||
_define.payloads[module] = payload;
|
||||
_define.modules[module] = null;
|
||||
|
||||
if (!deps && typeof callback == "function")
|
||||
deps = getInlineDeps(callback);
|
||||
|
||||
define.loaded[name] = {
|
||||
id: name,
|
||||
deps: normalizeNames(name, deps),
|
||||
factory: callback,
|
||||
exports: {},
|
||||
packaged: true
|
||||
};
|
||||
};
|
||||
var defQueue = [];
|
||||
var addToLoadQueue = function(missing, deps, callback) {
|
||||
define.queue.push(function() { _require('', deps, callback); });
|
||||
for (var i = 0; i < missing.length; ++i)
|
||||
require.load(missing[i]);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get at functionality define()ed using the function above
|
||||
*/
|
||||
var _require = function(parentId, module, callback) {
|
||||
if (Object.prototype.toString.call(module) === "[object Array]") {
|
||||
var params = [];
|
||||
for (var i = 0, l = module.length; i < l; ++i) {
|
||||
var moduleName = normalizeModule(parentId, module[i]);
|
||||
var dep = lookup(parentId, moduleName);
|
||||
if (!dep && _require.load) {
|
||||
return _require.load(moduleName, function() {
|
||||
if (lookup(parentId, moduleName))
|
||||
_require(parentId, module, callback);
|
||||
});
|
||||
var processLoadQueue = function(err, id) {
|
||||
if (defQueue.length) {
|
||||
if (err)
|
||||
throw err;
|
||||
if (defQueue.length > 1)
|
||||
throw new Error("more than one module in defqueue");
|
||||
define(id, defQueue[0][0], defQueue[0][1]);
|
||||
defQueue.length = 0;
|
||||
}
|
||||
var queue = define.queue;
|
||||
define.queue = [];
|
||||
queue.forEach(function(f) { f(); });
|
||||
};
|
||||
|
||||
define.amd = true;
|
||||
define.queue = [];
|
||||
define.loaded = {};
|
||||
define.modules = { require: 1, exports: 1, module: 1 };
|
||||
define.fetchedUrls = {};
|
||||
|
||||
var activateModule = function(name) {
|
||||
var module = define.loaded[name];
|
||||
var exports = module.exports;
|
||||
if (typeof module.factory !== "function") {
|
||||
exports = module.factory;
|
||||
} else {
|
||||
var req = function(path, callback) {
|
||||
return _require(name, path, callback);
|
||||
};
|
||||
req.toUrl = require.toUrl;
|
||||
|
||||
var modules = define.modules;
|
||||
var missing = checkMissing(module.deps);
|
||||
if (missing.length)
|
||||
return missing;
|
||||
|
||||
modules.require = req;
|
||||
modules.exports = exports;
|
||||
modules.module = module;
|
||||
|
||||
define.modules[name] = exports;
|
||||
var args = module.deps.slice(0, module.factory.length);
|
||||
var returnValue = args.length
|
||||
? module.factory.apply(module, args.map(lookup))
|
||||
: module.factory(req, exports, module);
|
||||
|
||||
exports = returnValue || module.exports;
|
||||
}
|
||||
delete define.loaded[name];
|
||||
define.modules[name] = exports;
|
||||
};
|
||||
|
||||
var checkMissing = function(deps, seen, missing) {
|
||||
missing = missing || {};
|
||||
seen = seen || {};
|
||||
for (var i = 0; i < deps.length; ++i) {
|
||||
var depName = deps[i];
|
||||
if (!define.modules[depName]) {
|
||||
var dep = define.loaded[depName];
|
||||
if (!dep)
|
||||
missing[depName] = 1;
|
||||
else if (!missing[depName] && !seen[depName]) {
|
||||
seen[depName] = 1;
|
||||
checkMissing(dep.deps, seen, missing);
|
||||
}
|
||||
params.push(dep);
|
||||
}
|
||||
if (callback) {
|
||||
callback.apply(null, params);
|
||||
}
|
||||
}
|
||||
else if (typeof module === 'string') {
|
||||
var payload = lookup(parentId, module);
|
||||
if (!payload && _require.original)
|
||||
return _require.original.apply(this, arguments);
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
|
||||
return payload;
|
||||
}
|
||||
else {
|
||||
if (_require.original)
|
||||
return _require.original.apply(this, arguments);
|
||||
}
|
||||
return Object.keys(missing);
|
||||
};
|
||||
|
||||
var normalizeModule = function(parentId, moduleName) {
|
||||
var lookup = function(moduleName) {
|
||||
var mod = define.modules[moduleName];
|
||||
if (mod === undefined && define.loaded[moduleName]) {
|
||||
activateModule(moduleName);
|
||||
mod = define.modules[moduleName];
|
||||
}
|
||||
return mod;
|
||||
};
|
||||
|
||||
var _require = function(parentId, moduleName, callback) {
|
||||
if (typeof moduleName === "string") {
|
||||
var depName = normalizeName(parentId, moduleName);
|
||||
var module = lookup(depName);
|
||||
if (module !== undefined) {
|
||||
callback && callback(module);
|
||||
return module;
|
||||
}
|
||||
} else if (Array.isArray(moduleName)) {
|
||||
var deps = normalizeNames(parentId, moduleName);
|
||||
var missing = checkMissing(deps);
|
||||
if (!missing.length) {
|
||||
var args = moduleName.map(lookup);
|
||||
return callback && callback.apply(null, args);
|
||||
} else {
|
||||
return addToLoadQueue(missing, deps, callback);
|
||||
}
|
||||
}
|
||||
if (_require.original)
|
||||
return _require.original.apply(this, arguments);
|
||||
};
|
||||
|
||||
var normalizeName = function(parentId, moduleName) {
|
||||
// normalize plugin requires
|
||||
if (moduleName.indexOf("!") !== -1) {
|
||||
var chunks = moduleName.split("!");
|
||||
return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
|
||||
return normalizeName(parentId, chunks[0]) + "!" + normalizeName(parentId, chunks[1]);
|
||||
}
|
||||
// normalize relative requires
|
||||
if (moduleName.charAt(0) == ".") {
|
||||
var base = parentId.split("/").slice(0, -1).join("/");
|
||||
moduleName = (base || parentId) + "/" + moduleName;
|
||||
|
||||
while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
|
||||
while (moduleName.indexOf(".") !== -1 && previous != moduleName) {
|
||||
var previous = moduleName;
|
||||
moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
|
||||
}
|
||||
|
@ -94,117 +178,80 @@ var normalizeModule = function(parentId, moduleName) {
|
|||
return moduleName;
|
||||
};
|
||||
|
||||
/**
|
||||
* Internal function to lookup moduleNames and resolve them by calling the
|
||||
* definition function if needed.
|
||||
*/
|
||||
var lookup = function(parentId, moduleName) {
|
||||
moduleName = normalizeModule(parentId, moduleName);
|
||||
|
||||
var module = _define.modules[moduleName];
|
||||
if (!module) {
|
||||
module = _define.payloads[moduleName];
|
||||
var exports = {};
|
||||
if (typeof module === 'function') {
|
||||
var mod = {
|
||||
id: moduleName,
|
||||
uri: '',
|
||||
exports: exports,
|
||||
packaged: true
|
||||
};
|
||||
|
||||
var req = function(module, callback) {
|
||||
return _require(moduleName, module, callback);
|
||||
};
|
||||
|
||||
req.toUrl = require.toUrl;
|
||||
_define.modules[moduleName] = exports;
|
||||
|
||||
var returnValue = module(req, exports, mod);
|
||||
exports = returnValue || mod.exports;
|
||||
_define.modules[moduleName] = exports;
|
||||
delete _define.payloads[moduleName];
|
||||
} else {
|
||||
exports = module;
|
||||
}
|
||||
module = _define.modules[moduleName] = exports;
|
||||
}
|
||||
return module;
|
||||
var normalizeNames = function(parentId, moduleNames) {
|
||||
return moduleNames.map(function(name) {
|
||||
return normalizeName(parentId, name);
|
||||
});
|
||||
};
|
||||
|
||||
function exportAce(ns) {
|
||||
var root = global;
|
||||
if (ns) {
|
||||
if (!global[ns])
|
||||
global[ns] = {};
|
||||
root = global[ns];
|
||||
}
|
||||
|
||||
if (!root.define || !root.define.packaged) {
|
||||
_define.original = root.define;
|
||||
root.define = _define;
|
||||
root.define.packaged = true;
|
||||
}
|
||||
|
||||
if (!root.require || !root.require.packaged) {
|
||||
// _require.original = root.require || _require.original;
|
||||
root.require = require;
|
||||
root.require.packaged = true;
|
||||
}
|
||||
root.miniRequire = require;
|
||||
}
|
||||
var require = function(module, callback) {
|
||||
return _require("", module, callback);
|
||||
};
|
||||
require.MODULE_LOAD_URL = MODULE_LOAD_URL;
|
||||
|
||||
require.toUrl = function(url) {
|
||||
var root = "/static";
|
||||
var urlMap = require.urlMap || {};
|
||||
var parts = url.split("/");
|
||||
var top = parts[0];
|
||||
parts.shift();
|
||||
return [root, urlMap[top] || top].concat(parts).join("/");
|
||||
require.undef = function(module, callback) {
|
||||
module = normalizeName("", module);
|
||||
var path = require.toUrl(module);
|
||||
delete define.loaded[module];
|
||||
delete define.modules[module];
|
||||
delete define.fetchedUrls[path];
|
||||
};
|
||||
|
||||
var loadScript = function(path, callback) {
|
||||
var head = document.head || document.documentElement;
|
||||
var s = document.createElement('script');
|
||||
require.MODULE_LOAD_URL = MODULE_LOAD_URL;
|
||||
|
||||
require.toUrl = function(module, ext) {
|
||||
var path = module;
|
||||
if (!/https?:\/\//.test(path))
|
||||
path = require.MODULE_LOAD_URL + "/" + path + (ext || "");
|
||||
return path;
|
||||
};
|
||||
|
||||
var loadScript = function(path, id, callback) {
|
||||
var head = document.head || document.documentElement;
|
||||
var s = document.createElement("script");
|
||||
s.src = path;
|
||||
s.charset = 'utf-8';
|
||||
s.async = true;
|
||||
head.appendChild(s);
|
||||
|
||||
s.onload = s.onreadystatechange = function(_, isAbort) {
|
||||
if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") {
|
||||
s = s.onload = s.onreadystatechange = null;
|
||||
if (!isAbort)
|
||||
callback();
|
||||
callback(null, id);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
_require.load = function(module, callback) {
|
||||
require.load = function(module) {
|
||||
var i = module.indexOf("!") + 1;
|
||||
if (i) {
|
||||
var plugin = module.substring(0, i);
|
||||
module = module.substr(i);
|
||||
if (require[plugin]) {
|
||||
require[plugin](module, callback);
|
||||
require[plugin](module, processLoadQueue);
|
||||
} else {
|
||||
console.error("require plugin " + plugin + "missing");
|
||||
}
|
||||
} else {
|
||||
loadScript(require.MODULE_LOAD_URL + "/" + module + ".js", callback);
|
||||
var url = require.toUrl(module, ".js");
|
||||
if (define.fetchedUrls[url] & 1)
|
||||
return false;
|
||||
define.fetchedUrls[url] |= 1;
|
||||
loadScript(url, module, processLoadQueue);
|
||||
}
|
||||
};
|
||||
|
||||
/*** plugins ***/
|
||||
require["text!"] = function(module, callback) {
|
||||
var url = require.toUrl(module);
|
||||
if (define.fetchedUrls[url] & 2)
|
||||
return false;
|
||||
define.fetchedUrls[url] |= 2;
|
||||
var cb = function(e, val) {
|
||||
if (e) console.error("Couldn't load module " + module, e);
|
||||
_define.modules["text!" + module] = val;
|
||||
define("text!" + module, [], val);
|
||||
callback();
|
||||
};
|
||||
var url = require.MODULE_LOAD_URL + "/" + module;
|
||||
var xhr = new window.XMLHttpRequest();
|
||||
xhr.open("GET", url + "?access_token=fake_token", true);
|
||||
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
|
||||
|
@ -213,6 +260,18 @@ require["text!"] = function(module, callback) {
|
|||
xhr.send("");
|
||||
};
|
||||
|
||||
exportAce(ACE_NAMESPACE);
|
||||
/*** add global define ***/
|
||||
if (!global.define || !global.define.packaged) {
|
||||
define.original = global.define;
|
||||
global.define = define;
|
||||
global.define.packaged = true;
|
||||
}
|
||||
|
||||
if (!global.require || !global.require.packaged) {
|
||||
global.require = require;
|
||||
global.require.packaged = true;
|
||||
}
|
||||
global.miniRequire = require;
|
||||
|
||||
|
||||
})();
|
||||
|
|
|
@ -58,12 +58,12 @@
|
|||
"c9.ide.language.javascript.tern": "#3d678a103a",
|
||||
"c9.ide.language.javascript.infer": "#1ae097af44",
|
||||
"c9.ide.language.jsonalyzer": "#45a20496be",
|
||||
"c9.ide.collab": "#fabc22dda7",
|
||||
"c9.ide.collab": "#9b7f85fc89",
|
||||
"c9.ide.local": "#d5c324ee5b",
|
||||
"c9.ide.find": "#be3bca94b7",
|
||||
"c9.ide.find.infiles": "#462928475c",
|
||||
"c9.ide.find.replace": "#fe41fa768d",
|
||||
"c9.ide.run.debug": "#b734a2a47f",
|
||||
"c9.ide.run.debug": "#9a05fadc55",
|
||||
"c9.ide.ace.emmet": "#e5f1a92ac3",
|
||||
"c9.ide.ace.gotoline": "#4d1a93172c",
|
||||
"c9.ide.ace.keymaps": "#422e83553b",
|
||||
|
@ -88,11 +88,11 @@
|
|||
"c9.ide.preview": "#3c4dded23f",
|
||||
"c9.ide.preview.browser": "#be197b0464",
|
||||
"c9.ide.preview.markdown": "#bf952685f6",
|
||||
"c9.ide.pubsub": "#e6526a20f7",
|
||||
"c9.ide.pubsub": "#7dd0a37571",
|
||||
"c9.ide.readonly": "#f6f07bbe42",
|
||||
"c9.ide.recentfiles": "#7c099abf40",
|
||||
"c9.ide.remote": "#37773d905b",
|
||||
"c9.ide.run": "#9bf773dd1b",
|
||||
"c9.ide.run": "#63341edc5d",
|
||||
"c9.ide.run.build": "#2ba0107f97",
|
||||
"c9.ide.save": "#4cf2ae332c",
|
||||
"c9.ide.terminal.monitor": "#8e025b3ae1",
|
||||
|
|
|
@ -37,7 +37,7 @@ define(function(require, module, exports) {
|
|||
if (!skipProps[prop])
|
||||
plugin[prop] = options[prop];
|
||||
}
|
||||
var totalLoadTime;
|
||||
var totalLoadTime, startLoadTime;
|
||||
|
||||
function load() {
|
||||
if (loaded) return false;
|
||||
|
@ -279,6 +279,11 @@ define(function(require, module, exports) {
|
|||
*/
|
||||
get totalLoadTime(){ return totalLoadTime; },
|
||||
set totalLoadTime(v){ totalLoadTime = v; },
|
||||
/**
|
||||
*
|
||||
*/
|
||||
get startLoadTime(){ return startLoadTime; },
|
||||
set startLoadTime(v){ startLoadTime = v; },
|
||||
|
||||
_events: [
|
||||
/**
|
||||
|
|
|
@ -562,7 +562,7 @@ define(function(require, exports, module) {
|
|||
|
||||
function setAPIKey(apikey){
|
||||
// Validate Key
|
||||
if (!apikey || !apikey.match(/\w{28}=/))
|
||||
if (!apikey || !apikey.match(/[\w+]{27}=/))
|
||||
throw new Error("Invalid API key");
|
||||
|
||||
return {
|
||||
|
|
|
@ -357,7 +357,7 @@ define(function(require, exports, module) {
|
|||
},
|
||||
|
||||
/**
|
||||
* Spawns a child process in a TMUX and returns a stream object.
|
||||
* Spawns a child process in a TMUX session and returns a stream object.
|
||||
* Use this method if the process you wish to start requires a
|
||||
* terminal (for instance VI).
|
||||
*
|
||||
|
|
|
@ -50,6 +50,11 @@ define(function(require, exports, module) {
|
|||
showDisconnect(e);
|
||||
});
|
||||
});
|
||||
vfs.on("away", function(){
|
||||
});
|
||||
vfs.on("back", function(){
|
||||
hideDisconnect();
|
||||
});
|
||||
vfs.on("connect", function(){
|
||||
hideDisconnect();
|
||||
});
|
||||
|
|
|
@ -26,7 +26,7 @@ define(function(require, module, exports) {
|
|||
var meta = {};
|
||||
var hasValue = options && (typeof options.value === "string");
|
||||
|
||||
var tab, lastState, title, tooltip, editor, recentValue;
|
||||
var tab, lastState, title, tooltip, editor, recentValue, ready;
|
||||
|
||||
plugin.on("newListener", function(type, listener) {
|
||||
if (type == "state.set" && lastState) {
|
||||
|
@ -332,6 +332,15 @@ define(function(require, module, exports) {
|
|||
editor = v;
|
||||
emit("setEditor", {editor: v});
|
||||
},
|
||||
/**
|
||||
* Whether the document is fully loaded
|
||||
* @property {Boolean} ready
|
||||
*/
|
||||
get ready(){ return ready; },
|
||||
set ready(v) {
|
||||
if (!ready) emit.sticky("ready");
|
||||
ready = true;
|
||||
},
|
||||
/**
|
||||
* The tooltip displayed when hovering over the tab button
|
||||
* @property {String} tooltip
|
||||
|
|
|
@ -1113,6 +1113,7 @@ define(function(require, module, exports) {
|
|||
if (!doc.meta.timestamp)
|
||||
doc.meta.timestamp = Date.now() - settings.timeOffset;
|
||||
|
||||
doc.ready = true;
|
||||
emit("open", { tab: tab, options: options });
|
||||
callback && callback(null, tab);
|
||||
}
|
||||
|
@ -1123,7 +1124,7 @@ define(function(require, module, exports) {
|
|||
|
||||
// Hooks for plugins that want to override value and state loading
|
||||
var event = {
|
||||
options: options,
|
||||
options: options,
|
||||
tab: tab,
|
||||
loadFromDisk: loadFromDisk,
|
||||
setLoading: setLoading,
|
||||
|
@ -1161,7 +1162,10 @@ define(function(require, module, exports) {
|
|||
});
|
||||
}
|
||||
else {
|
||||
done(null, null);
|
||||
// done has to be called asynchronously
|
||||
setTimeout(function() {
|
||||
done(null, null);
|
||||
});
|
||||
}
|
||||
|
||||
return tab;
|
||||
|
|
|
@ -247,20 +247,22 @@ require(["lib/architect/architect", "lib/chai/chai"],
|
|||
|
||||
it('should rename a directory - change tab path', function(done) {
|
||||
var vpath = "/dir/stuff.json";
|
||||
tabs.openFile(vpath, function(err, tab) {
|
||||
expect(tab.path).to.equal(vpath);
|
||||
expect(tab.title).to.equal("stuff.json");
|
||||
|
||||
fs.rename("/dir", "/dir2", function(err) {
|
||||
if (err)
|
||||
throw err;
|
||||
expect(tab.path).to.equal("/dir2/stuff.json");
|
||||
fs.rmdir("/dir2", { recursive: true }, function(){
|
||||
tabs.openFile(vpath, function(err, tab) {
|
||||
expect(tab.path).to.equal(vpath);
|
||||
expect(tab.title).to.equal("stuff.json");
|
||||
tab.unload();
|
||||
fs.rename("/dir2", "/dir", function (err) {
|
||||
|
||||
fs.rename("/dir", "/dir2", function(err) {
|
||||
if (err)
|
||||
throw err;
|
||||
done();
|
||||
expect(tab.path).to.equal("/dir2/stuff.json");
|
||||
expect(tab.title).to.equal("stuff.json");
|
||||
tab.unload();
|
||||
fs.rename("/dir2", "/dir", function (err) {
|
||||
if (err)
|
||||
throw err;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -74,7 +74,7 @@ define(function(require, exports, module) {
|
|||
list.forEach(function(stat){
|
||||
var name = stat.name;
|
||||
// If the plugin doesn't exist
|
||||
if (names.indexOf(name) == -1 && name.charAt(0) != "." && name != "_")
|
||||
if (names.indexOf(name) == -1 && name.charAt(0) != "." && name.charAt(0) != "_")
|
||||
toLoad.push(name);
|
||||
});
|
||||
|
||||
|
@ -139,10 +139,12 @@ define(function(require, exports, module) {
|
|||
watch("~/.c9/plugins/" + pluginPath);
|
||||
|
||||
var cfg = options.plugins[path];
|
||||
cfg.packagePath = join(vfs.baseUrl, c9.projectId, "plugins",
|
||||
auth.accessToken, pluginPath.replace(/^plugins\//, ""));
|
||||
cfg.staticPrefix = join(vfs.baseUrl, c9.projectId, "plugins",
|
||||
auth.accessToken, name);
|
||||
var host = vfs.baseUrl + "/";
|
||||
var base = join(String(c9.projectId),
|
||||
"plugins", auth.accessToken);
|
||||
|
||||
cfg.packagePath = host + join(base, pluginPath.replace(/^plugins\//, ""));
|
||||
cfg.staticPrefix = host + join(base, name);
|
||||
cfg.apikey = "0000000000000000000000000000=";
|
||||
|
||||
config.push(cfg);
|
||||
|
|
|
@ -76,15 +76,19 @@ define(function(require, exports, module) {
|
|||
else return;
|
||||
|
||||
queue.push({ name: item.packageName, version: item.version });
|
||||
|
||||
if (installing)
|
||||
installing.push(item);
|
||||
});
|
||||
|
||||
if (installing) return;
|
||||
installing = true;
|
||||
installing = config;
|
||||
|
||||
var i = 0;
|
||||
function next(){
|
||||
function next(err){
|
||||
if (err) console.log(err);
|
||||
|
||||
if (!queue[i]) {
|
||||
config = queue;
|
||||
installing = false; queue = [];
|
||||
architect.loadAdditionalPlugins(config, callback);
|
||||
return;
|
||||
|
@ -98,17 +102,16 @@ define(function(require, exports, module) {
|
|||
}
|
||||
|
||||
function installPlugin(name, version, callback){
|
||||
proc.spawn("c9", {
|
||||
args: ["install", "--local", "--force", "--accessToken=" + auth.accessToken, name + "@" + version]
|
||||
proc.spawn("bash", {
|
||||
args: ["-c", ["c9", "install", "--local", "--force", "--accessToken=" + auth.accessToken, name + "@" + version].join(" ")]
|
||||
}, function(err, process){
|
||||
if (err) return callback(err);
|
||||
|
||||
var res = null;
|
||||
process.stdout.on("data", function(c){
|
||||
res = c.toString("utf8");
|
||||
console.log(c);
|
||||
});
|
||||
process.stderr.on("data", function(c){
|
||||
err = c.toString("utf8");
|
||||
console.error(c);
|
||||
});
|
||||
|
||||
process.on("exit", function(code){
|
||||
|
@ -117,7 +120,7 @@ define(function(require, exports, module) {
|
|||
error.code = code;
|
||||
return callback(error);
|
||||
}
|
||||
callback(null, res);
|
||||
callback();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -66,15 +66,17 @@ define(function(require, exports, module) {
|
|||
names.push(name);
|
||||
|
||||
var path = options.packagePath + ".js";
|
||||
var base = join(vfs.baseUrl, c9.projectId, "plugins", auth.accessToken);
|
||||
options.packagePath = join(base, path.replace(/^plugins\//, ""));
|
||||
options.staticPrefix = join(base, name);
|
||||
var host = vfs.baseUrl + "/";
|
||||
var base = join(String(c9.projectId), "plugins", auth.accessToken);
|
||||
|
||||
options.packagePath = host + join(base, path.replace(/^plugins\//, ""));
|
||||
options.staticPrefix = host + join(base, name);
|
||||
|
||||
if (!options.setup) {
|
||||
wait++;
|
||||
|
||||
var install = [];
|
||||
fs.exists(path, function(exists){
|
||||
fs.exists("~/.c9/" + path, function(exists){
|
||||
if (!exists) {
|
||||
install.push(options);
|
||||
names.remove(name);
|
||||
|
|
|
@ -529,7 +529,7 @@ define(function(require, exports, module) {
|
|||
if (!template)
|
||||
template = "c9.ide.default";
|
||||
|
||||
var url = join(staticPrefix, "templates", template + ".tar.gz");
|
||||
var url = staticPrefix + "/" + join("templates", template + ".tar.gz");
|
||||
if (!url.match(/^http/))
|
||||
url = location.origin + url;
|
||||
|
||||
|
@ -551,20 +551,21 @@ define(function(require, exports, module) {
|
|||
if (err)
|
||||
return handleError(err);
|
||||
|
||||
// Download tar file with template for plugin
|
||||
var pluginsDir = join("~", ".c9/plugins/_/");
|
||||
var pluginsDirAbsolute = pluginsDir.replace(/^~/, c9.home);
|
||||
var tarPath = join(pluginsDir, template + ".tar.gz");
|
||||
var tarPathAbsolute = tarPath.replace(/^~/, c9.home);
|
||||
proc.execFile("curl", {
|
||||
args: ["-L", url, "--create-dirs", "-o", tarPathAbsolute]
|
||||
|
||||
// Download tar file with template for plugin
|
||||
proc.execFile("bash", {
|
||||
args: ["-c", ["curl", "-L", url, "--create-dirs", "-o", tarPathAbsolute].join(" ")]
|
||||
}, function(err, stderr, stdout){
|
||||
if (err)
|
||||
return handleError(err);
|
||||
|
||||
// Untar tar file
|
||||
proc.execFile("tar", {
|
||||
args: ["-zxvf", tarPath, "-C", pluginsDirAbsolute]
|
||||
proc.execFile("bash", {
|
||||
args: ["-c", ["tar", "-zxvf", tarPath, "-C", pluginsDirAbsolute].join(" ")]
|
||||
}, function(err, stderr, stdout){
|
||||
if (err)
|
||||
return handleError(err);
|
||||
|
@ -579,7 +580,7 @@ define(function(require, exports, module) {
|
|||
fs.unlink(tarPath, function(){
|
||||
|
||||
// Add plugin to favorites
|
||||
favs.addFavorite(pluginsDir, "plugins");
|
||||
favs.addFavorite(dirname(pluginsDir), "plugins");
|
||||
|
||||
// Select and expand the folder of the plugin
|
||||
tree.expandAndSelect(path);
|
||||
|
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -223,7 +223,8 @@ define(function(require, exports, module) {
|
|||
eioOptions = {
|
||||
path: parsedSocket.path,
|
||||
host: parsedSocket.host,
|
||||
port: parsedSocket.port || "443",
|
||||
port: parsedSocket.port
|
||||
|| parsedSocket.protocol == "https:" ? "443" : null,
|
||||
secure: parsedSocket.protocol
|
||||
? parsedSocket.protocol == "https:" : true
|
||||
};
|
||||
|
|
|
@ -19,9 +19,11 @@ function Vfs(vfs, master, options) {
|
|||
this.vfs = vfs;
|
||||
this.master = master;
|
||||
this.debug = options.debug || false;
|
||||
this.logger = options.logger || {log: function(){}};
|
||||
this.readonly = options.readonly || false;
|
||||
this.public = options.public || false;
|
||||
this.vfsOptions = options.vfsOptions || {};
|
||||
this.pid = this.vfsOptions.pid;
|
||||
var extendToken = options.extendToken;
|
||||
|
||||
this.homeDir = options.homeDir;
|
||||
|
@ -152,6 +154,7 @@ Vfs.prototype._createEngine = function(vfs, options) {
|
|||
});
|
||||
|
||||
this.keepAliveTimer = null;
|
||||
var listeningForEIOSocketClose = false;
|
||||
|
||||
this.workers = 0;
|
||||
|
||||
|
@ -167,6 +170,35 @@ Vfs.prototype._createEngine = function(vfs, options) {
|
|||
that.socket.disconnect();
|
||||
|
||||
that.socket = socket;
|
||||
/* - socket is the reliablesocket,
|
||||
- socket.socket is the reconnectsocket,
|
||||
- socket.socket.socket is engineio's socket */
|
||||
if (socket.socket) {
|
||||
/* Add listener to core Engine.io socket used for user communication
|
||||
to track and log all reasons causing it to close so when users
|
||||
complain about disconnects we can investigate what's causing them */
|
||||
var listenForEIOSocketClose = function (eioSocket) {
|
||||
if (!eioSocket || listeningForEIOSocketClose) return;
|
||||
eioSocket.once("close", function (reason, description) {
|
||||
var logMetadata = {message: "Socket closed", collab: options.collab, reason: reason, description: description, id: that.id, sid: socket.id, pid: that.pid};
|
||||
console.log(logMetadata);
|
||||
that.logger.log(logMetadata);
|
||||
listeningForEIOSocketClose = false;
|
||||
});
|
||||
listeningForEIOSocketClose = true;
|
||||
};
|
||||
socket.socket.once('away', function() {
|
||||
listenForEIOSocketClose(socket.socket.socket);
|
||||
});
|
||||
socket.socket.once('back', function() {
|
||||
listenForEIOSocketClose(socket.socket.socket);
|
||||
});
|
||||
}
|
||||
socket.on('disconnect', function (err) {
|
||||
var logMetadata = {message: "Socket disconnected", collab: options.collab, err: err, id: that.id, sid: socket.id, pid: that.pid};
|
||||
console.log(logMetadata);
|
||||
that.logger.log(logMetadata);
|
||||
});
|
||||
|
||||
var transport = new smith.EngineIoTransport(socket, true);
|
||||
var worker = new VfsWorker(vfs);
|
||||
|
@ -185,7 +217,10 @@ Vfs.prototype._createEngine = function(vfs, options) {
|
|||
}
|
||||
|
||||
worker.on("disconnect", function() {
|
||||
console.log("VFS socket disconnect:", options.collab, that.id, socket.id);
|
||||
var logMetadata = {collab: options.collab, id: that.id, sid: socket.id, pid: that.pid};
|
||||
console.log("VFS socket disconnect:", logMetadata);
|
||||
logMetadata.message = "VFS socket disconnect";
|
||||
that.logger.log(logMetadata);
|
||||
if (options.collab) {
|
||||
if (collabApi)
|
||||
return disposeCollabClient();
|
||||
|
|
Ładowanie…
Reference in New Issue