version 2 release
This commit is contained in:
parent
4d3ae14656
commit
edcb2f591c
30 changed files with 104 additions and 1188 deletions
88
js/app.js
88
js/app.js
|
@ -1,63 +1,29 @@
|
|||
function enableIcon(icon) {
|
||||
icon.css('cursor', 'pointer');
|
||||
icon.find('.back').removeClass('hide');
|
||||
icon.flip({
|
||||
trigger: 'click',
|
||||
speed: 500,
|
||||
reverse: false
|
||||
});
|
||||
}
|
||||
const developer = document.getElementById('developer');
|
||||
const magician = document.getElementById('magician');
|
||||
const links = document.getElementById('links');
|
||||
|
||||
$(document).ready(function () {
|
||||
$('.list').addClass('hide');
|
||||
enableIcon($('#card'));
|
||||
document.addEventListener('touchmove', function (event) {
|
||||
event.preventDefault();
|
||||
var e = event.touches[0];
|
||||
move(e);
|
||||
});
|
||||
document.addEventListener('mousemove', function (event) {
|
||||
event.preventDefault();
|
||||
move(event);
|
||||
});
|
||||
|
||||
$('#prevslide').removeClass('hide');
|
||||
$('#nextslide').removeClass('hide');
|
||||
$.supersized({
|
||||
// Functionality
|
||||
slideshow: 1, // Slideshow on/off
|
||||
autoplay: 1, // Slideshow starts playing automatically
|
||||
start_slide: 1, // Start slide (0 is random)
|
||||
stop_loop: 0, // Pauses slideshow on last slide
|
||||
random: 0, // Randomize slide order (Ignores start slide)
|
||||
slide_interval: 5000, // Length between transitions
|
||||
transition: 1, // 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left
|
||||
transition_speed: 1000, // Speed of transition
|
||||
new_window: 0, // Image links open in new window/tab
|
||||
pause_hover: 0, // Pause slideshow on hover
|
||||
keyboard_nav: 1, // Keyboard navigation on/off
|
||||
performance: 1, // 0-Normal, 1-Hybrid speed/quality, 2-Optimizes image quality, 3-Optimizes transition speed // (Only works for Firefox/IE, not Webkit)
|
||||
image_protect: 1, // Disables image dragging and right click with Javascript
|
||||
|
||||
min_width: 0, // Min width allowed (in pixels)
|
||||
min_height: 0, // Min height allowed (in pixels)
|
||||
vertical_center: 1, // Vertically center background
|
||||
horizontal_center: 1, // Horizontally center background
|
||||
fit_always: 0, // Image will never exceed browser width or height (Ignores min. dimensions)
|
||||
fit_portrait: 1, // Portrait images will not exceed browser height
|
||||
fit_landscape: 0, // Landscape images will not exceed browser width
|
||||
|
||||
// Components
|
||||
slide_links: 'name', // Individual links for each slide (Options: false, 'num', 'name', 'blank')
|
||||
thumb_links: 0, // Individual thumb links for each slide
|
||||
thumbnail_navigation: 0, // Thumbnail navigation
|
||||
slides: [ // Slideshow Images
|
||||
{
|
||||
image: 'img/sp-magic.png',
|
||||
title: 'sp-magic',
|
||||
thumb: 'img/sp-magic.png',
|
||||
url: 'http://sp-magic.de'
|
||||
},
|
||||
{
|
||||
image: 'img/sp-codes.png',
|
||||
title: 'sp-codes',
|
||||
thumb: 'img/sp-codes.png',
|
||||
url: 'http://sp-codes.de'
|
||||
}],
|
||||
|
||||
// Theme Options
|
||||
progress_bar: 1, // Timer for each slide
|
||||
mouse_scrub: 0
|
||||
});
|
||||
});
|
||||
function move(event) {
|
||||
let body = document.getElementsByTagName('body')[0];
|
||||
const width = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;
|
||||
const height= window.innerHeight|| document.documentElement.clientHeight|| body.clientHeight;
|
||||
const traX = (((50 * event.pageX) / width)) - 50;
|
||||
const traY = (((50 * event.pageY) / height)) - 50;
|
||||
const traX2 = (50 + traX) * -1;
|
||||
const traY2 = (50 + traY) * -1;
|
||||
magician.style.left = traX + 'px';
|
||||
magician.style.top = traY + 'px';
|
||||
links.style.left = traX + 'px';
|
||||
links.style.top = traY + 'px';
|
||||
developer.style.left = traX2 + 'px';
|
||||
developer.style.top = traY2 + 'px';
|
||||
}
|
4
js/vendor/jquery-2.2.4.min.js
vendored
4
js/vendor/jquery-2.2.4.min.js
vendored
File diff suppressed because one or more lines are too long
71
js/vendor/jquery.easing.min.js
vendored
71
js/vendor/jquery.easing.min.js
vendored
|
@ -1,71 +0,0 @@
|
|||
/*
|
||||
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
|
||||
*
|
||||
* Uses the built in easing capabilities added In jQuery 1.1
|
||||
* to offer multiple easing options
|
||||
*
|
||||
* TERMS OF USE - jQuery Easing
|
||||
*
|
||||
* Open source under the BSD License.
|
||||
*
|
||||
* Copyright å© 2008 George McGinley Smith
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||
* or promote products derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
|
||||
|
||||
/*
|
||||
*
|
||||
* TERMS OF USE - EASING EQUATIONS
|
||||
*
|
||||
* Open source under the BSD License.
|
||||
*
|
||||
* Copyright å© 2001 Robert Penner
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||
* or promote products derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
6
js/vendor/jquery.flip.min.js
vendored
6
js/vendor/jquery.flip.min.js
vendored
|
@ -1,6 +0,0 @@
|
|||
/*! flip - v1.1.1 - 2016-05-25
|
||||
* https://github.com/nnattawat/flip
|
||||
* Copyright (c) 2016 Nattawat Nonsung; Licensed MIT */
|
||||
|
||||
!function(a){var b=function(){var a,b=document.createElement("fakeelement"),c={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(a in c)if(void 0!==b.style[a])return c[a]},c=function(b,c,d){this.setting={axis:"y",reverse:!1,trigger:"click",speed:500,forceHeight:!1,forceWidth:!1,autoSize:!0,front:".front",back:".back"},this.setting=a.extend(this.setting,c),"string"!=typeof c.axis||"x"!==c.axis.toLowerCase()&&"y"!==c.axis.toLowerCase()||(this.setting.axis=c.axis.toLowerCase()),"boolean"==typeof c.reverse&&(this.setting.reverse=c.reverse),"string"==typeof c.trigger&&(this.setting.trigger=c.trigger.toLowerCase());var e=parseInt(c.speed);isNaN(e)||(this.setting.speed=e),"boolean"==typeof c.forceHeight&&(this.setting.forceHeight=c.forceHeight),"boolean"==typeof c.forceWidth&&(this.setting.forceWidth=c.forceWidth),"boolean"==typeof c.autoSize&&(this.setting.autoSize=c.autoSize),("string"==typeof c.front||c.front instanceof a)&&(this.setting.front=c.front),("string"==typeof c.back||c.back instanceof a)&&(this.setting.back=c.back),this.element=b,this.frontElement=this.getFrontElement(),this.backElement=this.getBackElement(),this.isFlipped=!1,this.init(d)};a.extend(c.prototype,{flipDone:function(a){var c=this;c.element.one(b(),function(){c.element.trigger("flip:done"),"function"==typeof a&&a.call(c.element)})},flip:function(a){if(!this.isFlipped){this.isFlipped=!0;var b="rotate"+this.setting.axis;this.frontElement.css({transform:b+(this.setting.reverse?"(-180deg)":"(180deg)"),"z-index":"0"}),this.backElement.css({transform:b+"(0deg)","z-index":"1"}),this.flipDone(a)}},unflip:function(a){if(this.isFlipped){this.isFlipped=!1;var b="rotate"+this.setting.axis;this.frontElement.css({transform:b+"(0deg)","z-index":"1"}),this.backElement.css({transform:b+(this.setting.reverse?"(180deg)":"(-180deg)"),"z-index":"0"}),this.flipDone(a)}},getFrontElement:function(){return this.setting.front instanceof a?this.setting.front:this.element.find(this.setting.front)},getBackElement:function(){return this.setting.back instanceof a?this.setting.back:this.element.find(this.setting.back)},init:function(a){var b=this,c=b.frontElement.add(b.backElement),d="rotate"+b.setting.axis,e=2*b.element["outer"+("rotatex"===d?"Height":"Width")](),f={perspective:e,position:"relative"},g={transform:d+"("+(b.setting.reverse?"180deg":"-180deg")+")","z-index":"0"},h={"backface-visibility":"hidden","transform-style":"preserve-3d",position:"absolute","z-index":"1"};b.setting.forceHeight?c.outerHeight(b.element.height()):b.setting.autoSize&&(h.height="100%"),b.setting.forceWidth?c.outerWidth(b.element.width()):b.setting.autoSize&&(h.width="100%"),(window.chrome||window.Intl&&Intl.v8BreakIterator)&&"CSS"in window&&(f["-webkit-transform-style"]="preserve-3d"),b.element.css(f),b.backElement.css(g),c.css(h).find("*").css({"backface-visibility":"hidden"}),setTimeout(function(){var d=b.setting.speed/1e3||.5;c.css({transition:"all "+d+"s ease-out"}),"function"==typeof a&&a.call(b.element)},20),b.attachEvents()},clickHandler:function(b){b||(b=window.event),this.element.find(a(b.target).closest('button, a, input[type="submit"]')).length||(this.isFlipped?this.unflip():this.flip())},hoverHandler:function(){var b=this;b.element.off("mouseleave.flip"),b.flip(),setTimeout(function(){b.element.on("mouseleave.flip",a.proxy(b.unflip,b)),b.element.is(":hover")||b.unflip()},b.setting.speed+150)},attachEvents:function(){var b=this;"click"===b.setting.trigger?b.element.on(a.fn.tap?"tap.flip":"click.flip",a.proxy(b.clickHandler,b)):"hover"===b.setting.trigger&&(b.element.on("mouseenter.flip",a.proxy(b.hoverHandler,b)),b.element.on("mouseleave.flip",a.proxy(b.unflip,b)))},flipChanged:function(a){this.element.trigger("flip:change"),"function"==typeof a&&a.call(this.element)},changeSettings:function(a,b){var c=this,d=!1;if(void 0!==a.axis&&c.setting.axis!==a.axis.toLowerCase()&&(c.setting.axis=a.axis.toLowerCase(),d=!0),void 0!==a.reverse&&c.setting.reverse!==a.reverse&&(c.setting.reverse=a.reverse,d=!0),d){var e=c.frontElement.add(c.backElement),f=e.css(["transition-property","transition-timing-function","transition-duration","transition-delay"]);e.css({transition:"none"});var g="rotate"+c.setting.axis;c.isFlipped?c.frontElement.css({transform:g+(c.setting.reverse?"(-180deg)":"(180deg)"),"z-index":"0"}):c.backElement.css({transform:g+(c.setting.reverse?"(180deg)":"(-180deg)"),"z-index":"0"}),setTimeout(function(){e.css(f),c.flipChanged(b)},0)}else c.flipChanged(b)}}),a.fn.flip=function(b,d){return"function"==typeof b&&(d=b),"string"==typeof b||"boolean"==typeof b?this.each(function(){var c=a(this).data("flip-model");"toggle"===b&&(b=!c.isFlipped),b?c.flip(d):c.unflip(d)}):this.each(function(){if(a(this).data("flip-model")){var e=a(this).data("flip-model");!b||void 0===b.axis&&void 0===b.reverse||e.changeSettings(b,d)}else a(this).data("flip-model",new c(a(this),b||{},d))}),this}}(jQuery);
|
||||
//# sourceMappingURL=jquery.flip.min.js.map
|
11
js/vendor/supersized.3.2.7.min.js
vendored
11
js/vendor/supersized.3.2.7.min.js
vendored
File diff suppressed because one or more lines are too long
295
js/vendor/what-input.js
vendored
295
js/vendor/what-input.js
vendored
|
@ -1,295 +0,0 @@
|
|||
window.whatInput = (function() {
|
||||
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
---------------
|
||||
variables
|
||||
---------------
|
||||
*/
|
||||
|
||||
// array of actively pressed keys
|
||||
var activeKeys = [];
|
||||
|
||||
// cache document.body
|
||||
var body;
|
||||
|
||||
// boolean: true if touch buffer timer is running
|
||||
var buffer = false;
|
||||
|
||||
// the last used input type
|
||||
var currentInput = null;
|
||||
|
||||
// `input` types that don't accept text
|
||||
var nonTypingInputs = [
|
||||
'button',
|
||||
'checkbox',
|
||||
'file',
|
||||
'image',
|
||||
'radio',
|
||||
'reset',
|
||||
'submit'
|
||||
];
|
||||
|
||||
// detect version of mouse wheel event to use
|
||||
// via https://developer.mozilla.org/en-US/docs/Web/Events/wheel
|
||||
var mouseWheel = detectWheel();
|
||||
|
||||
// list of modifier keys commonly used with the mouse and
|
||||
// can be safely ignored to prevent false keyboard detection
|
||||
var ignoreMap = [
|
||||
16, // shift
|
||||
17, // control
|
||||
18, // alt
|
||||
91, // Windows key / left Apple cmd
|
||||
93 // Windows menu / right Apple cmd
|
||||
];
|
||||
|
||||
// mapping of events to input types
|
||||
var inputMap = {
|
||||
'keydown': 'keyboard',
|
||||
'keyup': 'keyboard',
|
||||
'mousedown': 'mouse',
|
||||
'mousemove': 'mouse',
|
||||
'MSPointerDown': 'pointer',
|
||||
'MSPointerMove': 'pointer',
|
||||
'pointerdown': 'pointer',
|
||||
'pointermove': 'pointer',
|
||||
'touchstart': 'touch'
|
||||
};
|
||||
|
||||
// add correct mouse wheel event mapping to `inputMap`
|
||||
inputMap[detectWheel()] = 'mouse';
|
||||
|
||||
// array of all used input types
|
||||
var inputTypes = [];
|
||||
|
||||
// mapping of key codes to a common name
|
||||
var keyMap = {
|
||||
9: 'tab',
|
||||
13: 'enter',
|
||||
16: 'shift',
|
||||
27: 'esc',
|
||||
32: 'space',
|
||||
37: 'left',
|
||||
38: 'up',
|
||||
39: 'right',
|
||||
40: 'down'
|
||||
};
|
||||
|
||||
// map of IE 10 pointer events
|
||||
var pointerMap = {
|
||||
2: 'touch',
|
||||
3: 'touch', // treat pen like touch
|
||||
4: 'mouse'
|
||||
};
|
||||
|
||||
// touch buffer timer
|
||||
var timer;
|
||||
|
||||
|
||||
/*
|
||||
---------------
|
||||
functions
|
||||
---------------
|
||||
*/
|
||||
|
||||
// allows events that are also triggered to be filtered out for `touchstart`
|
||||
function eventBuffer() {
|
||||
clearTimer();
|
||||
setInput(event);
|
||||
|
||||
buffer = true;
|
||||
timer = window.setTimeout(function() {
|
||||
buffer = false;
|
||||
}, 650);
|
||||
}
|
||||
|
||||
function bufferedEvent(event) {
|
||||
if (!buffer) setInput(event);
|
||||
}
|
||||
|
||||
function unBufferedEvent(event) {
|
||||
clearTimer();
|
||||
setInput(event);
|
||||
}
|
||||
|
||||
function clearTimer() {
|
||||
window.clearTimeout(timer);
|
||||
}
|
||||
|
||||
function setInput(event) {
|
||||
var eventKey = key(event);
|
||||
var value = inputMap[event.type];
|
||||
if (value === 'pointer') value = pointerType(event);
|
||||
|
||||
// don't do anything if the value matches the input type already set
|
||||
if (currentInput !== value) {
|
||||
var eventTarget = target(event);
|
||||
var eventTargetNode = eventTarget.nodeName.toLowerCase();
|
||||
var eventTargetType = (eventTargetNode === 'input') ? eventTarget.getAttribute('type') : null;
|
||||
|
||||
if (
|
||||
(// only if the user flag to allow typing in form fields isn't set
|
||||
!body.hasAttribute('data-whatinput-formtyping') &&
|
||||
|
||||
// only if currentInput has a value
|
||||
currentInput &&
|
||||
|
||||
// only if the input is `keyboard`
|
||||
value === 'keyboard' &&
|
||||
|
||||
// not if the key is `TAB`
|
||||
keyMap[eventKey] !== 'tab' &&
|
||||
|
||||
// only if the target is a form input that accepts text
|
||||
(
|
||||
eventTargetNode === 'textarea' ||
|
||||
eventTargetNode === 'select' ||
|
||||
(eventTargetNode === 'input' && nonTypingInputs.indexOf(eventTargetType) < 0)
|
||||
)) || (
|
||||
// ignore modifier keys
|
||||
ignoreMap.indexOf(eventKey) > -1
|
||||
)
|
||||
) {
|
||||
// ignore keyboard typing
|
||||
} else {
|
||||
switchInput(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (value === 'keyboard') logKeys(eventKey);
|
||||
}
|
||||
|
||||
function switchInput(string) {
|
||||
currentInput = string;
|
||||
body.setAttribute('data-whatinput', currentInput);
|
||||
|
||||
if (inputTypes.indexOf(currentInput) === -1) inputTypes.push(currentInput);
|
||||
}
|
||||
|
||||
function key(event) {
|
||||
return (event.keyCode) ? event.keyCode : event.which;
|
||||
}
|
||||
|
||||
function target(event) {
|
||||
return event.target || event.srcElement;
|
||||
}
|
||||
|
||||
function pointerType(event) {
|
||||
if (typeof event.pointerType === 'number') {
|
||||
return pointerMap[event.pointerType];
|
||||
} else {
|
||||
return (event.pointerType === 'pen') ? 'touch' : event.pointerType; // treat pen like touch
|
||||
}
|
||||
}
|
||||
|
||||
// keyboard logging
|
||||
function logKeys(eventKey) {
|
||||
if (activeKeys.indexOf(keyMap[eventKey]) === -1 && keyMap[eventKey]) activeKeys.push(keyMap[eventKey]);
|
||||
}
|
||||
|
||||
function unLogKeys(event) {
|
||||
var eventKey = key(event);
|
||||
var arrayPos = activeKeys.indexOf(keyMap[eventKey]);
|
||||
|
||||
if (arrayPos !== -1) activeKeys.splice(arrayPos, 1);
|
||||
}
|
||||
|
||||
function bindEvents() {
|
||||
body = document.body;
|
||||
|
||||
// pointer events (mouse, pen, touch)
|
||||
if (window.PointerEvent) {
|
||||
body.addEventListener('pointerdown', bufferedEvent);
|
||||
body.addEventListener('pointermove', bufferedEvent);
|
||||
} else if (window.MSPointerEvent) {
|
||||
body.addEventListener('MSPointerDown', bufferedEvent);
|
||||
body.addEventListener('MSPointerMove', bufferedEvent);
|
||||
} else {
|
||||
|
||||
// mouse events
|
||||
body.addEventListener('mousedown', bufferedEvent);
|
||||
body.addEventListener('mousemove', bufferedEvent);
|
||||
|
||||
// touch events
|
||||
if ('ontouchstart' in window) {
|
||||
body.addEventListener('touchstart', eventBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
// mouse wheel
|
||||
body.addEventListener(mouseWheel, bufferedEvent);
|
||||
|
||||
// keyboard events
|
||||
body.addEventListener('keydown', unBufferedEvent);
|
||||
body.addEventListener('keyup', unBufferedEvent);
|
||||
document.addEventListener('keyup', unLogKeys);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
---------------
|
||||
utilities
|
||||
---------------
|
||||
*/
|
||||
|
||||
// detect version of mouse wheel event to use
|
||||
// via https://developer.mozilla.org/en-US/docs/Web/Events/wheel
|
||||
function detectWheel() {
|
||||
return mouseWheel = 'onwheel' in document.createElement('div') ?
|
||||
'wheel' : // Modern browsers support "wheel"
|
||||
|
||||
document.onmousewheel !== undefined ?
|
||||
'mousewheel' : // Webkit and IE support at least "mousewheel"
|
||||
'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
---------------
|
||||
init
|
||||
|
||||
don't start script unless browser cuts the mustard,
|
||||
also passes if polyfills are used
|
||||
---------------
|
||||
*/
|
||||
|
||||
if (
|
||||
'addEventListener' in window &&
|
||||
Array.prototype.indexOf
|
||||
) {
|
||||
|
||||
// if the dom is already ready already (script was placed at bottom of <body>)
|
||||
if (document.body) {
|
||||
bindEvents();
|
||||
|
||||
// otherwise wait for the dom to load (script was placed in the <head>)
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', bindEvents);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
---------------
|
||||
api
|
||||
---------------
|
||||
*/
|
||||
|
||||
return {
|
||||
|
||||
// returns string: the current input type
|
||||
ask: function() { return currentInput; },
|
||||
|
||||
// returns array: currently pressed keys
|
||||
keys: function() { return activeKeys; },
|
||||
|
||||
// returns array: all the detected input types
|
||||
types: function() { return inputTypes; },
|
||||
|
||||
// accepts string: manually set the input type
|
||||
set: switchInput
|
||||
};
|
||||
|
||||
}());
|
Loading…
Add table
Add a link
Reference in a new issue