Caret/js/ace/ext-options.js
Thomas Wilburn 2e508a5012 First
2013-08-19 17:53:03 -07:00

252 lines
7.1 KiB
JavaScript

ace.define('ace/ext/options', ['require', 'exports', 'module' ], function(require, exports, module) {
var modesByName = modelist.modesByName;
var options = [
["Document", function(name) {
doclist.loadDoc(name, function(session) {
if (!session)
return;
session = env.split.setSession(session);
updateUIEditorOptions();
env.editor.focus();
});
}, doclist.all],
["Mode", function(value) {
env.editor.session.setMode(modesByName[value].mode || modesByName.text.mode);
env.editor.session.modeName = value;
}, function(value) {
return env.editor.session.modeName || "text"
}, modelist.modes],
["Split", function(value) {
var sp = env.split;
if (value == "none") {
if (sp.getSplits() == 2) {
env.secondSession = sp.getEditor(1).session;
}
sp.setSplits(1);
} else {
var newEditor = (sp.getSplits() == 1);
if (value == "below") {
sp.setOrientation(sp.BELOW);
} else {
sp.setOrientation(sp.BESIDE);
}
sp.setSplits(2);
if (newEditor) {
var session = env.secondSession || sp.getEditor(0).session;
var newSession = sp.setSession(session, 1);
newSession.name = session.name;
}
}
}, ["None", "Beside", "Below"]],
["Theme", function(value) {
if (!value)
return;
env.editor.setTheme("ace/theme/" + value);
themeEl.selectedValue = value;
}, function() {
return env.editor.getTheme();
}, {
"Bright": {
chrome: "Chrome",
clouds: "Clouds",
crimson_editor: "Crimson Editor",
dawn: "Dawn",
dreamweaver: "Dreamweaver",
eclipse: "Eclipse",
github: "GitHub",
solarized_light: "Solarized Light",
textmate: "TextMate",
tomorrow: "Tomorrow",
xcode: "XCode"
},
"Dark": {
ambiance: "Ambiance",
chaos: "Chaos",
clouds_midnight: "Clouds Midnight",
cobalt: "Cobalt",
idle_fingers: "idleFingers",
kr_theme: "krTheme",
merbivore: "Merbivore",
merbivore_soft: "Merbivore Soft",
mono_industrial: "Mono Industrial",
monokai: "Monokai",
pastel_on_dark: "Pastel on dark",
solarized_dark: "Solarized Dark",
twilight: "Twilight",
tomorrow_night: "Tomorrow Night",
tomorrow_night_blue: "Tomorrow Night Blue",
tomorrow_night_bright: "Tomorrow Night Bright",
tomorrow_night_eighties: "Tomorrow Night 80s",
vibrant_ink: "Vibrant Ink",
}
}],
["Code Folding", function(value) {
env.editor.getSession().setFoldStyle(value);
env.editor.setShowFoldWidgets(value !== "manual");
}, ["manual", "mark begin", "mark begin and end"]],
["Soft Wrap", function(value) {
value = value.toLowerCase()
var session = env.editor.getSession();
var renderer = env.editor.renderer;
session.setUseWrapMode(value == "off");
var col = parseInt(value) || null;
renderer.setPrintMarginColumn(col || 80);
session.setWrapLimitRange(col, col);
}, ["Off", "40 Chars", "80 Chars", "Free"]],
["Key Binding", function(value) {
env.editor.setKeyboardHandler(keybindings[value]);
}, ["Ace", "Vim", "Emacs", "Custom"]],
["Font Size", function(value) {
env.split.setFontSize(value + "px");
}, [10, 11, 12, 14, 16, 20, 24]],
["Full Line Selection", function(checked) {
env.editor.setSelectionStyle(checked ? "line" : "text");
}],
["Highlight Active Line", function(checked) {
env.editor.setHighlightActiveLine(checked);
}],
["Show Invisibles", function(checked) {
env.editor.setShowInvisibles(checked);
}],
["Show Gutter", function(checked) {
env.editor.renderer.setShowGutter(checked);
}],
["Show Indent Guides", function(checked) {
env.editor.renderer.setDisplayIndentGuides(checked);
}],
["Show Print Margin", function(checked) {
env.editor.renderer.setShowPrintMargin(checked);
}],
["Persistent HScroll", function(checked) {
env.editor.renderer.setHScrollBarAlwaysVisible(checked);
}],
["Animate Scrolling", function(checked) {
env.editor.setAnimatedScroll(checked);
}],
["Use Soft Tab", function(checked) {
env.editor.getSession().setUseSoftTabs(checked);
}],
["Highlight Selected Word", function(checked) {
env.editor.setHighlightSelectedWord(checked);
}],
["Enable Behaviours", function(checked) {
env.editor.setBehavioursEnabled(checked);
}],
["Fade Fold Widgets", function(checked) {
env.editor.setFadeFoldWidgets(checked);
}],
["Show Token info", function(checked) {
env.editor.setFadeFoldWidgets(checked);
}]
]
var createOptionsPanel = function(options) {
var html = []
var container = document.createElement("div");
container.style.cssText = "position: absolute; overflow: hidden";
var inner = document.createElement("div");
inner.style.cssText = "width: 120%;height:100%;overflow: scroll";
container.appendChild(inner);
html.push("<table><tbody>");
options.forEach(function(o) {
});
html.push(
'<tr>',
'<td>',
'<label for="', s,'"></label>',
'</td><td>',
'<input type="', s,'" name="', s,'" id="',s ,'">',
'</td>',
'</tr>'
)
html.push("</tbody></table>");
return container;
}
function bindCheckbox(id, callback) {
var el = document.getElementById(id);
if (localStorage && localStorage.getItem(id))
el.checked = localStorage.getItem(id) == "1";
var onCheck = function() {
callback(!!el.checked);
saveOption(el);
};
el.onclick = onCheck;
onCheck();
}
function bindDropdown(id, callback) {
var el = document.getElementById(id);
if (localStorage && localStorage.getItem(id))
el.value = localStorage.getItem(id);
var onChange = function() {
callback(el.value);
saveOption(el);
};
el.onchange = onChange;
onChange();
}
function fillOptgroup(list, el) {
list.forEach(function(item) {
var option = document.createElement("option");
option.setAttribute("value", item.name);
option.innerHTML = item.desc;
el.appendChild(option);
});
}
function fillDropdown(list, el) {
if (Array.isArray(list)) {
fillOptgroup(list, el);
return;
}
for(var i in list) {
var group = document.createElement("optgroup");
group.setAttribute("label", i);
fillOptgroup(list[i], group);
el.appendChild(group);
}
}
function createOptionControl(opt) {
if (opt.values) {
var el = dom.createElement("select");
el.setAttribute("size", opt.visibleSize || 1);
fillDropdown(opt.values, el)
} else {
var el = dom.createElement("checkbox");
}
el.setAttribute("name", "opt_" + opt.name)
return el;
}
function createOptionCell(opt) {
if (opt.values) {
var el = dom.createElement("select");
el.setAttribute("size", opt.visibleSize || 1);
fillDropdown(opt.values, el)
} else {
var el = dom.createElement("checkbox");
}
el.setAttribute("name", "opt_" + opt.name)
return el;
}
createOptionsPanel(options)
});