This commit is contained in:
watrabi
2025-09-18 17:55:52 -04:00
commit 977f1ff4b8
15030 changed files with 17324420 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
/* global jQuery:true */
(function() {
'use strict';
var isTouch = 'ontouchstart' in window || 'msmaxtouchpoints' in window.navigator;
function Touche(nodes) {
// Doing this allows the developer to omit the `new` keyword from their calls to Touche
if (!(this instanceof Touche)) {
return new Touche(nodes);
}
if (!nodes) {
throw new Error('No DOM elements passed into Touche');
}
this.nodes = nodes;
return this;
}
// Our own event handler
Touche.prototype.on = function(event, fn) {
var touchend, nodes = this.nodes,
len = nodes.length,
ev;
if (isTouch && event === 'click') {
touchend = true;
}
ev = function(el, event, fn) {
var called, once = function() {
if (!called && (called = true)) {
fn.apply(this, arguments);
}
};
el.addEventListener(event, once, false);
if (touchend) {
el.addEventListener('touchend', once, false);
}
};
// NodeList or just a Node?
if (len) {
while (len--) {
ev(nodes[len], event, fn);
}
} else {
ev(nodes, event, fn);
}
return this;
};
// Expose Touche
window.Touche = Touche;
// Has the developer used jQuery?
if (window.jQuery && isTouch) {
var originalOnMethod = jQuery.fn.on,
originalOffMethod = jQuery.fn.off;
var replaceEventName = function (event) {
if (event.slice(0, 5) == 'click') {
return event.replace('click', 'touchend');
}
return event;
}
// Change event type and re-apply .on() method
jQuery.fn.on = function() {
// arguments[0] is the event name if provided
if(typeof arguments[0] === "string"){
arguments[0] = replaceEventName(arguments[0]);
}
originalOnMethod.apply(this, arguments);
return this;
};
// Change event type and re-apply .off() method
jQuery.fn.off = function() {
// arguments[0] is the event name if provided
if(typeof arguments[0] === "string"){
arguments[0] = replaceEventName(arguments[0]);
}
originalOffMethod.apply(this, arguments);
return this;
};
}
})();