handleClick: function()

in kitsune/sumo/static/sumo/js/markup.js [169:243]


  handleClick: function(e) {
    var selText, selStart, selEnd, splitText, range,
      textarea = this.textarea,
      scrollTop = $(textarea).scrollTop(),
      editor = window.highlighting && window.highlighting.editor;

    if (window.codemirror && window.highlighting && window.highlighting.isEnabled()) {
      selText = (editor.somethingSelected()) ? editor.getSelection() : this.defaultText;
      selText = this.openTag + selText + this.closeTag;
      editor.replaceSelection(selText);
      editor.focus();
      e.preventDefault();
      return false;
    }

    textarea.focus();

    if (document.selection && document.selection.createRange) {
      // IE/Opera
      range = document.selection.createRange();
      selText = range.text;
      if (!selText.length) {
        selText = this.defaultText;
      }

      if (this.everyline && -~selText.indexOf('\n')) {
        splitText = this._applyEveryLine(this.openTag, this.closeTag,
          selText);
        range.text = splitText.join('\n');
      } else {
        range.text = this.openTag + selText + this.closeTag;

        if (range.moveStart) {
          range.moveStart('character', (-1 * this.openTag.length) -
            selText.length);
          range.moveEnd('character', (-1 * this.closeTag.length));
        }
      }

      range.select();
    } else if (textarea.selectionStart || parseInt(textarea.selectionStart) === 0) {
      // Firefox/Safari/Chrome/etc.
      selStart = textarea.selectionStart;
      selEnd = textarea.selectionEnd;
      selText = textarea.value.substring(selStart, selEnd);
      if (!selText.length) {
        selText = this.defaultText;
      }

      if (this.everyline && -~selText.indexOf('\n')) {
        splitText = this._applyEveryLine(this.openTag, this.closeTag,
          selText).join('\n');
        textarea.value =
          textarea.value.substring(0, textarea.selectionStart) +
          splitText +
          textarea.value.substring(textarea.selectionEnd);

        textarea.selectionStart = selStart;
        textarea.selectionEnd = textarea.selectionStart +
          splitText.length;
      } else {
        textarea.value =
          textarea.value.substring(0, textarea.selectionStart) +
          this.openTag + selText + this.closeTag +
          textarea.value.substring(textarea.selectionEnd);

        textarea.selectionStart = selStart + this.openTag.length;
        textarea.selectionEnd = textarea.selectionStart +
          selText.length;
      }
    }
    $(textarea).scrollTop(scrollTop);
    e.preventDefault();
    return false;
  },