##// END OF EJS Templates
Fixed adding post id to quote in chrome
neko259 -
r1587:5262969c default
parent child Browse files
Show More
@@ -1,159 +1,163
1 1 /*
2 2 @licstart The following is the entire license notice for the
3 3 JavaScript code in this page.
4 4
5 5
6 6 Copyright (C) 2013 neko259
7 7
8 8 The JavaScript code in this page is free software: you can
9 9 redistribute it and/or modify it under the terms of the GNU
10 10 General Public License (GNU GPL) as published by the Free Software
11 11 Foundation, either version 3 of the License, or (at your option)
12 12 any later version. The code is distributed WITHOUT ANY WARRANTY;
13 13 without even the implied warranty of MERCHANTABILITY or FITNESS
14 14 FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
15 15
16 16 As additional permission under GNU GPL version 3 section 7, you
17 17 may distribute non-source (e.g., minimized or compacted) forms of
18 18 that code without the copy of the GNU GPL normally required by
19 19 section 4, provided you include this license notice and a URL
20 20 through which recipients can access the Corresponding Source.
21 21
22 22 @licend The above is the entire license notice
23 23 for the JavaScript code in this page.
24 24 */
25 25
26 26 var CLOSE_BUTTON = '#form-close-button';
27 27 var REPLY_TO_MSG = '.reply-to-message';
28 28 var REPLY_TO_MSG_ID = '#reply-to-message-id';
29 29
30 30 var $html = $("html, body");
31 31
32 32 function moveCaretToEnd(el) {
33 33 if (typeof el.selectionStart == "number") {
34 34 el.selectionStart = el.selectionEnd = el.value.length;
35 35 } else if (typeof el.createTextRange != "undefined") {
36 36 el.focus();
37 37 var range = el.createTextRange();
38 38 range.collapse(false);
39 39 range.select();
40 40 }
41 41 }
42 42
43 43 function getForm() {
44 44 return $('.post-form-w');
45 45 }
46 46
47 47 function resetFormPosition() {
48 48 var form = getForm();
49 49 form.insertAfter($('.thread'));
50 50
51 51 $(CLOSE_BUTTON).hide();
52 52 $(REPLY_TO_MSG).hide();
53 53 }
54 54
55 55 function showFormAfter(blockToInsertAfter) {
56 56 var form = getForm();
57 57 form.insertAfter(blockToInsertAfter);
58 58
59 59 $(CLOSE_BUTTON).show();
60 60 form.show();
61 61 $(REPLY_TO_MSG_ID).text(blockToInsertAfter.attr('id'));
62 62 $(REPLY_TO_MSG).show();
63 63 }
64 64
65 65 function addQuickReply(postId) {
66 66 // If we click "reply" on the same post, it means "cancel"
67 67 if (getForm().prev().attr('id') == postId) {
68 68 resetFormPosition();
69 69 } else {
70 70 var blockToInsert = null;
71 71 var textAreaJq = $('textarea');
72 72 var postLinkRaw = '[post]' + postId + '[/post]'
73 73 var textToAdd = '';
74 74
75 75 if (postId != null) {
76 76 var post = $('#' + postId);
77 77
78 78 // If this is not OP, add reflink to the post. If there already is
79 79 // the same reflink, don't add it again.
80 80 if (!post.is(':first-child') && textAreaJq.val().indexOf(postLinkRaw) < 0) {
81 81 textToAdd += postLinkRaw + '\n';
82 82 }
83 83
84 84 textAreaJq.val(textAreaJq.val()+ textToAdd);
85 85 blockToInsert = post;
86 86 } else {
87 87 blockToInsert = $('.thread');
88 88 }
89 89 showFormAfter(blockToInsert);
90 90
91 91 textAreaJq.focus();
92 92
93 93 var textarea = document.getElementsByTagName('textarea')[0];
94 94 moveCaretToEnd(textarea);
95 95 }
96 96 }
97 97
98 98 function addQuickQuote() {
99 99 var textAreaJq = $('textarea');
100 100
101 101 var quoteButton = $("#quote-button");
102 102 var postId = quoteButton.attr('data-post-id');
103 103 if (postId != null && getForm().prev().attr('id') != postId) {
104 104 addQuickReply(postId);
105 105 }
106 106
107 107 var textToAdd = '';
108 108 var selection = window.getSelection().toString();
109 109 if (selection.length == 0) {
110 110 selection = quoteButton.attr('data-text');
111 111 }
112 112 if (selection.length > 0) {
113 113 textToAdd += '[quote]' + selection + '[/quote]\n';
114 114 }
115 115
116 116 textAreaJq.val(textAreaJq.val() + textToAdd);
117 117
118 118 textAreaJq.focus();
119 119
120 120 var textarea = document.getElementsByTagName('textarea')[0];
121 121 moveCaretToEnd(textarea);
122 122 }
123 123
124 124 function scrollToBottom() {
125 125 $html.animate({scrollTop: $html.height()}, "fast");
126 126 }
127 127
128 128 function showQuoteButton() {
129 129 var selection = window.getSelection().getRangeAt(0).getBoundingClientRect();
130 130 var quoteButton = $("#quote-button");
131 131 if (selection.width > 0) {
132 132 // quoteButton.offset({ top: selection.top - selection.height, left: selection.left });
133 133 quoteButton.css({top: selection.top + $(window).scrollTop() - 30, left: selection.left});
134 134 quoteButton.show();
135 135
136 136 var text = window.getSelection().toString();
137 137 quoteButton.attr('data-text', text);
138 138
139 139 var rect = window.getSelection().getRangeAt(0).getBoundingClientRect();
140 140 var element = $(document.elementFromPoint(rect.x, rect.y));
141 var postId = null;
142 if (element.hasClass('post')) {
143 postId = element.attr('id');
144 } else {
141 145 var postParent = element.parents('.post');
142 146 if (postParent.length > 0) {
143 quoteButton.attr('data-post-id', postParent.attr('id'));
144 } else {
145 quoteButton.attr('data-post-id', null);
147 postId = postParent.attr('id');
146 148 }
149 }
150 quoteButton.attr('data-post-id', postId);
147 151 } else {
148 152 quoteButton.hide();
149 153 }
150 154 }
151 155
152 156 $(document).ready(function() {
153 157 $('body').on('mouseup', function() {
154 158 showQuoteButton();
155 159 });
156 160 $("#quote-button").click(function() {
157 161 addQuickQuote();
158 162 })
159 163 }); No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now