thread.js
103 lines
| 3.0 KiB
| application/javascript
|
JavascriptLexer
neko259
|
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. | ||||
*/ | ||||
neko259
|
r1108 | var CLOSE_BUTTON = '#form-close-button'; | ||
neko259
|
r970 | var $html = $("html, body"); | ||
Pavel Ryapolov
|
r106 | function moveCaretToEnd(el) { | ||
if (typeof el.selectionStart == "number") { | ||||
el.selectionStart = el.selectionEnd = el.value.length; | ||||
} else if (typeof el.createTextRange != "undefined") { | ||||
el.focus(); | ||||
var range = el.createTextRange(); | ||||
range.collapse(false); | ||||
range.select(); | ||||
} | ||||
} | ||||
neko259
|
r1056 | function getForm() { | ||
return $('.post-form-w'); | ||||
} | ||||
neko259
|
r1059 | function resetFormPosition() { | ||
neko259
|
r1056 | var form = getForm(); | ||
form.insertAfter($('.thread')); | ||||
neko259
|
r1108 | |||
$(CLOSE_BUTTON).hide(); | ||||
} | ||||
function showFormAfter(blockToInsertAfter) { | ||||
var form = getForm(); | ||||
form.insertAfter(blockToInsertAfter); | ||||
$(CLOSE_BUTTON).show(); | ||||
form.show(); | ||||
neko259
|
r1056 | } | ||
neko259
|
r97 | function addQuickReply(postId) { | ||
neko259
|
r1108 | // If we click "reply" on the same post, it means "cancel" | ||
if (getForm().prev().attr('id') == postId) { | ||||
resetFormPosition(); | ||||
} else { | ||||
var postLinkRaw = '[post]' + postId + '[/post]' | ||||
neko259
|
r1084 | |||
neko259
|
r1108 | var textToAdd = ''; | ||
var blockToInsert = null; | ||||
neko259
|
r1056 | |||
neko259
|
r1108 | var textAreaJq = $('textarea'); | ||
neko259
|
r1084 | |||
neko259
|
r1108 | if (postId != null) { | ||
var post = $('#' + postId); | ||||
neko259
|
r1056 | |||
neko259
|
r1108 | // If this is not OP, add reflink to the post. If there already is | ||
// the same reflink, don't add it again. | ||||
if (!post.is(':first-child') && textAreaJq.val().indexOf(postLinkRaw) < 0) { | ||||
textToAdd += postLinkRaw + '\n'; | ||||
} | ||||
blockToInsert = post; | ||||
} else { | ||||
blockToInsert = $('.thread'); | ||||
neko259
|
r1056 | } | ||
neko259
|
r1108 | var selection = window.getSelection().toString(); | ||
if (selection.length > 0) { | ||||
textToAdd += '[quote]' + selection + '[/quote]\n'; | ||||
} | ||||
neko259
|
r1056 | |||
neko259
|
r1108 | textAreaJq.val(textAreaJq.val()+ textToAdd); | ||
neko259
|
r629 | |||
neko259
|
r1108 | showFormAfter(blockToInsert); | ||
neko259
|
r97 | |||
neko259
|
r1108 | textAreaJq.focus(); | ||
var textarea = document.getElementsByTagName('textarea')[0]; | ||||
moveCaretToEnd(textarea); | ||||
} | ||||
neko259
|
r97 | } | ||
neko259
|
r671 | |||
neko259
|
r686 | function scrollToBottom() { | ||
neko259
|
r970 | $html.animate({scrollTop: $html.height()}, "fast"); | ||
neko259
|
r1056 | } | ||
neko259
|
r1108 | |||