Repository URL to install this package:
|
Version:
0.9.0 ▾
|
ELAceAPI = function(editorID, textareaSelector) {
this.initialize = function(opts) {
$(textareaSelector).hide();
if (opts.readonly)
getEditor().setReadOnly(true);
if (
mode = localStorage['ELAceEditor-mode-' + editorID] ||
$('#ELAceEditor-modeSwitcher-' + editorID).val() ||
localStorage['ELAceEditor-mode']
) {
$('#ELAceEditor-modeSwitcher-' + editorID).val(mode);
}
if(theme = localStorage['ELAceEditor-theme-' + editorID] || localStorage['ELAceEditor-theme']) {
$('#ELAceEditor-themeSwitcher-' + editorID).val(theme);
}
if(localStorage['ELAceEditor-wrapMode'] == 'true')
$('#ELAceEditor-wrapModeSwitcher-' + editorID).prop('checked', true);
if(localStorage['ELAceEditor-softTabs'] == 'true')
$('#ELAceEditor-softTabsSwitcher-' + editorID).prop('checked', true);
$('.ELAceEditor-global_mode, .ELAceEditor-global_theme').each(function(i,e) {
if($(e).tooltip == undefined) return false;
$(e).tooltip({container: 'body', placement: 'bottom'});
})
$(opts.save_button || '.saveButton').hover(function() {
$(textareaSelector).val(getEditor().getValue());
});
this.setContent();
this.setMode();
this.setTheme();
this.setWrapMode();
this.setFontSize();
this.setTabSize();
this.setSoftTabs();
}
this.setContent = function() {
getEditor().setValue($(textareaSelector).val());
}
this.setMode = function(permanent) {
var mode = $('#ELAceEditor-modeSwitcher-' + editorID).val();
if(mode && mode.length > 0) {
apply('mode', editorID, mode);
if(permanent) persist('mode', mode);
}
}
this.setTheme = function(permanent) {
var theme = $('#ELAceEditor-themeSwitcher-' + editorID).val();
if(theme && theme.length > 0) {
apply('theme', editorID, theme);
if(permanent) persist('theme', theme);
}
}
this.setWrapMode = function(permanent) {
var controlElement = $('#ELAceEditor-wrapModeSwitcher-' + editorID);
var status = controlElement.prop('checked');
getEditorSession().setUseWrapMode(status);
if (permanent) localStorage['ELAceEditor-wrapMode'] = status;
}
this.setSoftTabs = function(permanent) {
var controlElement = $('#ELAceEditor-softTabsSwitcher-' + editorID);
var status = controlElement.prop('checked');
getEditorSession().setUseSoftTabs(status);
if (permanent) localStorage['ELAceEditor-softTabs'] = status;
}
this.setFontSize = function(optedElement) {
$('.ELAceEditor-fontSize').each(function(i,e) {
if ( e == optedElement || (!optedElement && localStorage['ELAceEditor-fontSize'] == $(e).val() ) ) {
document.getElementById(editorID).style.fontSize = $(e).val() + 'px';
localStorage['ELAceEditor-fontSize'] = $(e).val();
if (!optedElement) $(e).prop('checked', true);
} else $(e).prop('checked', false);
});
}
this.setTabSize = function(optedElement) {
$('.ELAceEditor-tabSize').each(function(i,e) {
if ( e == optedElement || (!optedElement && localStorage['ELAceEditor-tabSize'] == $(e).val() ) ) {
getEditorSession().setTabSize($(e).val());
localStorage['ELAceEditor-tabSize'] = $(e).val();
if (!optedElement) $(e).prop('checked', true);
} else $(e).prop('checked', false);
});
}
this.insertSnippet = function(element) {
var e = $(element);
getEditor().insert(e.val());
e.val(null);
}
var persist = function(key, val) {
var prefix = 'ELAceEditor-',
suffix = '-' + editorID,
global,
storageKey;
$('.ELAceEditor-global_' + key).each(function(i,e){
if($(e).prop('checked'))
global = true;
});
localStorage.removeItem(prefix + key + suffix);
if(global) {
suffix = '';
localStorage.removeItem(prefix + key);
for (var i=0; i < localStorage.length; i++) {
storageKey = localStorage.key(i);
if(storageKey.match(new RegExp('^' + prefix + key)))
localStorage.removeItem(storageKey);
}
$('.ELAceEditor').each(function(i,e) {
if(id = $(e).attr('id')) {
if(id == editorID) return true;
apply(key, id, val);
}
});
}
localStorage[prefix + key + suffix] = val;
}
this.loadScript = function(url, checkLoaded, callback) {
if (checkLoaded && checkLoaded())
return callback && callback();
var script = document.createElement("script");
script.type = "text/javascript";
script.async = true;
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback && callback();
}
}
} else {
script.onload = function() {
callback && callback();
}
}
script.src = url;
document.head.appendChild(script);
}
this.loadStylesheet = function(url, checkForClasses) {
if (checkForClasses) {
if (typeof checkForClasses == "string")
checkForClasses = checkForClasses.split(/\s+/g);
var hasClass = false, styleSheets = document.styleSheets;
for (var x = 0; x < styleSheets.length; x++) {
var sheetClasses = styleSheets[x].rules || document.styleSheets[x].cssRules;
for (var y = 0; y < sheetClasses.length; y++) {
if ( checkForClasses.indexOf(sheetClasses[y].selectorText) > -1 ) {
hasClass = true; break;
}
}
}
if (hasClass) return true;
}
var link = document.createElement("link");
link.media = "all";
link.type = "text/css"
link.rel = "stylesheet"
link.async = true;
link.href = url;
document.head.appendChild(link);
}
var apply = function(what, optedID, val) {
switch(what) {
case 'mode':
getEditorSession(optedID).setMode('ace/mode/' + val);
break;
case 'theme':
getEditor(optedID).setTheme('ace/theme/' + val);
break;
}
}
var getEditor = function(optedID) {
return optedID ? ace.edit(optedID) : editor;
}
var getEditorSession = function(optedID) {
return optedID ? getEditor(optedID).getSession() : editorSession;
}
var editor = getEditor(editorID);
var editorSession = getEditorSession(editorID);
}