88 lines
No EOL
2.1 KiB
JavaScript
88 lines
No EOL
2.1 KiB
JavaScript
define([
|
|
"sessions/state",
|
|
"editor",
|
|
"command"
|
|
], function(state, editor, command) {
|
|
|
|
/*
|
|
Various functions for swapping between tags, either from clicks or keyboard.
|
|
*/
|
|
|
|
var stackOffset = 0;
|
|
|
|
var raiseTab = function(tab) {
|
|
editor.setSession(tab);
|
|
command.fire("session:syntax");
|
|
command.fire("session:render");
|
|
editor.focus();
|
|
command.fire("session:check-file");
|
|
};
|
|
|
|
var raiseBlurred = function(tab) {
|
|
editor.setSession(tab);
|
|
command.fire("session:syntax", tab.syntaxMode || "plain_text");
|
|
command.fire("session:render");
|
|
command.fire("session:check-file");
|
|
};
|
|
|
|
var resetStack = function(tab) {
|
|
var raised = tab || state.stack[stackOffset];
|
|
state.stack = state.stack.filter(function(t) { return t != raised });
|
|
state.stack.unshift(raised);
|
|
}
|
|
|
|
var watchCtrl = function(e) {
|
|
if (e.keyCode == 17) {
|
|
resetStack();
|
|
document.body.off("keyup", watchCtrl);
|
|
ctrl = false;
|
|
}
|
|
};
|
|
|
|
var ctrl = false;
|
|
|
|
// most-recent order
|
|
var switchTab = function(arg, c) {
|
|
arg = arg || 1;
|
|
if (!ctrl) {
|
|
ctrl = true;
|
|
stackOffset = 0;
|
|
document.body.on("keyup", watchCtrl);
|
|
}
|
|
stackOffset = (stackOffset + arg) % state.stack.length;
|
|
if (stackOffset < 0) stackOffset = state.stack.length + stackOffset;
|
|
raiseTab(state.stack[stackOffset]);
|
|
if (c) c();
|
|
};
|
|
|
|
//left-to-right order
|
|
var switchTabLinear = function(shift, c) {
|
|
shift = shift || 1;
|
|
var current = editor.getSession();
|
|
var currentIndex = state.tabs.indexOf(current);
|
|
var shifted = (currentIndex + shift) % state.tabs.length;
|
|
if (shifted < 0) {
|
|
shifted = state.tabs.length + shifted;
|
|
}
|
|
var tab = state.tabs[shifted];
|
|
raiseTab(tab);
|
|
resetStack(tab);
|
|
if (c) c();
|
|
};
|
|
|
|
command.on("session:raise-tab", function(index) {
|
|
var tab = state.tabs[index];
|
|
raiseTab(tab);
|
|
resetStack(tab);
|
|
});
|
|
command.on("session:change-tab", switchTab);
|
|
command.on("session:change-tab-linear", switchTabLinear);
|
|
|
|
return {
|
|
raise: raiseTab,
|
|
raiseBlurred: raiseBlurred,
|
|
switchTab: switchTab,
|
|
switchLinear: switchTabLinear
|
|
};
|
|
|
|
}); |