Skip to content

Commit 159ee7c

Browse files
committed
Merge pull request openlayers#612 from ahocevar/612
Touch events do not trigger the default action in attribution links. r=@marcjansen
2 parents 940c0e8 + aef5517 commit 159ee7c

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

lib/OpenLayers/Events/buttonclick.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,26 @@ OpenLayers.Events.buttonclick = OpenLayers.Class({
121121
} while(--depth > 0 && element);
122122
return button;
123123
},
124+
125+
/**
126+
* Method: ignore
127+
* Check for event target elements that should be ignored by OpenLayers.
128+
*
129+
* Parameters:
130+
* element - {DOMElement} The event target.
131+
*/
132+
ignore: function(element) {
133+
var depth = 3,
134+
ignore = false;
135+
do {
136+
if (element.nodeName.toLowerCase() === 'a') {
137+
ignore = true;
138+
break;
139+
}
140+
element = element.parentNode;
141+
} while (--depth > 0 && element);
142+
return ignore;
143+
},
124144

125145
/**
126146
* Method: buttonClick
@@ -170,6 +190,7 @@ OpenLayers.Events.buttonclick = OpenLayers.Class({
170190
propagate = false;
171191
}
172192
} else {
193+
propagate = !this.ignore(OpenLayers.Event.element(evt));
173194
delete this.startEvt;
174195
}
175196
}

tests/Events/buttonclick.html

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,40 @@
6363
events.destroy();
6464
}
6565

66+
function test_ignore(t) {
67+
t.plan(5);
68+
69+
// set up
70+
71+
events = new OpenLayers.Events({}, element);
72+
buttonClick = new OpenLayers.Events.buttonclick(events);
73+
74+
var link = document.createElement('a'),
75+
span1 = document.createElement('span'),
76+
span2 = document.createElement('span'),
77+
span3 = document.createElement('span');
78+
link.appendChild(span1);
79+
span1.appendChild(span2);
80+
span2.appendChild(span3);
81+
82+
t.eq(buttonClick.ignore(link), true,
83+
'ignore returns true when element is a link');
84+
t.eq(buttonClick.ignore(span1), true,
85+
'ignore returns true when element is link descendant level 1');
86+
t.eq(buttonClick.ignore(span2), true,
87+
'ignore returns true when element is link descendant level 2');
88+
t.eq(buttonClick.ignore(span3), false,
89+
'ignore returns false when element is link descendant level 3');
90+
t.eq(buttonClick.ignore(element), false,
91+
'ignore returns false when element is not a link');
92+
93+
94+
// tear down
95+
96+
buttonClick.destroy();
97+
events.destroy();
98+
}
99+
66100
function test_ButtonClick_buttonClick(t) {
67101
t.plan(27);
68102
events = new OpenLayers.Events({}, element);

0 commit comments

Comments
 (0)