Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
el-ace / assets / api.js
Size: Mime:
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);
}