]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/richtext.js
Move rich text support code into a separate file
[rails.git] / app / assets / javascripts / richtext.js
diff --git a/app/assets/javascripts/richtext.js b/app/assets/javascripts/richtext.js
new file mode 100644 (file)
index 0000000..474c080
--- /dev/null
@@ -0,0 +1,68 @@
+$(document).ready(function () {
+  /* Hide the preview panes */
+  $(".richtext_preview").hide();
+
+  /* 
+   * When the text in an edit pane is changed, clear the contents of
+   * the associated preview pne so that it will be regenerated when
+   * the user next switches to it.
+   */
+  $(".richtext_content textarea").change(function () { 
+    $(this).parents(".richtext_container").find(".richtext_preview").empty();
+  });
+
+  /* Disable all the edit buttons */
+  $(".richtext_doedit").prop("disabled", true);
+
+  /* Enable the preview buttons */
+  $(".richtext_dopreview").prop("disabled", false);
+
+  /*
+   * Install a click handler to switch to edit mode when the
+   * edit button is pressed.
+   */
+  $(".richtext_doedit").click(function (event) {
+    var editor = $(this).parents(".richtext_container").find("textarea");
+    var preview = $(this).parents(".richtext_container").find(".richtext_preview");
+
+    preview.hide();
+    editor.show();
+
+    $(this).siblings(".richtext_dopreview").prop("disabled", false);
+    $(this).prop("disabled", true);
+
+    event.preventDefault();
+  });
+
+  /*
+   * Install a click handler to switch to preview mode when the
+   * preview button is pressed.
+   */
+  $(".richtext_dopreview").click(function (event) {
+    var editor = $(this).parents(".richtext_container").find("textarea");
+    var preview = $(this).parents(".richtext_container").find(".richtext_preview");
+    var width = editor.outerWidth() - preview.outerWidth() + preview.innerWidth();
+    var minHeight = editor.outerHeight() - preview.outerHeight() + preview.innerHeight();
+
+    if (preview.contents().length == 0) {
+      preview.oneTime(500, "loading", function () {
+        preview.addClass("loading");
+      });
+
+      preview.load(editor.attr("data-preview-url"), { text: editor.val() }, function () {
+        preview.stopTime("loading");
+        preview.removeClass("loading");
+      });
+    }
+
+    editor.hide();
+    preview.width(width);
+    preview.css("min-height", minHeight + "px");
+    preview.show();
+
+    $(this).siblings(".richtext_doedit").prop("disabled", false);
+    $(this).prop("disabled", true);
+
+    event.preventDefault();
+  });
+});