1/* 2 FastClick: polyfill to remove click delays on browsers with touch UIs. 3 4 @codingstandard ftlabs-jsv2 5 @copyright The Financial Times Limited [All Rights Reserved] 6 @license MIT License (see LICENSE.txt) 7*/ 8(function(){function d(a,b){function c(f,g){return function(){return f.apply(g,arguments)}}b=b||{};this.trackingClick=!1;this.trackingClickStart=0;this.targetElement=null;this.lastTouchIdentifier=this.touchStartY=this.touchStartX=0;this.touchBoundary=b.touchBoundary||10;this.layer=a;this.tapDelay=b.tapDelay||200;this.tapTimeout=b.tapTimeout||700;if(!d.notNeeded(a)){for(var e="onMouse onClick onTouchStart onTouchMove onTouchEnd onTouchCancel".split(" "),n=0,t=e.length;n<t;n++)this[e[n]]=c(this[e[n]], 9this);k&&(a.addEventListener("mouseover",this.onMouse,!0),a.addEventListener("mousedown",this.onMouse,!0),a.addEventListener("mouseup",this.onMouse,!0));a.addEventListener("click",this.onClick,!0);a.addEventListener("touchstart",this.onTouchStart,!1);a.addEventListener("touchmove",this.onTouchMove,!1);a.addEventListener("touchend",this.onTouchEnd,!1);a.addEventListener("touchcancel",this.onTouchCancel,!1);Event.prototype.stopImmediatePropagation||(a.removeEventListener=function(f,g,l){var m=Node.prototype.removeEventListener; 10"click"===f?m.call(a,f,g.hijacked||g,l):m.call(a,f,g,l)},a.addEventListener=function(f,g,l){var m=Node.prototype.addEventListener;"click"===f?m.call(a,f,g.hijacked||(g.hijacked=function(p){p.propagationStopped||g(p)}),l):m.call(a,f,g,l)});if("function"===typeof a.onclick){var u=a.onclick;a.addEventListener("click",function(f){u(f)},!1);a.onclick=null}}}var q=0<=navigator.userAgent.indexOf("Windows Phone"),k=0<navigator.userAgent.indexOf("Android")&&!q,h=/iP(ad|hone|od)/.test(navigator.userAgent)&& 11!q,r=h&&/OS 4_\d(_\d)?/.test(navigator.userAgent),v=h&&/OS [6-7]_\d/.test(navigator.userAgent),w=0<navigator.userAgent.indexOf("BB10");d.prototype.needsClick=function(a){switch(a.nodeName.toLowerCase()){case "button":case "select":case "textarea":if(a.disabled)return!0;break;case "input":if(h&&"file"===a.type||a.disabled)return!0;break;case "label":case "iframe":case "video":return!0}return/\bneedsclick\b/.test(a.className)};d.prototype.needsFocus=function(a){switch(a.nodeName.toLowerCase()){case "textarea":return!0; 12case "select":return!k;case "input":switch(a.type){case "button":case "checkbox":case "file":case "image":case "radio":case "submit":return!1}return!a.disabled&&!a.readOnly;default:return/\bneedsfocus\b/.test(a.className)}};d.prototype.sendClick=function(a,b){document.activeElement&&document.activeElement!==a&&document.activeElement.blur();var c=b.changedTouches[0];var e=document.createEvent("MouseEvents");e.initMouseEvent(this.determineEventType(a),!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY, 13!1,!1,!1,!1,0,null);e.forwardedTouchEvent=!0;a.dispatchEvent(e)};d.prototype.determineEventType=function(a){return k&&"select"===a.tagName.toLowerCase()?"mousedown":"click"};d.prototype.focus=function(a){if(h&&a.setSelectionRange&&0!==a.type.indexOf("date")&&"time"!==a.type&&"month"!==a.type&&"email"!==a.type){var b=a.value.length;a.setSelectionRange(b,b)}else a.focus()};d.prototype.updateScrollParent=function(a){var b=a.fastClickScrollParent;if(!b||!b.contains(a)){var c=a;do{if(c.scrollHeight>c.offsetHeight){b= 14c;a.fastClickScrollParent=c;break}c=c.parentElement}while(c)}b&&(b.fastClickLastScrollTop=b.scrollTop)};d.prototype.getTargetElementFromEventTarget=function(a){return a.nodeType===Node.TEXT_NODE?a.parentNode:a};d.prototype.onTouchStart=function(a){if(1<a.targetTouches.length)return!0;var b=this.getTargetElementFromEventTarget(a.target);var c=a.targetTouches[0];if(h){var e=window.getSelection();if(e.rangeCount&&!e.isCollapsed)return!0;if(!r){if(c.identifier&&c.identifier===this.lastTouchIdentifier)return a.preventDefault(), 15!1;this.lastTouchIdentifier=c.identifier;this.updateScrollParent(b)}}this.trackingClick=!0;this.trackingClickStart=a.timeStamp;this.targetElement=b;this.touchStartX=c.pageX;this.touchStartY=c.pageY;a.timeStamp-this.lastClickTime<this.tapDelay&&a.preventDefault();return!0};d.prototype.touchHasMoved=function(a){a=a.changedTouches[0];var b=this.touchBoundary;return Math.abs(a.pageX-this.touchStartX)>b||Math.abs(a.pageY-this.touchStartY)>b?!0:!1}
15;d.prototype.onTouchMove=function(a){if(!this.trackingClick)return!0; 16if(this.targetElement!==this.getTargetElementFromEventTarget(a.target)||this.touchHasMoved(a))this.trackingClick=!1,this.targetElement=null;return!0};d.prototype.findControl=function(a){return void 0!==a.control?a.control:a.htmlFor?document.getElementById(a.htmlFor):a.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")};d.prototype.onTouchEnd=function(a){var b=this.targetElement;if(!this.trackingClick)return!0;if(a.timeStamp-this.lastClickTime<this.tapDelay)return this.cancelNextClick= 17!0;if(a.timeStamp-this.trackingClickStart>this.tapTimeout)return!0;this.cancelNextClick=!1;this.lastClickTime=a.timeStamp;var c=this.trackingClickStart;this.trackingClick=!1;this.trackingClickStart=0;if(v){var e=a.changedTouches[0];b=document.elementFromPoint(e.pageX-window.pageXOffset,e.pageY-window.pageYOffset)||b;b.fastClickScrollParent=this.targetElement.fastClickScrollParent}e=b.tagName.toLowerCase();if("label"===e){if(c=this.findControl(b)){this.focus(b);if(k)return!1;b=c}}else if(this.needsFocus(b)){if(100< 18a.timeStamp-c||h&&window.top!==window&&"input"===e)return this.targetElement=null,!1;this.focus(b);this.sendClick(b,a);h&&"select"===e||(this.targetElement=null,a.preventDefault());return!1}if(h&&!r&&(c=b.fastClickScrollParent)&&c.fastClickLastScrollTop!==c.scrollTop)return!0;this.needsClick(b)||(a.preventDefault(),this.sendClick(b,a));return!1};d.prototype.onTouchCancel=function(){this.trackingClick=!1;this.targetElement=null};d.prototype.onMouse=function(a){return this.targetElement&&!a.forwardedTouchEvent&& 19a.cancelable?!this.needsClick(this.targetElement)||this.cancelNextClick?(a.stopImmediatePropagation?a.stopImmediatePropagation():a.propagationStopped=!0,a.stopPropagation(),a.preventDefault(),!1):!0:!0};d.prototype.onClick=function(a){if(this.trackingClick)return this.targetElement=null,this.trackingClick=!1,!0;if("submit"===a.target.type&&0===a.detail)return!0;a=this.onMouse(a);a||(this.targetElement=null);return a};d.prototype.destroy=function(){var a=this.layer;k&&(a.removeEventListener("mouseover", 20this.onMouse,!0),a.removeEventListener("mousedown",this.onMouse,!0),a.removeEventListener("mouseup",this.onMouse,!0));a.removeEventListener("click",this.onClick,!0);a.removeEventListener("touchstart",this.onTouchStart,!1);a.removeEventListener("touchmove",this.onTouchMove,!1);a.removeEventListener("touchend",this.onTouchEnd,!1);a.removeEventListener("touchcancel",this.onTouchCancel,!1)};d.notNeeded=function(a){var b,c;if("undefined"===typeof window.ontouchstart)return!0;if(c=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)|| 21[,0])[1])if(k){if((b=document.querySelector("meta[name=viewport]"))&&(-1!==b.content.indexOf("user-scalable=no")||31<c&&document.documentElement.scrollWidth<=window.outerWidth))return!0}else return!0;return w&&(b=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),10<=b[1]&&3<=b[2]&&(b=document.querySelector("meta[name=viewport]"))&&(-1!==b.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))||"none"===a.style.msTouchAction||"manipulation"===a.style.touchAction|| 2227<=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]&&(b=document.querySelector("meta[name=viewport]"))&&(-1!==b.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth)?!0:"none"===a.style.touchAction||"manipulation"===a.style.touchAction?!0:!1};d.attach=function(a,b){return new d(a,b)};"function"===typeof define&&"object"===typeof define.amd&&define.amd?define(function(){return d}):"undefined"!==typeof module&&module.exports?(module.exports=d.attach, 23module.exports.FastClick=d):window.FastClick=d})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.