kopia lustrzana https://github.com/c9/core
206 wiersze
7.1 KiB
JavaScript
206 wiersze
7.1 KiB
JavaScript
define(function(require, exports, module) {
|
|
main.consumes = ["Editor", "editors"];
|
|
main.provides = ["texteditor"];
|
|
return main;
|
|
|
|
function main(options, imports, register) {
|
|
var Editor = imports.Editor;
|
|
var editors = imports.editors;
|
|
|
|
/***** Initialization *****/
|
|
|
|
var extensions = ["txt"];
|
|
var handle = editors.register(
|
|
"texteditor", "Text Editor", TextEditor, extensions);
|
|
|
|
function TextEditor(){
|
|
var plugin = new Editor("Ajax.org", main.consumes, extensions);
|
|
var emit = plugin.getEmitter();
|
|
|
|
var editor;
|
|
|
|
plugin.on("draw", function(e) {
|
|
// Create UI elements
|
|
editor = document.createElement("textarea");
|
|
e.htmlNode.appendChild(editor);
|
|
|
|
editor.style.display = "block";
|
|
editor.style.position = "absolute";
|
|
editor.style.borderRadius = "6px 0 0 0";
|
|
editor.style.left =
|
|
editor.style.top =
|
|
editor.style.bottom =
|
|
editor.style.right = "3px";
|
|
|
|
// @todo UndoManager integration
|
|
});
|
|
|
|
/***** Method *****/
|
|
|
|
/***** Lifecycle *****/
|
|
|
|
plugin.on("load", function(){
|
|
});
|
|
|
|
var currentDocument;
|
|
plugin.on("documentLoad", function(e) {
|
|
var doc = e.doc;
|
|
var session = doc.getSession();
|
|
|
|
// Value
|
|
doc.on("getValue", function get(e) {
|
|
return currentDocument == doc
|
|
? editor.value
|
|
: e.value;
|
|
}, session);
|
|
|
|
doc.on("setValue", function set(e) {
|
|
if (currentDocument == doc)
|
|
editor.value = e.value || "";
|
|
}, session);
|
|
|
|
// Title & Tooltip
|
|
function setTitle(e) {
|
|
var path = doc.tab.path;
|
|
if (!path) return;
|
|
|
|
// Caption is the filename
|
|
doc.title = path.substr(path.lastIndexOf("/") + 1);
|
|
|
|
// Tooltip is the full path
|
|
doc.tooltip = path;
|
|
}
|
|
doc.tab.on("setPath", setTitle, session);
|
|
|
|
setTitle({path: doc.tab.path || ""});
|
|
|
|
var tab = doc.tab;
|
|
tab.backgroundColor = "rgb(255,255,255)";
|
|
});
|
|
plugin.on("documentActivate", function(e) {
|
|
editor.value = e.doc.value;
|
|
currentDocument = e.doc;
|
|
});
|
|
plugin.on("documentUnload", function(e) {
|
|
|
|
});
|
|
plugin.on("getState", function(e) {
|
|
if (editor)
|
|
e.state.scrollTop = editor.scrollTop;
|
|
});
|
|
plugin.on("setState", function(e) {
|
|
if (e.state.scrollTop)
|
|
editor.scrollTop = e.state.scrollTop;
|
|
});
|
|
plugin.on("clear", function(){
|
|
editor.value = "";
|
|
});
|
|
plugin.on("focus", function(){
|
|
editor.focus();
|
|
});
|
|
plugin.on("blur", function(){
|
|
});
|
|
plugin.on("resize", function(){
|
|
});
|
|
plugin.on("cut", function(e) {
|
|
if (e.native) return; // Handled by the textarea
|
|
|
|
var sel = window.getSelection();
|
|
var range = sel.getRangeAt(0);
|
|
var data = range.toString();
|
|
|
|
// Remove contents
|
|
range.deleteContents();
|
|
|
|
// Add data to clipboard
|
|
e.clipboardData.setData("text/plain", data);
|
|
});
|
|
plugin.on("copy", function(e) {
|
|
if (e.native) return; // Handled by the textarea
|
|
|
|
var sel = window.getSelection();
|
|
var range = sel.getRangeAt(0);
|
|
var data = range.toString();
|
|
|
|
// Add data to clipboard
|
|
e.clipboardData.setData("text/plain", data);
|
|
});
|
|
plugin.on("paste", function(e) {
|
|
if (e.native) return; // Handled by the textarea
|
|
|
|
var data = e.clipboardData.getData("text/plain");
|
|
if (data === false) return;
|
|
|
|
var sel = window.getSelection();
|
|
var range = sel.getRangeAt(0);
|
|
|
|
// Delete contents
|
|
range.deleteContents();
|
|
|
|
// Add pasted data
|
|
range.insertNode(document.createTextNode(data));
|
|
});
|
|
plugin.on("enable", function(){
|
|
editor.disabled = false;
|
|
});
|
|
plugin.on("disable", function(){
|
|
editor.disabled = true;
|
|
});
|
|
plugin.on("unload", function(){
|
|
editor.parentNode.removeChild(editor);
|
|
editor = null;
|
|
});
|
|
|
|
/***** Register and define API *****/
|
|
|
|
/**
|
|
* The texteditor handle, responsible for events that involve all
|
|
* TextEditor instances. This is the object you get when you request
|
|
* the texteditor service in your plugin.
|
|
*
|
|
* Example:
|
|
*
|
|
* define(function(require, exports, module) {
|
|
* main.consumes = ["texteditor"];
|
|
* main.provides = ["myplugin"];
|
|
* return main;
|
|
*
|
|
* function main(options, imports, register) {
|
|
* var texteditorHandle = imports.texteditor;
|
|
* });
|
|
* });
|
|
*
|
|
*
|
|
* @class texteditor
|
|
* @extends Plugin
|
|
* @singleton
|
|
*/
|
|
/**
|
|
* Simple Text Editor for Cloud9. This editor is not actually
|
|
* used by Cloud9, but rather serves as an example of how to create
|
|
* a simple editor for Cloud9. Check out the source code and
|
|
* use it as a template for creating your own editor.
|
|
*
|
|
* @class texteditor.TextEditor
|
|
* @extends Editor
|
|
**/
|
|
/**
|
|
* The type of editor. Use this to create the terminal using
|
|
* {@link tabManager#openEditor} or {@link editors#createEditor}.
|
|
* @property {"texteditor"} type
|
|
* @readonly
|
|
*/
|
|
plugin.freezePublicAPI({
|
|
|
|
});
|
|
|
|
plugin.load(null, "texteditor");
|
|
|
|
return plugin;
|
|
}
|
|
|
|
register(null, {
|
|
texteditor: handle
|
|
});
|
|
}
|
|
}); |