Move rich text support code into a separate file
authorTom Hughes <tom@compton.nu>
Thu, 6 Sep 2012 19:44:24 +0000 (20:44 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 6 Sep 2012 19:44:24 +0000 (20:44 +0100)
app/assets/javascripts/application.js
app/assets/javascripts/richtext.js [new file with mode: 0644]

index 0f0b2fa..a475aad 100644 (file)
@@ -13,6 +13,7 @@
 //= require key
 //= require menu
 //= require sidebar
+//= require richtext
 
 function zoomPrecision(zoom) {
     var decimals = Math.pow(10, Math.floor(zoom/3));
@@ -201,67 +202,6 @@ function makeShortCode(lat, lon, zoom) {
     return str;
 }
 
-/*
- * Click handler to switch a rich text control to preview mode
- */
-function previewRichtext(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();
-}
-
-/*
- * Click handler to switch a rich text control to edit mode
- */
-function editRichtext(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();
-}
-
-/*
- * Setup any rich text controls
- */
-$(document).ready(function () {
-  $(".richtext_preview").hide();
-  $(".richtext_content textarea").change(function () { 
-    $(this).parents(".richtext_container").find(".richtext_preview").empty();
-  });
-  $(".richtext_doedit").prop("disabled", true);
-  $(".richtext_dopreview").prop("disabled", false);
-  $(".richtext_doedit").click(editRichtext);
-  $(".richtext_dopreview").click(previewRichtext);
-});
-
 /*
  * Forms which have been cached by rails may have he wrong
  * authenticity token, so patch up any forms with the correct
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();
+  });
+});