$('#contentField').on('keyup', function (e) { var range = window.getSelection().getRangeAt(0); var end_node = range.endContainer; var end = range.endOffset; if (end_node !== this) { const text_nodes = get_text_nodes_in(this); for (let i = 0; i < text_nodes.length; ++i) { if (text_nodes[i] === end_node) { break; } end += text_nodes[i].length; } } let html = $(this).html(); if (/\ $/.test(html) && $(this).text().length === end) { end--; set_range(end, end, this); return; } let filter = html.replace(//g, "") .replace(//g, "") .replace(/<\/span>/g, "") .replace(/@[A-Za-z0-9._]+/g, function (match) { return `${match}`; }) .replace(/#[A-Za-z0-9._]+/g, function (match) { return `${match}`; }); console.log(html); if (!/ $/.test($(this).html())) { filter += ' '; } $(this).html(filter); set_range(end, end, this); }); $('#contentField').on('mouseup', function (e) { if (!/\ $/.test($(this).html())) { return; } var range = window.getSelection().getRangeAt(0); var end = range.endOffset; var end_node = range.endContainer; if (end_node != this) { var text_nodes = get_text_nodes_in(this); for (var i = 0; i < text_nodes.length; ++i) { if (text_nodes[i] == end_node) { break; } end += text_nodes[i].length; } } if ($(this).text().length == end) { end = end - 1; set_range(end, end, this); } }); function get_text_nodes_in(node) { var text_nodes = []; if (node.nodeType === 3) { text_nodes.push(node); } else { var children = node.childNodes; for (var i = 0, len = children.length; i < len; ++i) { var text_node; text_nodes.push.apply(text_nodes, get_text_nodes_in(children[i])); } } return text_nodes; } function set_range(start, end, element) { var range = document.createRange(); range.selectNodeContents(element); var text_nodes = get_text_nodes_in(element); var foundStart = false; var char_count = 0, end_char_count; for (var i = 0, text_node; text_node = text_nodes[i++];) { end_char_count = char_count + text_node.length; if (!foundStart && start >= char_count && (start < end_char_count || (start === end_char_count && i < text_nodes.length))) { range.setStart(text_node, start - char_count); foundStart = true; } if (foundStart && end <= end_char_count) { range.setEnd(text_node, end - char_count); break; } char_count = end_char_count; } var selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(range); } $.fn.selectRange = function (start, end) { var e = document.getElementById($(this).attr('id')); if (!e) return; else if (e.setSelectionRange) { e.focus(); e.setSelectionRange(start, end); } /* WebKit */ else if (e.createTextRange) { var range = e.createTextRange(); range.collapse(true); range.moveEnd('character', end); range.moveStart('character', start); range.select(); } /* IE */ else if (e.selectionStart) { e.selectionStart = start; e.selectionEnd = end; } }; let postMedia = {}; function publishPost() { let isFilled = true; let content = $('#contentField').text(); console.log(content); if (content === "") { $('#postModal #content').addClass('has-error'); isFilled = false; } else { $('#postModal #content').addClass('has-success'); } if (isFilled) { const replyTo = $('#postModal #replyTo').val(); submitPost(content, replyTo); } } $('#postFiles').on('change', function() { console.log(this.files); const match = ['image/jpeg', 'image/jpg', 'image/png']; const mediaCount = Object.keys(postMedia).length; if(mediaCount < 4) { for (let i = 0; i < this.files.length && i < 4 - mediaCount; i++) { const file = this.files[i]; if (match.indexOf(file.type) === -1) continue; const reader = new FileReader(); reader.addEventListener('load', () => { $('.post-images').append(`
`); postMedia[mediaCount + i] = { image: reader.result, type: file.type, size: file.size, name: file.name }; }); reader.readAsDataURL(file); } } if(Object.keys(postMedia).length >= 4) { $('.postImageUpload').hide(); } }); $('#postModal').on('hidden.bs.modal', () => { $('#postModal #replyTo').val(-1); }); function submitPost(content, replyTo) { if(postMedia.length > 4) { return; } $.ajax({ url: "/user/publishPost", method: 'POST', data: { content, replyTo, postMedia }, beforeSend: function () { $('#postModalBody').empty().append(""); $('#postModalPublish').button('loading'); }, success: function (data) { $('#postModalBody').empty().append(data); }, error: function (data) { console.log(data); } }); }