view wiki.js @ 9:20ed90d10dee

Replaced use of closure variables w/ use of 'this'.
author Atul Varma <varmaa@toolness.com>
date Sun, 01 Feb 2009 15:26:55 -0800
parents a199d2ca2d06
children ec3ec75a8d16
line wrap: on
line source

var App = {
  eventHandlers: {}
};

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

  aEvt.preventDefault();

  App.enterEditMode(this);
};

App.enterEditMode = function enterEditMode(part) {
  var editablePart = $('<textarea class="wiki-edit"></textarea>').get(0);
  $(editablePart).attr("value", $(".creole-markup", part).text());

  function setScrollHeight() {
    $(this).height(this.scrollHeight);
  }

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

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

  $(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.get(0);
};

App.createParts = function createParts(text) {
  var parts = [];

  var partsMarkup = text.split("\n\n");
  jQuery.each(
    partsMarkup,
    function(i) {
      var partMarkup = this.toString();
      if (partMarkup)
        parts.push(App.createPart(partMarkup));
    }
  );

  return parts;
};

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",
             {},
             function(text) {
               $("#content").append(App.createParts(text));
             },
             "text");
};

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