kopia lustrzana https://github.com/c9/core
150 wiersze
4.6 KiB
JavaScript
150 wiersze
4.6 KiB
JavaScript
define(function(require, exports, module) {
|
|
main.consumes = [
|
|
"Plugin", "ui", "commands", "menus", "tabManager", "dialog.alert", "preferences"
|
|
];
|
|
main.provides = ["format"];
|
|
return main;
|
|
|
|
function main(options, imports, register) {
|
|
var Plugin = imports.Plugin;
|
|
var ui = imports.ui;
|
|
var commands = imports.commands;
|
|
var tabManager = imports.tabManager;
|
|
var menus = imports.menus;
|
|
var alert = imports["dialog.alert"].show;
|
|
var prefs = imports.preferences;
|
|
|
|
/***** Initialization *****/
|
|
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
var emit = plugin.getEmitter();
|
|
|
|
var count = 300;
|
|
var mnuFormat;
|
|
|
|
var loaded = false;
|
|
function load() {
|
|
if (loaded) return false;
|
|
loaded = true;
|
|
|
|
commands.addCommand({
|
|
name: "formatcode",
|
|
hint: "reformat selected JavaScript code in the editor",
|
|
msg: "Beautifying selection.",
|
|
bindKey: { mac: "Command-Shift-B", win: "Ctrl-Shift-B" },
|
|
exec: function(editor, args) {
|
|
formatCode(args.mode, editor, args.all);
|
|
}
|
|
}, plugin);
|
|
|
|
commands.addCommand({
|
|
name: "formatprefs",
|
|
hint: "open language & formatting preferences",
|
|
exec: function(editor, args) {
|
|
commands.exec("openpreferences", null, {
|
|
panel: "preferences.project",
|
|
section: "JavaScript Support"
|
|
});
|
|
}
|
|
}, plugin);
|
|
|
|
mnuFormat = new ui.menu({
|
|
onitemclick: function(e) {
|
|
if (e.value && e.value != "auto")
|
|
formatCode(e.value);
|
|
}
|
|
});
|
|
menus.addItemByPath("Edit/Code Formatting", mnuFormat, 1400, plugin);
|
|
|
|
menus.addItemByPath("Edit/Code Formatting/Apply Code Formatting", new ui.item({
|
|
selected: true,
|
|
value: "auto",
|
|
command: "formatcode"
|
|
}), 100, plugin);
|
|
|
|
menus.addItemByPath("Edit/Code Formatting/Open Language & Formatting Preferences...", new ui.item({
|
|
selected: true,
|
|
value: "auto",
|
|
command: "formatprefs"
|
|
}), 200, plugin);
|
|
}
|
|
|
|
/***** Methods *****/
|
|
|
|
function getMode(editor) {
|
|
return editor.ace.session.syntax;
|
|
}
|
|
|
|
function formatCode(mode, editor, all) {
|
|
if (!editor)
|
|
editor = tabManager.focussedTab.editor;
|
|
|
|
if (!mode || mode === "auto")
|
|
mode = getMode(editor);
|
|
|
|
if (editor.ace.selection.isEmpty())
|
|
all = true;
|
|
|
|
if (!emit("format", { mode: mode, editor: editor, all: all })) {
|
|
alert("Error",
|
|
"This code could not be beautified",
|
|
'"' + mode + "\" is not supported yet");
|
|
}
|
|
}
|
|
|
|
function addFormatter(caption, mode, plugin) {
|
|
if (count === 300)
|
|
menus.addItemByPath("Edit/Code Formatting/~", new ui.divider(), 300, plugin);
|
|
menus.addItemByPath("Edit/Code Formatting/" + caption, new ui.item({
|
|
value: mode,
|
|
isAvailable: commands.commands.formatcode.isAvailable
|
|
}), count += 100, plugin);
|
|
}
|
|
|
|
/***** Lifecycle *****/
|
|
|
|
plugin.on("load", function() {
|
|
load();
|
|
});
|
|
plugin.on("enable", function() {
|
|
|
|
});
|
|
plugin.on("disable", function() {
|
|
|
|
});
|
|
plugin.on("unload", function() {
|
|
loaded = false;
|
|
mnuFormat = null;
|
|
});
|
|
|
|
/***** Register and define API *****/
|
|
|
|
/**
|
|
*
|
|
**/
|
|
plugin.freezePublicAPI({
|
|
/**
|
|
*
|
|
*/
|
|
formatCode: formatCode,
|
|
|
|
/**
|
|
*
|
|
*/
|
|
addFormatter: addFormatter,
|
|
|
|
_events: [
|
|
/**
|
|
* @event format
|
|
* @param {Object} e
|
|
* @param {String} e.mode
|
|
*/
|
|
"format"
|
|
]
|
|
});
|
|
|
|
register(null, {
|
|
format: plugin
|
|
});
|
|
}
|
|
}); |