c9-core/plugins/c9.ide.scm/mergetool.js

77 wiersze
2.0 KiB
JavaScript

define(function(require, exports, module) {
main.consumes = [
"Plugin", "tabManager"
];
main.provides = ["mergetool"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var tabManager = imports.tabManager;
var addConflictMarker = require("./diff/conflictmarker");
/***** Initialization *****/
var plugin = new Plugin("Ajax.org", main.consumes);
// var emit = plugin.getEmitter();
function load() {
tabManager.on("open", onNewValue, plugin);
tabManager.on("reload", onNewValue, plugin);
tabManager.on("switchEditor", onNewValue, plugin);
}
/***** Methods *****/
function onNewValue(e) {
var tab = e.tab;
var value = tab.document.recentValue;
if (!value || typeof value != "string") return;
if (hasMergeState(value))
decorateTab(tab);
}
function hasMergeState(value) {
return /^<{7} /gm.test(value)
&& /^={7}/gm.test(value)
&& /^>{7} /gm.test(value);
}
function decorateTab(tab) {
if (tab.editor.ace)
addConflictMarker(tab.editor.ace);
}
/***** Lifecycle *****/
plugin.on("load", function() {
load();
});
plugin.on("unload", function() {
});
/***** Register and define API *****/
/**
* This is an example of an implementation of a plugin. Check out [the source](source/template.html)
* for more information.
*
* @class Template
* @extends Plugin
* @singleton
*/
plugin.freezePublicAPI({
/**
*
*/
decorateTab: decorateTab
});
register(null, {
mergetool: plugin
});
}
});