/* @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. */ var CLOSE_BUTTON = '#form-close-button'; var REPLY_TO_MSG = '.reply-to-message'; var REPLY_TO_MSG_ID = '#reply-to-message-id'; var $html = $("html, body"); function moveCaretToEnd(el) { var newPos = el.val().length; el[0].setSelectionRange(newPos, newPos); } function getForm() { return $('.post-form-w'); } function resetFormPosition() { var form = getForm(); form.insertAfter($('.thread')); $(CLOSE_BUTTON).hide(); $(REPLY_TO_MSG).hide(); } function showFormAfter(blockToInsertAfter) { var form = getForm(); form.insertAfter(blockToInsertAfter); $(CLOSE_BUTTON).show(); form.show(); $(REPLY_TO_MSG_ID).text(blockToInsertAfter.attr('id')); $(REPLY_TO_MSG).show(); } function addQuickReply(postId) { var blockToInsert = null; var textAreaJq = getPostTextarea(); var postLinkRaw = '[post]' + postId + '[/post]' var textToAdd = ''; if (postId != null) { var post = $('#' + postId); // 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'; } textToAdd += postLinkRaw + '\n'; } textAreaJq.val(textAreaJq.val()+ textToAdd); blockToInsert = post; } else { blockToInsert = $('.thread'); } showFormAfter(blockToInsert); textAreaJq.focus(); moveCaretToEnd(textAreaJq); } function addQuickQuote() { var textAreaJq = getPostTextarea(); var quoteButton = $("#quote-button"); var postId = quoteButton.attr('data-post-id'); if (postId != null) { addQuickReply(postId); } var textToAdd = ''; var selection = window.getSelection().toString(); if (selection.length == 0) { selection = quoteButton.attr('data-text'); } if (selection.length > 0) { textToAdd += '[quote]' + selection + '[/quote]\n'; } textAreaJq.val(textAreaJq.val() + textToAdd); textAreaJq.focus(); moveCaretToEnd(textAreaJq); } function scrollToBottom() { $html.animate({scrollTop: $html.height()}, "fast"); } 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); var rect = window.getSelection().getRangeAt(0).getBoundingClientRect(); var element = $(document.elementFromPoint(rect.x, rect.y)); var postId = null; if (element.hasClass('post')) { postId = element.attr('id'); } else { var postParent = element.parents('.post'); if (postParent.length > 0) { postId = postParent.attr('id'); } } quoteButton.attr('data-post-id', postId); } else { quoteButton.hide(); } } $(document).ready(function() { $('body').on('mouseup', function() { showQuoteButton(); }); $("#quote-button").click(function() { addQuickQuote(); }) });