$(function() { $('div[contenteditable]').on('input', function(event) { if (event.originalEvent.inputType == "insertParagraph") { var sel = document.getSelection(); var anchorNode = sel.anchorNode; var prev_p = sel.anchorNode.previousSibling; if (! prev_p) return; if (prev_p.tagName != 'P') { prev_p = $(prev_p).parents('p')[0]; } var title_match = prev_p.innerText.match(/^(h[1-6]). /); if (title_match) { var title = document.createElement(title_match[1]); title.innerHTML = prev_p.innerHTML; title.textContent = title.textContent.slice(4); prev_p.replaceWith(title); } } return true; }); $('div[contenteditable]').on('keyup', function(event) { var sel = document.getSelection(); if ((sel.anchorNode instanceof Element && ( (sel.anchorOffset == 0 && sel.isCollapsed) || // first line (sel.anchorNode.tagName === 'PRE'))) || (sel.anchorNode.parentNode.tagName === 'PRE')) { // start of line show_block_style_popup(); } else { hide_block_style_popup(); } return true; }); $('#save').on('click', function() { var text = $('div[contenteditable]')[0].innerHTML; var csrf = $('[name=csrfmiddlewaretoken]').val(); $.post('api-save/', { text: text, csrfmiddlewaretoken: csrf} ).fail(function() { $('#save').css('background', 'red'); }); return false; }); var block_style_popup = null; function block_style() { var action = $(this).data('action'); var class_name = null; if (action == 'code') { action = 'pre'; class_name = 'screen'; if ($(this).hasClass('on')) { // toggle off action = 'p'; class_name = null; } } document.execCommand('formatBlock', false, action); var sel = window.getSelection(); if (class_name) { $(sel.anchorNode).addClass(class_name); } var range = document.createRange(); range.setStart(sel.anchorNode, 0); sel.removeAllRanges(); sel.addRange(range); } function show_block_style_popup() { if (block_style_popup === null) { block_style_popup = $( '
', {text: window.getSelection().toString()})[0].outerHTML;
}
if (action == 'createLink') {
var sel = window.getSelection();
var $input = $('input[name=link-target]');
$input[0]._range = sel.getRangeAt(0);
if (sel.anchorNode instanceof Element) {
var elem = sel.anchorNode.childNodes[sel.anchorOffset];
if (elem.tagName == 'A') {
$input.val(elem.href);
}
}
$input.addClass('shown');
$input.focus();
return;
}
document.execCommand(action, false, param);
}
function validate_link(ev) {
var charCode = typeof ev.which == "number" ? ev.which : ev.keyCode;
if (ev.key == "Enter") {
var $input = $(this);
var range = this._range;
var url = $input.val();
$input.removeClass('shown');
var sel = window.getSelection();
sel.addRange(this._range);
if (url) {
document.execCommand('createLink', false, url);
} else {
document.execCommand('unlink', false, null);
}
sel.empty();
$input.val('');
}
}
function focusout_link(ev) {
var $input = $(this);
$input.removeClass('shown');
var range = this._range;
var sel = window.getSelection();
sel.addRange(this._range);
}
function show_style_popup(sel) {
if (style_popup === null) {
style_popup = $('