FIX: Don't include link counts when selecting text to quote a post.
This commit is contained in:
parent
213d3e5c10
commit
518910a54d
|
@ -103,16 +103,30 @@ Discourse.Utilities = {
|
|||
},
|
||||
|
||||
selectedText: function() {
|
||||
var t;
|
||||
t = '';
|
||||
if (window.getSelection) {
|
||||
t = window.getSelection().toString();
|
||||
} else if (document.getSelection) {
|
||||
t = document.getSelection().toString();
|
||||
} else if (document.selection) {
|
||||
t = document.selection.createRange().text;
|
||||
var html = '';
|
||||
|
||||
if (typeof window.getSelection != "undefined") {
|
||||
var sel = window.getSelection();
|
||||
if (sel.rangeCount) {
|
||||
var container = document.createElement("div");
|
||||
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
|
||||
container.appendChild(sel.getRangeAt(i).cloneContents());
|
||||
}
|
||||
html = container.innerHTML;
|
||||
}
|
||||
} else if (typeof document.selection != "undefined") {
|
||||
if (document.selection.type == "Text") {
|
||||
html = document.selection.createRange().htmlText;
|
||||
}
|
||||
}
|
||||
return String(t).trim();
|
||||
|
||||
// Strip out any .click elements from the HTML before converting it to text
|
||||
var div = document.createElement('div');
|
||||
div.innerHTML = html;
|
||||
$('.clicks', $(div)).remove();
|
||||
var text = div.textContent || div.innerText || "";
|
||||
|
||||
return String(text).trim();
|
||||
},
|
||||
|
||||
// Determine the position of the caret in an element
|
||||
|
|
|
@ -10,6 +10,11 @@ Discourse.QuoteButtonController = Discourse.Controller.extend({
|
|||
needs: ['topic', 'composer'],
|
||||
started: null,
|
||||
|
||||
init: function() {
|
||||
this._super();
|
||||
$LAB.script(assetPath('defer/html-sanitizer-bundle'));
|
||||
},
|
||||
|
||||
// If the buffer is cleared, clear out other state (post)
|
||||
bufferChanged: (function() {
|
||||
if (this.blank('buffer')) {
|
||||
|
@ -35,6 +40,7 @@ Discourse.QuoteButtonController = Discourse.Controller.extend({
|
|||
selectedText = Discourse.Utilities.selectedText();
|
||||
if (this.get('buffer') === selectedText) return;
|
||||
if (this.get('lastSelected') === selectedText) return;
|
||||
|
||||
this.set('post', e.context);
|
||||
this.set('buffer', selectedText);
|
||||
top = e.pageY + 5;
|
||||
|
@ -44,35 +50,33 @@ Discourse.QuoteButtonController = Discourse.Controller.extend({
|
|||
top = this.started[1] - 50;
|
||||
left = ((left - this.started[0]) / 2) + this.started[0] - ($quoteButton.width() / 2);
|
||||
}
|
||||
$quoteButton.css({
|
||||
top: top,
|
||||
left: left
|
||||
});
|
||||
$quoteButton.css({ top: top, left: left });
|
||||
this.started = null;
|
||||
return false;
|
||||
},
|
||||
|
||||
quoteText: function(e) {
|
||||
var buffer, composerController, composerOpts, composerPost, post, quotedText,
|
||||
_this = this;
|
||||
e.stopPropagation();
|
||||
post = this.get('post');
|
||||
composerController = this.get('controllers.composer');
|
||||
composerOpts = {
|
||||
/**
|
||||
Quote the currently selected text
|
||||
|
||||
@method quoteText
|
||||
**/
|
||||
quoteText: function() {
|
||||
var post = this.get('post');
|
||||
var composerController = this.get('controllers.composer');
|
||||
var composerOpts = {
|
||||
post: post,
|
||||
action: Discourse.Composer.REPLY,
|
||||
draftKey: this.get('post.topic.draft_key')
|
||||
};
|
||||
|
||||
// If the composer is associated with a different post, we don't change it.
|
||||
if (composerPost = composerController.get('content.post')) {
|
||||
if (composerPost.get('id') !== this.get('post.id')) {
|
||||
composerOpts.post = composerPost;
|
||||
}
|
||||
var composerPost = composerController.get('content.post');
|
||||
if (composerPost && (composerPost.get('id') !== this.get('post.id'))) {
|
||||
composerOpts.post = composerPost;
|
||||
}
|
||||
buffer = this.get('buffer');
|
||||
quotedText = Discourse.BBCode.buildQuoteBBCode(post, buffer);
|
||||
|
||||
var buffer = this.get('buffer');
|
||||
var quotedText = Discourse.BBCode.buildQuoteBBCode(post, buffer);
|
||||
if (composerController.wouldLoseChanges()) {
|
||||
composerController.appendText(quotedText);
|
||||
} else {
|
||||
|
@ -83,4 +87,5 @@ Discourse.QuoteButtonController = Discourse.Controller.extend({
|
|||
this.set('buffer', '');
|
||||
return false;
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -11,7 +11,7 @@ Discourse.QuoteButtonView = Discourse.View.extend({
|
|||
classNameBindings: ['hasBuffer'],
|
||||
|
||||
render: function(buffer) {
|
||||
buffer.push("quote reply");
|
||||
buffer.push(Em.String.i18n("post.quote_reply"));
|
||||
},
|
||||
|
||||
hasBuffer: (function() {
|
||||
|
@ -25,17 +25,18 @@ Discourse.QuoteButtonView = Discourse.View.extend({
|
|||
|
||||
didInsertElement: function() {
|
||||
// Clear quote button if they click elsewhere
|
||||
var _this = this;
|
||||
var quoteButtonView = this;
|
||||
return $(document).bind("mousedown.quote-button", function(e) {
|
||||
if ($(e.target).hasClass('quote-button')) return;
|
||||
if ($(e.target).hasClass('create')) return;
|
||||
_this.controller.mouseDown(e);
|
||||
_this.set('controller.lastSelected', _this.get('controller.buffer'));
|
||||
return _this.set('controller.buffer', '');
|
||||
quoteButtonView.controller.mouseDown(e);
|
||||
quoteButtonView.set('controller.lastSelected', quoteButtonView.get('controller.buffer'));
|
||||
return quoteButtonView.set('controller.buffer', '');
|
||||
});
|
||||
},
|
||||
|
||||
click: function(e) {
|
||||
e.stopPropagation();
|
||||
return this.get('controller').quoteText(e);
|
||||
}
|
||||
|
||||
|
|
|
@ -517,6 +517,7 @@ en:
|
|||
post:
|
||||
reply: "Replying to {{link}} by {{replyAvatar}} {{username}}"
|
||||
reply_topic: "Reply to {{link}}"
|
||||
quote_reply: "quote reply"
|
||||
edit: "Editing {{link}} by {{replyAvatar}} {{username}}"
|
||||
post_number: "post {{number}}"
|
||||
in_reply_to: "in reply to"
|
||||
|
|
Loading…
Reference in New Issue