From 9e16e031988e27017c5b0e45228dc7db7b2e7e43 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 30 Apr 2015 15:43:39 +1000 Subject: [PATCH] FIX: text was impossible to quote on Windows Phone --- .../discourse/controllers/quote-button.js.es6 | 2 +- .../discourse/views/quote-button.js.es6 | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/quote-button.js.es6 b/app/assets/javascripts/discourse/controllers/quote-button.js.es6 index d3b984e9131..c73822188c0 100644 --- a/app/assets/javascripts/discourse/controllers/quote-button.js.es6 +++ b/app/assets/javascripts/discourse/controllers/quote-button.js.es6 @@ -57,7 +57,7 @@ export default DiscourseController.extend({ // and insert it at the start of our selection range range.insertNode(markerElement); - // retrieve the position of the market + // retrieve the position of the marker const markerOffset = $(markerElement).offset(), $quoteButton = $('.quote-button'); diff --git a/app/assets/javascripts/discourse/views/quote-button.js.es6 b/app/assets/javascripts/discourse/views/quote-button.js.es6 index cb4c3b07034..dad4b4d79eb 100644 --- a/app/assets/javascripts/discourse/views/quote-button.js.es6 +++ b/app/assets/javascripts/discourse/views/quote-button.js.es6 @@ -26,6 +26,18 @@ export default Discourse.View.extend({ const controller = this.get('controller'), view = this; + var onSelectionChanged = function() { + view.selectText(window.getSelection().anchorNode, controller); + }; + + // Windows Phone hack, it is not firing the touch events + // best we can do is debounce this so we dont keep locking up + // the selection when we add the caret to measure where we place + // the quote reply widget + if (navigator.userAgent.match(/Windows Phone/)) { + onSelectionChanged = _.debounce(onSelectionChanged, 500); + } + $(document) .on("mousedown.quote-button", function(e) { view.set('isMouseDown', true); @@ -55,7 +67,7 @@ export default Discourse.View.extend({ // or if there a touch in progress if (view.get('isMouseDown') || view.get('isTouchInProgress')) return; // `selection.anchorNode` is used as a target - view.selectText(window.getSelection().anchorNode, controller); + onSelectionChanged(); }); },