From deca2ecb726174303dd024209585e522b79e33b8 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 2 Apr 2016 13:39:36 +0100 Subject: Make stableSortCount per instance. I've not observed this, but it could possily happen... If the stableSortCount gets out of sync in different frames, then different frames might make different decisions about the ordering of the hints. Ti avoid this potentially happening, we initialise the stableSortCount every time link-hints mode is activated. --- content_scripts/link_hints.coffee | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 01ed6de5..53b5e062 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -131,6 +131,8 @@ class LinkHintsMode HUD.showForDuration "No links to select.", 2000 return + # This count is used to rank equal-scoring hints when sorting, thereby making JavaScript's sort stable. + @stableSortCount = 0 @hintMarkers = (@createMarkerFor desc for desc in hintDescriptors) @markerMatcher = new (if Settings.get "filterLinkHints" then FilterHints else AlphabetHints) @markerMatcher.fillInMarkers @hintMarkers @@ -168,22 +170,19 @@ class LinkHintsMode # # Creates a link marker for the given link. # - createMarkerFor: do -> - # This count is used to rank equal-scoring hints when sorting, thereby making JavaScript's sort stable. - stableSortCount = 0 - (desc) -> - marker = DomUtils.createElement "div" - marker.className = "vimiumReset internalVimiumHintMarker vimiumHintMarker" - marker.stableSortCount = ++stableSortCount - # Extract other relevant fields from the hint descriptor. - extend marker, - {hintDescriptor: desc, linkText: desc.linkText, showLinkText: desc.showLinkText, rect: desc.rect} - - clientRect = desc.rect - marker.style.left = clientRect.left + window.scrollX + "px" - marker.style.top = clientRect.top + window.scrollY + "px" - - marker + createMarkerFor: (desc) -> + marker = DomUtils.createElement "div" + marker.className = "vimiumReset internalVimiumHintMarker vimiumHintMarker" + marker.stableSortCount = ++@stableSortCount + # Extract other relevant fields from the hint descriptor. + extend marker, + {hintDescriptor: desc, linkText: desc.linkText, showLinkText: desc.showLinkText, rect: desc.rect} + + clientRect = desc.rect + marker.style.left = clientRect.left + window.scrollX + "px" + marker.style.top = clientRect.top + window.scrollY + "px" + + marker # Handles and . onKeyDownInMode: (event) -> -- cgit v1.2.3