hammerjs-rails 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eda8b8f0cddf3bdeddfbacffae50d9bf8a8bc875
4
- data.tar.gz: 5eaf7db8bb193bc6fae659ddf5a78feff9dad17d
3
+ metadata.gz: 10755e389c9d153cf0f51a60cbcc45eb1f0449db
4
+ data.tar.gz: 4d4a37e7fa403777eab43211216d2defbfc33aa6
5
5
  SHA512:
6
- metadata.gz: 65e5c9b3745e19dffda7cf084f2be41d98916dc08a652c3f9ec4ea4310f32cfc538c4a10f9c5ce240565c340c1bb4cb4c4b850ff36f8fd1a4711a607d6b8537c
7
- data.tar.gz: 119fb64dcabe4e9e0c3d096e7b880e22ef6915dcd3926cb471330fefabe330bb8bd7f2b898b95bbc6d90f51bbacd98c7649f2123849e0268a430aae2f95c8552
6
+ metadata.gz: 3f75eb586431eba4676e7cfc776df0e092bcc8933cc04be757098c12e7aa39ef0107b3435601a1e247a7f53ee1df889a73372302ac597d76828e1a3adbecd38f
7
+ data.tar.gz: f373317e6aab9ca844a4c2f6562efe76425e5881483831654c1a145ea53d96fdbeb2ecb8534d1c2a4a452d1f9a5e0c673ef59eae0d0a0c0508f887433d976f73
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
- Gemfile.lock
1
+ Gemfile.lock
2
+ *.gem
data/README.md CHANGED
@@ -11,10 +11,10 @@ Add this line to your application's Gemfile:
11
11
  gem 'hammerjs-rails'
12
12
  ```
13
13
 
14
- Add one of the following directive to your Javascript manifest file (application.js):
14
+ Add update your Javascript manifest file (application.js):
15
15
 
16
16
  ```js
