6
6
define ( [ 'jquery' ] , function ( $ ) {
7
7
'use strict' ;
8
8
9
- return function ( config , element ) {
9
+ /**
10
+ * Binds window navigation event handler to non-anchor elements to facilitate simulated nested anchor functionality
11
+ * @param {Object|null } config
12
+ * @param {Node } element
13
+ */
14
+ function bindClickWidget ( config , element ) {
10
15
var $linkElements = $ ( element ) . find ( '[data-link-type]' ) ;
11
16
12
17
$linkElements . each ( function ( idx , linkElement ) {
13
- var $linkElement = $ ( linkElement ) ;
18
+ var $linkElement = $ ( linkElement ) ,
19
+ isActualAnchorElement = $linkElement . prop ( 'nodeName' ) === 'A' ,
20
+ href = ( $linkElement . attr ( 'href' ) || '' ) . trim ( ) ,
21
+ isValidHref = [ 'javascript:void(0)' , '' ] . indexOf ( href ) === - 1 ;
14
22
15
- if ( $linkElement . prop ( 'nodeName' ) === 'A' || ! $linkElement . attr ( 'href' ) ) {
23
+ if ( isActualAnchorElement || ! isValidHref ) {
16
24
return ;
17
25
}
18
26
@@ -23,8 +31,18 @@ define(['jquery'], function ($) {
23
31
return ;
24
32
}
25
33
26
- window . location . href = $linkElement . attr ( 'href' ) ;
34
+ bindClickWidget . redirectTo ( $linkElement . attr ( 'href' ) ) ;
27
35
} ) ;
28
36
} ) ;
37
+ }
38
+
39
+ /**
40
+ * Navigate to href in browser
41
+ * @param {String } href
42
+ */
43
+ bindClickWidget . redirectTo = function ( href ) {
44
+ window . location . href = href ;
29
45
} ;
46
+
47
+ return bindClickWidget ;
30
48
} ) ;
0 commit comments