mirror of
https://github.com/linuxserver/core.git
synced 2026-02-20 05:07:19 +08:00
84 lines
3.2 KiB
JavaScript
84 lines
3.2 KiB
JavaScript
define(function(require, exports, module) {
|
|
main.consumes = [
|
|
"Plugin", "settings", "save", "collab", "tabManager", "dialog.error", "format"
|
|
];
|
|
main.provides = ["format.custom"];
|
|
return main;
|
|
|
|
function main(options, imports, register) {
|
|
var settings = imports.settings;
|
|
var tabs = imports.tabManager;
|
|
var save = imports.save;
|
|
var format = imports.format;
|
|
var collab = imports.collab;
|
|
var showError = imports["dialog.error"].show;
|
|
var Plugin = imports.Plugin;
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
|
|
var ERROR_NOT_FOUND = 127;
|
|
|
|
var fromFormatCommand;
|
|
|
|
function load() {
|
|
collab.on("beforeSave", function(e) {
|
|
var mode = getMode(e.docId);
|
|
var enabled = settings.getBool("project/" + mode + "/@formatOnSave");
|
|
if (!enabled && !fromFormatCommand)
|
|
return;
|
|
if (mode === "javascript" && settings.getBool("project/javascript/@use_jsbeautify"))
|
|
return; // use built-in JS Beautify instead
|
|
var formatter = settings.get("project/" + mode + "/@formatter");
|
|
if (!formatter)
|
|
return showError("No code formatter set for " + mode + ": please check your project settings");
|
|
e.postProcessor = {
|
|
command: "bash",
|
|
args: ["-c", formatter]
|
|
};
|
|
}, plugin);
|
|
collab.on("postProcessorError", function(e) {
|
|
var mode = getMode(e.docId) || "language";
|
|
if (e.code !== ERROR_NOT_FOUND)
|
|
return console.error("Error running formatter for " + mode + ": " + (e.stderr || e.code));
|
|
var formatter = (settings.get("project/" + mode + "/@formatter") || "formatter").replace(/(.*?) .*/, "$1");
|
|
showError("Error running code formatter for " + mode + ": "
|
|
+ formatter + " not found, please check your project settings");
|
|
});
|
|
format.on("format", function(e) {
|
|
if (!settings.get("project/" + e.mode + "/@formatter"))
|
|
return;
|
|
if (e.mode === "javascript" && settings.getBool("project/javascript/@use_jsbeautify"))
|
|
return; // use built-in JS Beautify instead
|
|
fromFormatCommand = true;
|
|
save.save(tabs.focussedTab);
|
|
fromFormatCommand = false;
|
|
return true;
|
|
}, plugin);
|
|
}
|
|
|
|
function getMode(docId) {
|
|
var tab = tabs.findTab(docId);
|
|
if (!tab || !tab.editor || !tab.editor.ace)
|
|
return;
|
|
return tab.editor.ace.session.syntax;
|
|
}
|
|
|
|
plugin.on("load", function() {
|
|
load();
|
|
});
|
|
plugin.on("unload", function() {
|
|
fromFormatCommand = false;
|
|
});
|
|
|
|
/**
|
|
* Custom code formatter extension
|
|
*
|
|
* Reformats code in the current document on save
|
|
*/
|
|
plugin.freezePublicAPI({});
|
|
|
|
register(null, {
|
|
"format.custom": plugin
|
|
});
|
|
}
|
|
});
|