17
- //= require hammerjs
17
+ //= require hammer
18
18
  ```
19
19
 
20
20
  ## Contributing
@@ -1,5 +1,5 @@
1
1
  module Hammerjs
2
2
  module Rails
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -0,0 +1,81 @@
1
+ (function(Hammer) {
2
+ /**
3
+ * enable multitouch on the desktop by pressing the shiftkey
4
+ * the other touch goes in the opposite direction so the center keeps at its place
5
+ * it's recommended to enable Hammer.debug.showTouches for this one
6
+ */
7
+ Hammer.plugins.fakeMultitouch = function() {
8
+ // keeps the start position to keep it centered
9
+ var start_pos = false;
10
+
11
+ // test for msMaxTouchPoints to enable this for IE10 with only one pointer (a mouse in all/most cases)
12
+ Hammer.HAS_POINTEREVENTS = navigator.msPointerEnabled &&
13
+ navigator.msMaxTouchPoints && navigator.msMaxTouchPoints >= 1;
14
+
15
+ /**
16
+ * overwrites Hammer.event.getTouchList.
17
+ * @param {Event} ev
18
+ * @param TOUCHTYPE type
19
+ * @return {Array} Touches
20
+ */
21
+ Hammer.event.getTouchList = function(ev, eventType) {
22
+ // get the fake pointerEvent touchlist
23
+ if(Hammer.HAS_POINTEREVENTS) {
24
+ return Hammer.PointerEvent.getTouchList();
25
+ }
26
+ // get the touchlist
27
+ else if(ev.touches) {
28
+ return ev.touches;
29
+ }
30
+
31
+ // reset on start of a new touch
32
+ if(eventType == Hammer.EVENT_START) {
33
+ start_pos = false;
34
+ }
35
+
36
+ // when the shift key is pressed, multitouch is possible on desktop
37
+ // why shift? because ctrl and alt are taken by osx and linux
38
+ if(ev.shiftKey) {
39
+ // on touchstart we store the position of the mouse for multitouch
40
+ if(!start_pos) {
41
+ start_pos = {
42
+ pageX: ev.pageX,
43
+ pageY: ev.pageY
44
+ };
45
+ }
46
+
47
+ var distance_x = start_pos.pageX - ev.pageX;
48
+ var distance_y = start_pos.pageY - ev.pageY;
49
+
50
+ // fake second touch in the opposite direction
51
+ return [
52
+ {
53
+ identifier: 1,
54
+ pageX : start_pos.pageX - distance_x - 50,
55
+ pageY : start_pos.pageY - distance_y - -50,
56
+ target : ev.target
57
+ },
58
+ {
59
+ identifier: 2,
60
+ pageX : start_pos.pageX + distance_x - -50,
61
+ pageY : start_pos.pageY + distance_y - 50,
62
+ target : ev.target
63
+ }
64
+ ];
65
+ }
66
+ // normal single touch
67
+ else {
68
+ start_pos = false;
69
+ return [
70
+ {
71
+ identifier: 1,
72
+ pageX : ev.pageX,
73
+ pageY : ev.pageY,
74
+ target : ev.target
75
+ }
76
+ ];
77
+ }
78
+ };
79
+ };
80
+
81
+ })(window.Hammer);
@@ -0,0 +1,70 @@
1
+ (function(Hammer) {
2
+ /**
3
+ * ShowTouches gesture
4
+ * show all touch on the screen by placing elements at there pageX and pageY
5
+ * @param {Boolean} [force]
6
+ */
7
+ Hammer.plugins.showTouches = function(force) {
8
+ // the circles under your fingers
9
+ var template_style = 'position:absolute;z-index:9999;left:0;top:0;height:14px;width:14px;border:solid 2px #777;' +
10
+ 'background:rgba(255,255,255,.7);border-radius:20px;pointer-events:none;' +
11
+ 'margin-top:-9px;margin-left:-9px;';
12
+
13
+ // elements by identifier
14
+ var touch_elements = {};
15
+ var touches_index = {};
16
+
17
+ /**
18
+ * remove unused touch elements
19
+ */
20
+ function removeUnusedElements() {
21
+ // remove unused touch elements
22
+ for(var key in touch_elements) {
23
+ if(touch_elements.hasOwnProperty(key) && !touches_index[key]) {
24
+ document.body.removeChild(touch_elements[key]);
25
+ delete touch_elements[key];
26
+ }
27
+ }
28
+ }
29
+
30
+ Hammer.detection.register({
31
+ name : 'show_touches',
32
+ priority: 0,
33
+ handler : function(ev, inst) {
34
+ touches_index = {};
35
+
36
+ // clear old elements when not using a mouse
37
+ if(ev.pointerType != Hammer.POINTER_MOUSE && !force) {
38
+ removeUnusedElements();
39
+ return;
40
+ }
41
+
42
+ // place touches by index
43
+ for(var t = 0, total_touches = ev.touches.length; t < total_touches; t++) {
44
+ var touch = ev.touches[t];
45
+
46
+ var id = touch.identifier;
47
+ touches_index[id] = touch;
48
+
49
+ // new touch element
50
+ if(!touch_elements[id]) {
51
+ // create new element and attach base styles
52
+ var template = document.createElement('div');
53
+ template.setAttribute('style', template_style);
54
+
55
+ // append element to body
56
+ document.body.appendChild(template);
57
+
58
+ touch_elements[id] = template;
59
+ }
60
+
61
+ // Paul Irish says that translate is faster then left/top
62
+ touch_elements[id].style.left = touch.pageX + 'px';
63
+ touch_elements[id].style.top = touch.pageY + 'px';
64
+ }
65
+
66
+ removeUnusedElements();
67
+ }
68
+ });
69
+ };
70
+ })(window.Hammer);
@@ -0,0 +1,115 @@
1
+ /*! jQuery plugin for Hammer.JS - v1.0.0 - 2013-11-03
2
+ * http://eightmedia.github.com/hammer.js
3
+ *
4
+ * Copyright (c) 2013 Jorik Tangelder <j.tangelder@gmail.com>;
5
+ * Licensed under the MIT license */
6
+
7
+ (function(window, undefined) {
8
+ 'use strict';
9
+
10
+ function setup(Hammer, $) {
11
+ /**
12
+ * bind dom events
13
+ * this overwrites addEventListener
14
+ * @param {HTMLElement} element
15
+ * @param {String} eventTypes
16
+ * @param {Function} handler
17
+ */
18
+ Hammer.event.bindDom = function(element, eventTypes, handler) {
19
+ $(element).on(eventTypes, function(ev) {
20
+ var data = ev.originalEvent || ev;
21
+
22
+ if(data.pageX === undefined) {
23
+ data.pageX = ev.pageX;
24
+ data.pageY = ev.pageY;
25
+ }
26
+
27
+ if(!data.target) {
28
+ data.target = ev.target;
29
+ }
30
+
31
+ if(data.which === undefined) {
32
+ data.which = data.button;
33
+ }
34
+
35
+ if(!data.preventDefault) {
36
+ data.preventDefault = ev.preventDefault;
37
+ }
38
+
39
+ if(!data.stopPropagation) {
40
+ data.stopPropagation = ev.stopPropagation;
41
+ }
42
+
43
+ handler.call(this, data);
44
+ });
45
+ };
46
+
47
+ /**
48
+ * the methods are called by the instance, but with the jquery plugin
49
+ * we use the jquery event methods instead.
50
+ * @this {Hammer.Instance}
51
+ * @return {jQuery}
52
+ */
53
+ Hammer.Instance.prototype.on = function(types, handler) {
54
+ return $(this.element).on(types, handler);
55
+ };
56
+ Hammer.Instance.prototype.off = function(types, handler) {
57
+ return $(this.element).off(types, handler);
58
+ };
59
+
60
+
61
+ /**
62
+ * trigger events
63
+ * this is called by the gestures to trigger an event like 'tap'
64
+ * @this {Hammer.Instance}
65
+ * @param {String} gesture
66
+ * @param {Object} eventData
67
+ * @return {jQuery}
68
+ */
69
+ Hammer.Instance.prototype.trigger = function(gesture, eventData) {
70
+ var el = $(this.element);
71
+ if(el.has(eventData.target).length) {
72
+ el = $(eventData.target);
73
+ }
74
+
75
+ return el.trigger({
76
+ type : gesture,
77
+ gesture: eventData
78
+ });
79
+ };
80
+
81
+
82
+ /**
83
+ * jQuery plugin
84
+ * create instance of Hammer and watch for gestures,
85
+ * and when called again you can change the options
86
+ * @param {Object} [options={}]
87
+ * @return {jQuery}
88
+ */
89
+ $.fn.hammer = function(options) {
90
+ return this.each(function() {
91
+ var el = $(this);
92
+ var inst = el.data('hammer');
93
+ // start new hammer instance
94
+ if(!inst) {
95
+ el.data('hammer', new Hammer(this, options || {}));
96
+ }
97
+ // change the options
98
+ else if(inst && options) {
99
+ Hammer.utils.extend(inst.options, options);
100
+ }
101
+ });
102
+ };
103
+ }
104
+
105
+ // Based off Lo-Dash's excellent UMD wrapper (slightly modified) - https://github.com/bestiejs/lodash/blob/master/lodash.js#L5515-L5543
106
+ // some AMD build optimizers, like r.js, check for specific condition patterns like the following:
107
+ if(typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
108
+ // define as an anonymous module
109
+ define(['hammer', 'jquery'], setup);
110
+
111
+ }
112
+ else {
113
+ setup(window.Hammer, window.jQuery || window.Zepto);
114
+ }
115
+ })(this);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hammerjs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vincent Pochet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-07 00:00:00.000000000 Z
11
+ date: 2013-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,7 +52,10 @@ files:
52
52
  - hammerjs-rails.gemspec
53
53
  - lib/hammerjs-rails.rb
54
54
  - lib/hammerjs/rails/version.rb
55
+ - vendor/assets/javascripts/hammer.fakemultitouch.js
55
56
  - vendor/assets/javascripts/hammer.js
57
+ - vendor/assets/javascripts/hammer.showtouches.js
58
+ - vendor/assets/javascripts/jquery.hammer.js
56
59
  homepage: https://github.com/vincent-pochet/hammerjs-rails
57
60
  licenses:
58
61
  - MIT
@@ -73,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
76
  version: '0'
74
77
  requirements: []
75
78
  rubyforge_project:
76
- rubygems_version: 2.0.3
79
+ rubygems_version: 2.1.11
77
80
  signing_key:
78
81
  specification_version: 4
79
82
  summary: hammerjs packaged for Rails assets pipeline