forked from matomo-org/matomo
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix matomo-org#4796 anchor links do not work after merging AngularJS
- Loading branch information
Showing
3 changed files
with
117 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
/*! | ||
* Piwik - Web Analytics | ||
* | ||
* @link http://piwik.org | ||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later | ||
*/ | ||
|
||
/** | ||
* See http://dev.piwik.org/trac/ticket/4795 "linking to #hash tag does not work after merging AngularJS" | ||
*/ | ||
(function () { | ||
|
||
function scrollToAnchorNode($node) | ||
{ | ||
$.scrollTo($node, 20); | ||
} | ||
|
||
function preventDefaultIfEventExists(event) | ||
{ | ||
if (event) { | ||
event.preventDefault(); | ||
} | ||
} | ||
|
||
function scrollToAnchorIfPossible(hash, event) | ||
{ | ||
if (!hash) { | ||
return; | ||
} | ||
|
||
if (-1 !== hash.indexOf('&')) { | ||
return; | ||
} | ||
|
||
var $node = $('#' + hash); | ||
|
||
if ($node && $node.length) { | ||
scrollToAnchorNode($node); | ||
preventDefaultIfEventExists(event); | ||
return; | ||
} | ||
|
||
var $node = $('a[name='+ hash + ']') | ||
|
||
if ($node && $node.length) { | ||
scrollToAnchorNode($node); | ||
preventDefaultIfEventExists(event); | ||
} | ||
} | ||
|
||
function isLinkWithinSamePage(location, newUrl) | ||
{ | ||
if (location && location.origin && -1 === newUrl.indexOf(location.origin)) { | ||
// link to different domain | ||
return false; | ||
} | ||
|
||
if (location && location.pathname && -1 === newUrl.indexOf(location.pathname)) { | ||
// link to different path | ||
return false; | ||
} | ||
|
||
if (location && location.search && -1 === newUrl.indexOf(location.search)) { | ||
// link with different search | ||
return false; | ||
} | ||
|
||
return true; | ||
} | ||
|
||
function handleScrollToAnchorIfPresentOnPageLoad() | ||
{ | ||
if (location.hash.substr(0, 2) == '#/') { | ||
var hash = location.hash.substr(2); | ||
scrollToAnchorIfPossible(hash, null); | ||
} | ||
} | ||
|
||
function handleScrollToAnchorAfterPageLoad() | ||
{ | ||
angular.module('piwikApp').run(['$rootScope', function ($rootScope) { | ||
|
||
$rootScope.$on('$locationChangeStart', function (event, newUrl, oldUrl, $location) { | ||
|
||
if (!newUrl) { | ||
return; | ||
} | ||
|
||
var hashPos = newUrl.indexOf('#/'); | ||
if (-1 === hashPos) { | ||
return; | ||
} | ||
|
||
if (!isLinkWithinSamePage(this.location, newUrl)) { | ||
return; | ||
} | ||
|
||
var hash = newUrl.substr(hashPos + 2); | ||
|
||
scrollToAnchorIfPossible(hash, event); | ||
}); | ||
}]); | ||
} | ||
|
||
handleScrollToAnchorAfterPageLoad(); | ||
$(handleScrollToAnchorIfPresentOnPageLoad); | ||
|
||
})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters