view wiki.js @ 5:06e8c49e9dec

Wikicreole markup is now editable. Also refactored things a bit so that variables have better names, DRY is preserved better.
author Atul Varma <varmaa@toolness.com>
date Sun, 01 Feb 2009 13:33:26 -0800
parents 01313b55ed09
children fb233578283c
line wrap: on
line source

var App = {
  eventHandlers: {}
};

App.eventHandlers.editPart = function editPart(aEvt) {
  if (!aEvt.shiftKey)
    return;

  aEvt.preventDefault();

  var part = this;
  var editablePart = $('<textarea class="wiki-edit"></textarea>');
  $(editablePart).attr("value", $(".creole-markup", part).text());

  function setScrollHeight() {
    var scrollHeight = $(editablePart).get(0).scrollHeight;
    $(editablePart).height(scrollHeight);
  }

  $(editablePart).blur(
    function() {
      var markup = $(editablePart).attr("value");
      $(editablePart).replaceWith(App.createPart(markup));
    });

  $(editablePart).keyup(setScrollHeight);
  $(part).replaceWith(editablePart);
  setScrollHeight();

  $(editablePart).focus();
};

App.createPart = function createPart(markup) {
  var partDiv = $('<div class="part"></div>');
  var markupDiv = $('<div class="creole-markup"></div>');
  markupDiv.text(markup);
  App.creole.parse(partDiv.get(0), markup);
  partDiv.mousedown(App.eventHandlers.editPart);
  partDiv.append(markupDiv);
  return partDiv;
};

App.processMarkup = function processMarkup(text) {
  var parts = text.split("\n\n");
  jQuery.each(
    parts,
    function(i) {
      var partMarkup = this.toString();
      $("#content").append(App.createPart(partMarkup));
    }
  );
};

App.eventHandlers.onLoad = function onLoad() {
  var creole = new Parse.Simple.Creole(
    {interwiki: {
       WikiCreole: 'http://www.wikicreole.org/wiki/',
       Wikipedia: 'http://en.wikipedia.org/wiki/'
     },
     linkFormat: ''
    });

  App.creole = creole;

  jQuery.get("wiki.txt",
             {},
             App.processMarkup,
             "text");
};

$(window).ready(App.eventHandlers.onLoad);