app/assets/javascripts/markdown_editor.js
(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);