consul/consul

View on GitHub
app/assets/javascripts/markdown_editor.js

Summary

Maintainability
A
1 hr
Test Coverage
(function() {
  "use strict";
  App.MarkdownEditor = {
    refresh_preview: function(element, md) {
      var result, textarea_content;
      textarea_content = App.MarkdownEditor.find_textarea(element).val();
      result = md.render(textarea_content);
      element.find(".markdown-preview").html(result);
    },
    // Multi-locale (translatable) form fields work by hiding inputs of locales
    // which are not "active".
    find_textarea: function(editor) {
      return editor.find("textarea");
    },
    initialize: function() {
      $(".markdown-editor").each(function() {
        var editor, md;
        md = window.markdownit({
          html: true,
          breaks: true,
          typographer: true
        });
        editor = $(this);
        editor.on("input", function() {
          var textarea, warning;

          textarea = editor.find("textarea")[0];
          warning = $(this).closest(".translatable-fields").find(".warning");

          App.MarkdownEditor.refresh_preview($(this), md);

          if (textarea.value === textarea.defaultValue) {
            warning.hide();
          } else {
            warning.show();
          }
        });
        editor.find("textarea").on("scroll", function() {
          editor.find(".markdown-preview").scrollTop($(this).scrollTop());
        });
        editor.find(".fullscreen-toggle").on("click", function(e) {
          var span;
          e.preventDefault();
          e.stopPropagation();
          editor.toggleClass("fullscreen");
          $(".fullscreen-container").toggleClass("medium-8", "medium-12");
          span = $(this).find("span");
          if (span.text() === span.data("open-text")) {
            span.text(span.data("closed-text"));
          } else {
            span.text(span.data("open-text"));
          }
          if (editor.hasClass("fullscreen")) {
            App.MarkdownEditor.find_textarea(editor).height($(window).height() - 100);
            App.MarkdownEditor.refresh_preview(editor, md);
          } else {
            App.MarkdownEditor.find_textarea(editor).height("10em");
          }
        });
      });
    }
  };
}).call(this);