define(function(require, exports, module) { main.consumes = [ "Plugin", "layout", "app", "util", "tabManager", "ace", ]; main.provides = ["theme.jett"]; return main; /** * Client-side plugin for jett theme * @method main * @param {} options * @param {} imports * @param {} register * @return */ function main(options, imports, register) { var Plugin = imports.Plugin; var layout = imports.layout; var tabs = imports.tabManager; var ace = imports.ace; var services = imports.app.services; var escapeHTML = require("ace/lib/lang").escapeHTML; /***** Initialization *****/ var plugin = new Plugin("Ajax.org", main.consumes); var emit = plugin.getEmitter(); var themeEnabled = false; /** * Called when plugin is loaded * @method load * @return */ function load() { ace.addTheme({ caption: "Jett", id: "plugins/c9.ide.theme.jett/ace.themes/jett" }, plugin); layout.addTheme({ group: "flat", color: "rgb(41, 58, 86)", name: "jett-dark", caption: "Jett Dark", defaults: { output: { backgroundColor: "#2b303b", foregroundColor: "#767B85", selectionColor: "#343d46", }, } }); layout.on("themeChange", function(e) { if (e.theme == "jett-dark") enableJett(true); else if (themeEnabled) enableJett(false); }); layout.on("themeDefaults", function(e) { }); } /** * Toggle the jett theme on/off * @str an identifiable attribute * @method enableJett * @param {} enabled If true then jett theme is on * @return */ function enableJett(enabled) { // Update settings themeEnabled = enabled; // If the jett theme is enabled set some defaults and theme specific prefs if (enabled) { // Anytime the user switches tabs or themes make sure we have the correct tab colors ace.on("themeChange", styleTabs, plugin); tabs.on("focusSync", styleTabs, plugin); // Set file icon when the tabs are drawn tabs.on("tabCreate", onTabCreate, plugin); enableFileIcons(); } else { ace.off("themeChange", styleTabs, plugin); tabs.off("focusSync", styleTabs, plugin); tabs.off("tabCreate", onTabCreate, plugin); } styleTabs(); // Refresh file icons var tree = services.tree && services.tree.tree; tree && tree.resize(true); } function onTabCreate(e) { if (themeEnabled && e.tab.title && e.tab.path) { setTabIcon(e.tab); } } function enableFileIcons() { if (enableFileIcons.called) return; enableFileIcons.called = true; /** * Add file icons to the file search results */ var navigate = services.navigate; navigate && navigate.once("draw", function() { var dp = navigate.tree.provider; override(dp, 'renderRow', function(original) { return function(row, html, config) { // If jett is not enabled then return if (!themeEnabled) { return original.apply(this, arguments); } var path = dp.visibleItems[row]; var isSelected = dp.isSelected(row); var filename = path.substr(path.lastIndexOf("/") + 1); var icon = getIconClass(filename); html.push("