thread.js
167 lines
| 4.8 KiB
| application/javascript
|
JavascriptLexer
|
r332 | /* | ||
@licstart The following is the entire license notice for the | ||||
JavaScript code in this page. | ||||
Copyright (C) 2013 neko259 | ||||
The JavaScript code in this page is free software: you can | ||||
redistribute it and/or modify it under the terms of the GNU | ||||
General Public License (GNU GPL) as published by the Free Software | ||||
Foundation, either version 3 of the License, or (at your option) | ||||
any later version. The code is distributed WITHOUT ANY WARRANTY; | ||||
without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. | ||||
As additional permission under GNU GPL version 3 section 7, you | ||||
may distribute non-source (e.g., minimized or compacted) forms of | ||||
that code without the copy of the GNU GPL normally required by | ||||
section 4, provided you include this license notice and a URL | ||||
through which recipients can access the Corresponding Source. | ||||
@licend The above is the entire license notice | ||||
for the JavaScript code in this page. | ||||
*/ | ||||
|
r1289 | var REPLY_TO_MSG = '.reply-to-message'; | ||
var REPLY_TO_MSG_ID = '#reply-to-message-id'; | ||||
|
r970 | var $html = $("html, body"); | ||
|
r106 | function moveCaretToEnd(el) { | ||
|
r1783 | var newPos = el.val().length; | ||
el[0].setSelectionRange(newPos, newPos); | ||||
|
r106 | } | ||
|
r1056 | function getForm() { | ||
return $('.post-form-w'); | ||||
} | ||||
|
r1880 | /** | ||
* Clear all entered values in the form fields | ||||
*/ | ||||
function resetForm() { | ||||
|
r1056 | var form = getForm(); | ||
|
r1880 | |||
|
r1916 | form.find('input:text, input:password, input:file, textarea').val(''); | ||
|
r1880 | form.find('input:radio, input:checkbox').removeAttr('checked').removeAttr('selected'); | ||
|
r1985 | pastedImages = []; | ||
$('#pasted-images').remove(); | ||||
|
r1880 | $('.file_wrap').find('.file-thumb').remove(); | ||
$('#preview-text').hide(); | ||||
resetFormPosition(form); | ||||
} | ||||
function resetFormPosition(form) { | ||||
|
r1056 | form.insertAfter($('.thread')); | ||
|
r1108 | |||
|
r1289 | $(REPLY_TO_MSG).hide(); | ||
|
r1108 | } | ||
function showFormAfter(blockToInsertAfter) { | ||||
var form = getForm(); | ||||
form.insertAfter(blockToInsertAfter); | ||||
form.show(); | ||||
|
r1289 | $(REPLY_TO_MSG_ID).text(blockToInsertAfter.attr('id')); | ||
$(REPLY_TO_MSG).show(); | ||||
|
r1056 | } | ||
|
r97 | function addQuickReply(postId) { | ||
|
r1830 | var blockToInsert = null; | ||
var textAreaJq = getPostTextarea(); | ||||
var postLinkRaw = '[post]' + postId + '[/post]' | ||||
var textToAdd = ''; | ||||
|
r1084 | |||
|
r1830 | if (postId != null) { | ||
var post = $('#' + postId); | ||||
|
r1056 | |||
|
r1830 | // If this is not OP, add reflink to the post. If there already is | ||
// the same reflink, don't add it again. | ||||
var postText = textAreaJq.val(); | ||||
if (!post.is(':first-child') && postText.indexOf(postLinkRaw) < 0) { | ||||
// Insert line break if none is present. | ||||
if (postText.length > 0 && !postText.endsWith('\n') && !postText.endsWith('\r')) { | ||||
textToAdd += '\n'; | ||||
|
r1516 | } | ||
|
r1830 | textToAdd += postLinkRaw + '\n'; | ||
} | ||||
|
r1516 | |||
|
r1830 | textAreaJq.val(textAreaJq.val()+ textToAdd); | ||
blockToInsert = post; | ||||
} else { | ||||
blockToInsert = $('.thread'); | ||||
} | ||||
showFormAfter(blockToInsert); | ||||
|
r1514 | |||
|
r1830 | textAreaJq.focus(); | ||
moveCaretToEnd(textAreaJq); | ||||
|
r1513 | } | ||
|
r1056 | |||
|
r1521 | function addQuickQuote() { | ||
|
r1769 | var textAreaJq = getPostTextarea(); | ||
|
r1575 | |||
var quoteButton = $("#quote-button"); | ||||
var postId = quoteButton.attr('data-post-id'); | ||||
|
r1830 | if (postId != null) { | ||
|
r1575 | addQuickReply(postId); | ||
} | ||||
|
r1513 | var textToAdd = ''; | ||
var selection = window.getSelection().toString(); | ||||
|
r1521 | if (selection.length == 0) { | ||
|
r1575 | selection = quoteButton.attr('data-text'); | ||
|
r1521 | } | ||
|
r1513 | if (selection.length > 0) { | ||
textToAdd += '[quote]' + selection + '[/quote]\n'; | ||||
} | ||||
|
r97 | |||
|
r1575 | textAreaJq.val(textAreaJq.val() + textToAdd); | ||
|
r1513 | |||
textAreaJq.focus(); | ||||
|
r1514 | |||
|
r1783 | moveCaretToEnd(textAreaJq); | ||
|
r97 | } | ||
|
r671 | |||
|
r686 | function scrollToBottom() { | ||
|
r970 | $html.animate({scrollTop: $html.height()}, "fast"); | ||
|
r1056 | } | ||
|
r1108 | |||
|
r1521 | function showQuoteButton() { | ||
var selection = window.getSelection().getRangeAt(0).getBoundingClientRect(); | ||||
var quoteButton = $("#quote-button"); | ||||
if (selection.width > 0) { | ||||
// quoteButton.offset({ top: selection.top - selection.height, left: selection.left }); | ||||
quoteButton.css({top: selection.top + $(window).scrollTop() - 30, left: selection.left}); | ||||
quoteButton.show(); | ||||
var text = window.getSelection().toString(); | ||||
quoteButton.attr('data-text', text); | ||||
|
r1575 | |||
var rect = window.getSelection().getRangeAt(0).getBoundingClientRect(); | ||||
var element = $(document.elementFromPoint(rect.x, rect.y)); | ||||
|
r1587 | var postId = null; | ||
if (element.hasClass('post')) { | ||||
postId = element.attr('id'); | ||||
|
r1575 | } else { | ||
|
r1587 | var postParent = element.parents('.post'); | ||
if (postParent.length > 0) { | ||||
postId = postParent.attr('id'); | ||||
} | ||||
|
r1575 | } | ||
|
r1587 | quoteButton.attr('data-post-id', postId); | ||
|
r1521 | } else { | ||
quoteButton.hide(); | ||||
} | ||||
} | ||||
$(document).ready(function() { | ||||
$('body').on('mouseup', function() { | ||||
showQuoteButton(); | ||||
}); | ||||
$("#quote-button").click(function() { | ||||
addQuickQuote(); | ||||
}) | ||||
|
r1696 | }); | ||