Blame Identity/Models/Html/Trac/htdocs/js/wikitoolbar.js

d6e8d8
function addWikiFormattingToolbar(textarea) {
d6e8d8
  if ((typeof(document["selection"]) == "undefined")
d6e8d8
   && (typeof(textarea["setSelectionRange"]) == "undefined")) {
d6e8d8
    return;
d6e8d8
  }
d6e8d8
  
d6e8d8
  var toolbar = document.createElement("div");
d6e8d8
  toolbar.className = "wikitoolbar";
d6e8d8
d6e8d8
  function addButton(id, title, fn) {
d6e8d8
    var a = document.createElement("a");
d6e8d8
    a.href = "#";
d6e8d8
    a.id = id;
d6e8d8
    a.title = title;
d6e8d8
    a.onclick = function() { try { fn() } catch (e) { } return false };
d6e8d8
    a.tabIndex = 400;
d6e8d8
    toolbar.appendChild(a);
d6e8d8
  }
d6e8d8
d6e8d8
  function encloseSelection(prefix, suffix) {
d6e8d8
    textarea.focus();
d6e8d8
    var start, end, sel, scrollPos, subst;
d6e8d8
    if (typeof(document["selection"]) != "undefined") {
d6e8d8
      sel = document.selection.createRange().text;
d6e8d8
    } else if (typeof(textarea["setSelectionRange"]) != "undefined") {
d6e8d8
      start = textarea.selectionStart;
d6e8d8
      end = textarea.selectionEnd;
d6e8d8
      scrollPos = textarea.scrollTop;
d6e8d8
      sel = textarea.value.substring(start, end);
d6e8d8
    }
d6e8d8
    if (sel.match(/ $/)) { // exclude ending space char, if any
d6e8d8
      sel = sel.substring(0, sel.length - 1);
d6e8d8
      suffix = suffix + " ";
d6e8d8
    }
d6e8d8
    subst = prefix + sel + suffix;
d6e8d8
    if (typeof(document["selection"]) != "undefined") {
d6e8d8
      var range = document.selection.createRange().text = subst;
d6e8d8
      textarea.caretPos -= suffix.length;
d6e8d8
    } else if (typeof(textarea["setSelectionRange"]) != "undefined") {
d6e8d8
      textarea.value = textarea.value.substring(0, start) + subst +
d6e8d8
                       textarea.value.substring(end);
d6e8d8
      if (sel) {
d6e8d8
        textarea.setSelectionRange(start + subst.length, start + subst.length);
d6e8d8
      } else {
d6e8d8
        textarea.setSelectionRange(start + prefix.length, start + prefix.length);
d6e8d8
      }
d6e8d8
      textarea.scrollTop = scrollPos;
d6e8d8
    }
d6e8d8
  }
d6e8d8
d6e8d8
  addButton("strong", "Bold text: '''Example'''", function() {
d6e8d8
    encloseSelection("'''", "'''");
d6e8d8
  });
d6e8d8
  addButton("em", "Italic text: ''Example''", function() {
d6e8d8
    encloseSelection("''", "''");
d6e8d8
  });
d6e8d8
  addButton("heading", "Heading: == Example ==", function() {
d6e8d8
    encloseSelection("\n== ", " ==\n", "Heading");
d6e8d8
  });
d6e8d8
  addButton("link", "Link: [http://www.example.com/ Example]", function() {
d6e8d8
    encloseSelection("[", "]");
d6e8d8
  });
d6e8d8
  addButton("code", "Code block: {{{ example }}}", function() {
d6e8d8
    encloseSelection("\n{{{\n", "\n}}}\n");
d6e8d8
  });
d6e8d8
  addButton("hr", "Horizontal rule: ----", function() {
d6e8d8
    encloseSelection("\n----\n", "");
d6e8d8
  });
d6e8d8
  addButton("np", "New paragraph", function() {
d6e8d8
    encloseSelection("\n\n", "");
d6e8d8
  });
d6e8d8
  addButton("br", "Line break: [[BR]]", function() {
d6e8d8
    encloseSelection("[[BR]]\n", "");
d6e8d8
  });
d6e8d8
d6e8d8
  textarea.parentNode.insertBefore(toolbar, textarea);
d6e8d8
}
d6e8d8
d6e8d8
// Add the toolbar to all <textarea> elements on the page with the class
d6e8d8
// 'wikitext'.
d6e8d8
var re = /\bwikitext\b/;
d6e8d8
var textareas = document.getElementsByTagName("textarea");
d6e8d8
for (var i = 0; i < textareas.length; i++) {
d6e8d8
  var textarea = textareas[i];
d6e8d8
  if (textarea.className && re.test(textarea.className)) {
d6e8d8
    addWikiFormattingToolbar(textarea);
d6e8d8
  }
d6e8d8
}