This way showing the warning is consistent with warning users when they're leaving the page.
64 lines
2.1 KiB
JavaScript
64 lines
2.1 KiB
JavaScript
(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);
|