polymer-paper-elements-rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +51 -0
  3. data/Rakefile +1 -0
  4. data/app/assets/components/iron-a11y-announcer/iron-a11y-announcer.html +125 -0
  5. data/app/assets/components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html +418 -0
  6. data/app/assets/components/iron-autogrow-textarea/hero.svg +33 -0
  7. data/app/assets/components/iron-autogrow-textarea/iron-autogrow-textarea.html +263 -0
  8. data/app/assets/components/iron-behaviors/iron-button-state.html +195 -0
  9. data/app/assets/components/iron-behaviors/iron-control-state.html +102 -0
  10. data/app/assets/components/iron-fit-behavior/iron-fit-behavior.html +230 -0
  11. data/app/assets/components/iron-flex-layout/classes/iron-flex-layout.html +307 -0
  12. data/app/assets/components/iron-flex-layout/classes/iron-shadow-flex-layout.html +302 -0
  13. data/app/assets/components/iron-flex-layout/iron-flex-layout.html +313 -0
  14. data/app/assets/components/iron-form-element-behavior/iron-form-element-behavior.html +50 -0
  15. data/app/assets/components/iron-icon/hero.svg +19 -0
  16. data/app/assets/components/iron-icon/iron-icon.html +187 -0
  17. data/app/assets/components/iron-icons/av-icons.html +73 -0
  18. data/app/assets/components/iron-icons/communication-icons.html +59 -0
  19. data/app/assets/components/iron-icons/device-icons.html +94 -0
  20. data/app/assets/components/iron-icons/editor-icons.html +70 -0
  21. data/app/assets/components/iron-icons/hardware-icons.html +61 -0
  22. data/app/assets/components/iron-icons/hero.svg +35 -0
  23. data/app/assets/components/iron-icons/image-icons.html +164 -0
  24. data/app/assets/components/iron-icons/iron-icons.html +303 -0
  25. data/app/assets/components/iron-icons/maps-icons.html +71 -0
  26. data/app/assets/components/iron-icons/notification-icons.html +62 -0
  27. data/app/assets/components/iron-icons/social-icons.html +40 -0
  28. data/app/assets/components/iron-iconset-svg/iron-iconset-svg.html +191 -0
  29. data/app/assets/components/iron-input/hero.svg +19 -0
  30. data/app/assets/components/iron-input/iron-input.html +235 -0
  31. data/app/assets/components/iron-media-query/hero.svg +29 -0
  32. data/app/assets/components/iron-media-query/iron-media-query.html +84 -0
  33. data/app/assets/components/iron-menu-behavior/iron-menu-behavior.html +214 -0
  34. data/app/assets/components/iron-menu-behavior/iron-menubar-behavior.html +65 -0
  35. data/app/assets/components/iron-meta/hero.svg +33 -0
  36. data/app/assets/components/iron-meta/iron-meta.html +352 -0
  37. data/app/assets/components/iron-overlay-behavior/iron-overlay-backdrop.html +132 -0
  38. data/app/assets/components/iron-overlay-behavior/iron-overlay-behavior.html +432 -0
  39. data/app/assets/components/iron-overlay-behavior/iron-overlay-manager.html +107 -0
  40. data/app/assets/components/iron-range-behavior/iron-range-behavior.html +101 -0
  41. data/app/assets/components/iron-resizable-behavior/iron-resizable-behavior.html +139 -0
  42. data/app/assets/components/iron-selector/iron-multi-selectable.html +120 -0
  43. data/app/assets/components/iron-selector/iron-selectable.html +307 -0
  44. data/app/assets/components/iron-selector/iron-selection.html +115 -0
  45. data/app/assets/components/iron-selector/iron-selector.html +71 -0
  46. data/app/assets/components/iron-validatable-behavior/iron-validatable-behavior.html +100 -0
  47. data/app/assets/components/neon-animation/animations/cascaded-animation.html +84 -0
  48. data/app/assets/components/neon-animation/animations/fade-in-animation.html +49 -0
  49. data/app/assets/components/neon-animation/animations/fade-out-animation.html +49 -0
  50. data/app/assets/components/neon-animation/animations/hero-animation.html +83 -0
  51. data/app/assets/components/neon-animation/animations/opaque-animation.html +46 -0
  52. data/app/assets/components/neon-animation/animations/ripple-animation.html +92 -0
  53. data/app/assets/components/neon-animation/animations/scale-down-animation.html +65 -0
  54. data/app/assets/components/neon-animation/animations/scale-up-animation.html +58 -0
  55. data/app/assets/components/neon-animation/animations/slide-down-animation.html +59 -0
  56. data/app/assets/components/neon-animation/animations/slide-from-left-animation.html +60 -0
  57. data/app/assets/components/neon-animation/animations/slide-from-right-animation.html +60 -0
  58. data/app/assets/components/neon-animation/animations/slide-left-animation.html +59 -0
  59. data/app/assets/components/neon-animation/animations/slide-right-animation.html +59 -0
  60. data/app/assets/components/neon-animation/animations/slide-up-animation.html +59 -0
  61. data/app/assets/components/neon-animation/animations/transform-animation.html +61 -0
  62. data/app/assets/components/neon-animation/guides/neon-animation.md +313 -0
  63. data/app/assets/components/neon-animation/neon-animatable-behavior.html +156 -0
  64. data/app/assets/components/neon-animation/neon-animatable.html +54 -0
  65. data/app/assets/components/neon-animation/neon-animated-pages.html +208 -0
  66. data/app/assets/components/neon-animation/neon-animation-behavior.html +88 -0
  67. data/app/assets/components/neon-animation/neon-animation-runner-behavior.html +110 -0
  68. data/app/assets/components/neon-animation/neon-animation.html +17 -0
  69. data/app/assets/components/neon-animation/neon-animations.html +25 -0
  70. data/app/assets/components/neon-animation/neon-shared-element-animatable-behavior.html +37 -0
  71. data/app/assets/components/neon-animation/neon-shared-element-animation-behavior.html +66 -0
  72. data/app/assets/components/neon-animation/web-animations.html +11 -0
  73. data/app/assets/components/paper-behaviors/paper-button-behavior.html +55 -0
  74. data/app/assets/components/paper-behaviors/paper-inky-focus-behavior.html +44 -0
  75. data/app/assets/components/paper-button/paper-button.html +177 -0
  76. data/app/assets/components/paper-checkbox/metadata.html +17 -0
  77. data/app/assets/components/paper-checkbox/paper-checkbox.css +149 -0
  78. data/app/assets/components/paper-checkbox/paper-checkbox.html +163 -0
  79. data/app/assets/components/paper-dialog-behavior/hero.svg +51 -0
  80. data/app/assets/components/paper-dialog-behavior/paper-dialog-behavior.html +236 -0
  81. data/app/assets/components/paper-dialog-behavior/paper-dialog-common.css +58 -0
  82. data/app/assets/components/paper-dialog-scrollable/hero.svg +69 -0
  83. data/app/assets/components/paper-dialog-scrollable/paper-dialog-scrollable.html +150 -0
  84. data/app/assets/components/paper-dialog/hero.svg +58 -0
  85. data/app/assets/components/paper-dialog/paper-dialog.html +122 -0
  86. data/app/assets/components/paper-drawer-panel/hero.svg +21 -0
  87. data/app/assets/components/paper-drawer-panel/paper-drawer-panel.css +142 -0
  88. data/app/assets/components/paper-drawer-panel/paper-drawer-panel.html +585 -0
  89. data/app/assets/components/paper-fab/paper-fab.html +159 -0
  90. data/app/assets/components/paper-header-panel/hero.svg +38 -0
  91. data/app/assets/components/paper-header-panel/paper-header-panel.html +496 -0
  92. data/app/assets/components/paper-icon-button/paper-icon-button.html +141 -0
  93. data/app/assets/components/paper-input/all-imports.html +12 -0
  94. data/app/assets/components/paper-input/hero.svg +19 -0
  95. data/app/assets/components/paper-input/paper-input-addon-behavior.html +43 -0
  96. data/app/assets/components/paper-input/paper-input-behavior.html +293 -0
  97. data/app/assets/components/paper-input/paper-input-char-counter.html +95 -0
  98. data/app/assets/components/paper-input/paper-input-container.html +495 -0
  99. data/app/assets/components/paper-input/paper-input-error.html +99 -0
  100. data/app/assets/components/paper-input/paper-input.html +126 -0
  101. data/app/assets/components/paper-input/paper-textarea.html +100 -0
  102. data/app/assets/components/paper-item/all-imports.html +13 -0
  103. data/app/assets/components/paper-item/paper-icon-item.html +86 -0
  104. data/app/assets/components/paper-item/paper-item-body.html +93 -0
  105. data/app/assets/components/paper-item/paper-item-shared.css +19 -0
  106. data/app/assets/components/paper-item/paper-item.html +95 -0
  107. data/app/assets/components/paper-material/paper-material.html +98 -0
  108. data/app/assets/components/paper-menu/hero.svg +35 -0
  109. data/app/assets/components/paper-menu/paper-menu.html +133 -0
  110. data/app/assets/components/paper-progress/hero.svg +21 -0
  111. data/app/assets/components/paper-progress/paper-progress.html +199 -0
  112. data/app/assets/components/paper-radio-button/hero.svg +22 -0
  113. data/app/assets/components/paper-radio-button/paper-radio-button.css +109 -0
  114. data/app/assets/components/paper-radio-button/paper-radio-button.html +148 -0
  115. data/app/assets/components/paper-radio-group/hero.svg +25 -0
  116. data/app/assets/components/paper-radio-group/paper-radio-group.html +186 -0
  117. data/app/assets/components/paper-ripple/hero.svg +30 -0
  118. data/app/assets/components/paper-ripple/paper-ripple.html +714 -0
  119. data/app/assets/components/paper-scroll-header-panel/hero.svg +41 -0
  120. data/app/assets/components/paper-scroll-header-panel/paper-scroll-header-panel.html +455 -0
  121. data/app/assets/components/paper-slider/hero.svg +20 -0
  122. data/app/assets/components/paper-slider/paper-slider.css +252 -0
  123. data/app/assets/components/paper-slider/paper-slider.html +449 -0
  124. data/app/assets/components/paper-spinner/hero.svg +27 -0
  125. data/app/assets/components/paper-spinner/paper-spinner.css +325 -0
  126. data/app/assets/components/paper-spinner/paper-spinner.html +222 -0
  127. data/app/assets/components/paper-styles/classes/global.html +96 -0
  128. data/app/assets/components/paper-styles/classes/shadow-layout.html +302 -0
  129. data/app/assets/components/paper-styles/classes/shadow.html +39 -0
  130. data/app/assets/components/paper-styles/classes/typography.html +171 -0
  131. data/app/assets/components/paper-styles/color.html +333 -0
  132. data/app/assets/components/paper-styles/default-theme.html +39 -0
  133. data/app/assets/components/paper-styles/paper-styles-classes.html +14 -0
  134. data/app/assets/components/paper-styles/paper-styles.html +17 -0
  135. data/app/assets/components/paper-styles/shadow.html +61 -0
  136. data/app/assets/components/paper-styles/typography.html +240 -0
  137. data/app/assets/components/paper-tabs/hero.svg +23 -0
  138. data/app/assets/components/paper-tabs/paper-tab.html +158 -0
  139. data/app/assets/components/paper-tabs/paper-tabs-icons.html +18 -0
  140. data/app/assets/components/paper-tabs/paper-tabs.html +483 -0
  141. data/app/assets/components/paper-toast/hero.svg +20 -0
  142. data/app/assets/components/paper-toast/paper-toast.html +164 -0
  143. data/app/assets/components/paper-toggle-button/hero.svg +22 -0
  144. data/app/assets/components/paper-toggle-button/paper-toggle-button.css +108 -0
  145. data/app/assets/components/paper-toggle-button/paper-toggle-button.html +183 -0
  146. data/app/assets/components/paper-toolbar/paper-toolbar.html +375 -0
  147. data/app/assets/components/polymer-gestures/Gruntfile.js +60 -0
  148. data/app/assets/components/polymer-gestures/banner.txt +9 -0
  149. data/app/assets/components/polymer-gestures/build.json +17 -0
  150. data/app/assets/components/polymer-gestures/conf/karma.conf.js +39 -0
  151. data/app/assets/components/polymer-gestures/package.json +20 -0
  152. data/app/assets/components/polymer-gestures/polymer-gestures.html +21 -0
  153. data/app/assets/components/polymer-gestures/polymer-gestures.js +46 -0
  154. data/app/assets/components/polymer-gestures/src/dispatcher.js +474 -0
  155. data/app/assets/components/polymer-gestures/src/eventFactory.js +127 -0
  156. data/app/assets/components/polymer-gestures/src/hold.js +129 -0
  157. data/app/assets/components/polymer-gestures/src/mouse.js +135 -0
  158. data/app/assets/components/polymer-gestures/src/ms.js +80 -0
  159. data/app/assets/components/polymer-gestures/src/pinch.js +186 -0
  160. data/app/assets/components/polymer-gestures/src/platform-events.js +39 -0
  161. data/app/assets/components/polymer-gestures/src/pointer.js +68 -0
  162. data/app/assets/components/polymer-gestures/src/pointermap.js +67 -0
  163. data/app/assets/components/polymer-gestures/src/scope.js +10 -0
  164. data/app/assets/components/polymer-gestures/src/tap.js +103 -0
  165. data/app/assets/components/polymer-gestures/src/targetfind.js +244 -0
  166. data/app/assets/components/polymer-gestures/src/touch-action.js +60 -0
  167. data/app/assets/components/polymer-gestures/src/touch.js +341 -0
  168. data/app/assets/components/polymer-gestures/src/track.js +230 -0
  169. data/app/assets/components/web-animations-js/web-animations-next-lite.min.js +17 -0
  170. data/app/assets/components/web-animations-js/web-animations-next.min.js +17 -0
  171. data/app/assets/components/web-animations-js/web-animations.min.js +17 -0
  172. data/app/assets/components/webcomponentsjs/CustomElements.js +956 -0
  173. data/app/assets/components/webcomponentsjs/CustomElements.min.js +11 -0
  174. data/app/assets/components/webcomponentsjs/HTMLImports.js +1078 -0
  175. data/app/assets/components/webcomponentsjs/HTMLImports.min.js +11 -0
  176. data/app/assets/components/webcomponentsjs/MutationObserver.js +344 -0
  177. data/app/assets/components/webcomponentsjs/MutationObserver.min.js +11 -0
  178. data/app/assets/components/webcomponentsjs/ShadowDOM.js +4414 -0
  179. data/app/assets/components/webcomponentsjs/ShadowDOM.min.js +15 -0
  180. data/app/assets/components/webcomponentsjs/package.json +31 -0
  181. data/app/assets/components/webcomponentsjs/webcomponents-lite.js +2300 -0
  182. data/app/assets/components/webcomponentsjs/webcomponents-lite.min.js +13 -0
  183. data/app/assets/components/webcomponentsjs/webcomponents.js +7112 -0
  184. data/app/assets/components/webcomponentsjs/webcomponents.min.js +15 -0
  185. data/lib/polymer-paper-elements-rails.rb +2 -0
  186. data/lib/polymer-paper-elements-rails/engine.rb +4 -0
  187. data/lib/polymer-paper-elements-rails/version.rb +3 -0
  188. metadata +272 -0
@@ -0,0 +1,39 @@
1
+ /*
2
+ * @license
3
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
4
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
5
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
6
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
7
+ * Code distributed by Google as part of the polymer project is also
8
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
9
+ */
10
+
11
+ module.exports = function(karma) {
12
+ var common = require('../../tools/test/karma-common.conf.js');
13
+ karma.set(common.mixin_common_opts(karma, {
14
+ // base path, that will be used to resolve files and exclude
15
+ basePath: '../../',
16
+
17
+ // list of files / patterns to load in the browser
18
+ files: [
19
+ 'polymer-gestures/node_modules/chai/chai.js',
20
+ 'polymer-gestures/src/scope.js',
21
+ 'polymer-gestures/src/targetfind.js',
22
+ 'polymer-gestures/src/touch-action.js',
23
+ 'polymer-gestures/src/eventFactory.js',
24
+ 'polymer-gestures/src/pointermap.js',
25
+ 'polymer-gestures/src/dispatcher.js',
26
+ 'polymer-gestures/src/mouse.js',
27
+ 'polymer-gestures/src/touch.js',
28
+ 'polymer-gestures/src/ms.js',
29
+ 'polymer-gestures/src/pointer.js',
30
+ 'polymer-gestures/src/platform-events.js',
31
+ 'polymer-gestures/src/track.js',
32
+ 'polymer-gestures/src/hold.js',
33
+ 'polymer-gestures/src/tap.js',
34
+ 'polymer-gestures/test/js/setup.js',
35
+ 'polymer-gestures/test/js/fake.js',
36
+ 'polymer-gestures/test/js/*.js'
37
+ ]
38
+ }));
39
+ };
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "polymergestures",
3
+ "main": "Gruntfile.js",
4
+ "devDependencies": {
5
+ "mocha": "*",
6
+ "chai": "^1.9.1",
7
+ "grunt": "^0.4.4",
8
+ "grunt-contrib-concat": "^0.4.0",
9
+ "grunt-contrib-uglify": "^0.4.0",
10
+ "karma": "~0.12.0",
11
+ "karma-mocha": "*",
12
+ "karma-firefox-launcher": "*",
13
+ "karma-ie-launcher": "*",
14
+ "karma-script-launcher": "*",
15
+ "karma-crbot-reporter": "*",
16
+ "grunt-karma": "*",
17
+ "karma-safari-launcher": "~0.1.1",
18
+ "karma-firefox-launcher": "^0.1.3"
19
+ }
20
+ }
@@ -0,0 +1,21 @@
1
+ <!-- Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
2
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
3
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
4
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
5
+ Code distributed by Google as part of the polymer project is also
6
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt -->
7
+
8
+ <script src="src/scope.js"></script>
9
+ <script src="src/targetfind.js"></script>
10
+ <script src="src/touch-action.js"></script>
11
+ <script src="src/eventFactory.js"></script>
12
+ <script src="src/pointermap.js"></script>
13
+ <script src="src/dispatcher.js"></script>
14
+ <script src="src/mouse.js"></script>
15
+ <script src="src/touch.js"></script>
16
+ <script src="src/ms.js"></script>
17
+ <script src="src/pointer.js"></script>
18
+ <script src="src/platform-events.js"></script>
19
+ <script src="src/track.js"></script>
20
+ <script src="src/hold.js"></script>
21
+ <script src="src/tap.js"></script>
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
3
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
4
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
5
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
6
+ * Code distributed by Google as part of the polymer project is also
7
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
8
+ */
9
+ (function() {
10
+ var thisFile = 'polymer-gestures.js';
11
+ var scopeName = 'PolymerGestures';
12
+ var modules = [
13
+ 'src/scope.js',
14
+ 'src/targetfind.js',
15
+ 'src/touch-action.js',
16
+ 'src/eventFactory.js',
17
+ 'src/pointermap.js',
18
+ 'src/dispatcher.js',
19
+ 'src/mouse.js',
20
+ 'src/touch.js',
21
+ 'src/ms.js',
22
+ 'src/pointer.js',
23
+ 'src/platform-events.js',
24
+ 'src/track.js',
25
+ 'src/hold.js',
26
+ 'src/tap.js',
27
+ 'src/pinch.js'
28
+ ];
29
+
30
+ window[scopeName] = {
31
+ entryPointName: thisFile,
32
+ modules: modules
33
+ };
34
+
35
+ var script = document.currentScript || document.querySelector('script[src $= "' + thisFile + '"]');
36
+ var src = script.attributes.src.value;
37
+ var basePath = src.slice(0, src.indexOf(thisFile));
38
+
39
+ if (!window.PolymerLoader) {
40
+ var path = basePath + '../tools/loader/loader.js';
41
+ document.write('<script src="' + path + '"></script>');
42
+ }
43
+
44
+ document.write('<script>PolymerLoader.load("' + scopeName + '")</script>');
45
+
46
+ })();
@@ -0,0 +1,474 @@
1
+ /*
2
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
3
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
4
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
5
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
6
+ * Code distributed by Google as part of the polymer project is also
7
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
8
+ */
9
+
10
+ (function(scope) {
11
+ var CLONE_PROPS = [
12
+ // MouseEvent
13
+ 'bubbles',
14
+ 'cancelable',
15
+ 'view',
16
+ 'detail',
17
+ 'screenX',
18
+ 'screenY',
19
+ 'clientX',
20
+ 'clientY',
21
+ 'ctrlKey',
22
+ 'altKey',
23
+ 'shiftKey',
24
+ 'metaKey',
25
+ 'button',
26
+ 'relatedTarget',
27
+ // DOM Level 3
28
+ 'buttons',
29
+ // PointerEvent
30
+ 'pointerId',
31
+ 'width',
32
+ 'height',
33
+ 'pressure',
34
+ 'tiltX',
35
+ 'tiltY',
36
+ 'pointerType',
37
+ 'hwTimestamp',
38
+ 'isPrimary',
39
+ // event instance
40
+ 'type',
41
+ 'target',
42
+ 'currentTarget',
43
+ 'which',
44
+ 'pageX',
45
+ 'pageY',
46
+ 'timeStamp',
47
+ // gesture addons
48
+ 'preventTap',
49
+ 'tapPrevented',
50
+ '_source'
51
+ ];
52
+
53
+ var CLONE_DEFAULTS = [
54
+ // MouseEvent
55
+ false,
56
+ false,
57
+ null,
58
+ null,
59
+ 0,
60
+ 0,
61
+ 0,
62
+ 0,
63
+ false,
64
+ false,
65
+ false,
66
+ false,
67
+ 0,
68
+ null,
69
+ // DOM Level 3
70
+ 0,
71
+ // PointerEvent
72
+ 0,
73
+ 0,
74
+ 0,
75
+ 0,
76
+ 0,
77
+ 0,
78
+ '',
79
+ 0,
80
+ false,
81
+ // event instance
82
+ '',
83
+ null,
84
+ null,
85
+ 0,
86
+ 0,
87
+ 0,
88
+ 0,
89
+ function(){},
90
+ false
91
+ ];
92
+
93
+ var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');
94
+
95
+ var eventFactory = scope.eventFactory;
96
+
97
+ // set of recognizers to run for the currently handled event
98
+ var currentGestures;
99
+
100
+ /**
101
+ * This module is for normalizing events. Mouse and Touch events will be
102
+ * collected here, and fire PointerEvents that have the same semantics, no
103
+ * matter the source.
104
+ * Events fired:
105
+ * - pointerdown: a pointing is added
106
+ * - pointerup: a pointer is removed
107
+ * - pointermove: a pointer is moved
108
+ * - pointerover: a pointer crosses into an element
109
+ * - pointerout: a pointer leaves an element
110
+ * - pointercancel: a pointer will no longer generate events
111
+ */
112
+ var dispatcher = {
113
+ IS_IOS: false,
114
+ pointermap: new scope.PointerMap(),
115
+ requiredGestures: new scope.PointerMap(),
116
+ eventMap: Object.create(null),
117
+ // Scope objects for native events.
118
+ // This exists for ease of testing.
119
+ eventSources: Object.create(null),
120
+ eventSourceList: [],
121
+ gestures: [],
122
+ // map gesture event -> {listeners: int, index: gestures[int]}
123
+ dependencyMap: {
124
+ // make sure down and up are in the map to trigger "register"
125
+ down: {listeners: 0, index: -1},
126
+ up: {listeners: 0, index: -1}
127
+ },
128
+ gestureQueue: [],
129
+ /**
130
+ * Add a new event source that will generate pointer events.
131
+ *
132
+ * `inSource` must contain an array of event names named `events`, and
133
+ * functions with the names specified in the `events` array.
134
+ * @param {string} name A name for the event source
135
+ * @param {Object} source A new source of platform events.
136
+ */
137
+ registerSource: function(name, source) {
138
+ var s = source;
139
+ var newEvents = s.events;
140
+ if (newEvents) {
141
+ newEvents.forEach(function(e) {
142
+ if (s[e]) {
143
+ this.eventMap[e] = s[e].bind(s);
144
+ }
145
+ }, this);
146
+ this.eventSources[name] = s;
147
+ this.eventSourceList.push(s);
148
+ }
149
+ },
150
+ registerGesture: function(name, source) {
151
+ var obj = Object.create(null);
152
+ obj.listeners = 0;
153
+ obj.index = this.gestures.length;
154
+ for (var i = 0, g; i < source.exposes.length; i++) {
155
+ g = source.exposes[i].toLowerCase();
156
+ this.dependencyMap[g] = obj;
157
+ }
158
+ this.gestures.push(source);
159
+ },
160
+ register: function(element, initial) {
161
+ var l = this.eventSourceList.length;
162
+ for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {
163
+ // call eventsource register
164
+ es.register.call(es, element, initial);
165
+ }
166
+ },
167
+ unregister: function(element) {
168
+ var l = this.eventSourceList.length;
169
+ for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {
170
+ // call eventsource register
171
+ es.unregister.call(es, element);
172
+ }
173
+ },
174
+ // EVENTS
175
+ down: function(inEvent) {
176
+ this.requiredGestures.set(inEvent.pointerId, currentGestures);
177
+ this.fireEvent('down', inEvent);
178
+ },
179
+ move: function(inEvent) {
180
+ // pipe move events into gesture queue directly
181
+ inEvent.type = 'move';
182
+ this.fillGestureQueue(inEvent);
183
+ },
184
+ up: function(inEvent) {
185
+ this.fireEvent('up', inEvent);
186
+ this.requiredGestures.delete(inEvent.pointerId);
187
+ },
188
+ cancel: function(inEvent) {
189
+ inEvent.tapPrevented = true;
190
+ this.fireEvent('up', inEvent);
191
+ this.requiredGestures.delete(inEvent.pointerId);
192
+ },
193
+ addGestureDependency: function(node, currentGestures) {
194
+ var gesturesWanted = node._pgEvents;
195
+ if (gesturesWanted && currentGestures) {
196
+ var gk = Object.keys(gesturesWanted);
197
+ for (var i = 0, r, ri, g; i < gk.length; i++) {
198
+ // gesture
199
+ g = gk[i];
200
+ if (gesturesWanted[g] > 0) {
201
+ // lookup gesture recognizer
202
+ r = this.dependencyMap[g];
203
+ // recognizer index
204
+ ri = r ? r.index : -1;
205
+ currentGestures[ri] = true;
206
+ }
207
+ }
208
+ }
209
+ },
210
+ // LISTENER LOGIC
211
+ eventHandler: function(inEvent) {
212
+ // This is used to prevent multiple dispatch of events from
213
+ // platform events. This can happen when two elements in different scopes
214
+ // are set up to create pointer events, which is relevant to Shadow DOM.
215
+
216
+ var type = inEvent.type;
217
+
218
+ // only generate the list of desired events on "down"
219
+ if (type === 'touchstart' || type === 'mousedown' || type === 'pointerdown' || type === 'MSPointerDown') {
220
+ if (!inEvent._handledByPG) {
221
+ currentGestures = {};
222
+ }
223
+
224
+ // in IOS mode, there is only a listener on the document, so this is not re-entrant
225
+ if (this.IS_IOS) {
226
+ var ev = inEvent;
227
+ if (type === 'touchstart') {
228
+ var ct = inEvent.changedTouches[0];
229
+ // set up a fake event to give to the path builder
230
+ ev = {target: inEvent.target, clientX: ct.clientX, clientY: ct.clientY, path: inEvent.path};
231
+ }
232
+ // use event path if available, otherwise build a path from target finding
233
+ var nodes = inEvent.path || scope.targetFinding.path(ev);
234
+ for (var i = 0, n; i < nodes.length; i++) {
235
+ n = nodes[i];
236
+ this.addGestureDependency(n, currentGestures);
237
+ }
238
+ } else {
239
+ this.addGestureDependency(inEvent.currentTarget, currentGestures);
240
+ }
241
+ }
242
+
243
+ if (inEvent._handledByPG) {
244
+ return;
245
+ }
246
+ var fn = this.eventMap && this.eventMap[type];
247
+ if (fn) {
248
+ fn(inEvent);
249
+ }
250
+ inEvent._handledByPG = true;
251
+ },
252
+ // set up event listeners
253
+ listen: function(target, events) {
254
+ for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {
255
+ this.addEvent(target, e);
256
+ }
257
+ },
258
+ // remove event listeners
259
+ unlisten: function(target, events) {
260
+ for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) {
261
+ this.removeEvent(target, e);
262
+ }
263
+ },
264
+ addEvent: function(target, eventName) {
265
+ target.addEventListener(eventName, this.boundHandler);
266
+ },
267
+ removeEvent: function(target, eventName) {
268
+ target.removeEventListener(eventName, this.boundHandler);
269
+ },
270
+ // EVENT CREATION AND TRACKING
271
+ /**
272
+ * Creates a new Event of type `inType`, based on the information in
273
+ * `inEvent`.
274
+ *
275
+ * @param {string} inType A string representing the type of event to create
276
+ * @param {Event} inEvent A platform event with a target
277
+ * @return {Event} A PointerEvent of type `inType`
278
+ */
279
+ makeEvent: function(inType, inEvent) {
280
+ var e = eventFactory.makePointerEvent(inType, inEvent);
281
+ e.preventDefault = inEvent.preventDefault;
282
+ e.tapPrevented = inEvent.tapPrevented;
283
+ e._target = e._target || inEvent.target;
284
+ return e;
285
+ },
286
+ // make and dispatch an event in one call
287
+ fireEvent: function(inType, inEvent) {
288
+ var e = this.makeEvent(inType, inEvent);
289
+ return this.dispatchEvent(e);
290
+ },
291
+ /**
292
+ * Returns a snapshot of inEvent, with writable properties.
293
+ *
294
+ * @param {Event} inEvent An event that contains properties to copy.
295
+ * @return {Object} An object containing shallow copies of `inEvent`'s
296
+ * properties.
297
+ */
298
+ cloneEvent: function(inEvent) {
299
+ var eventCopy = Object.create(null), p;
300
+ for (var i = 0; i < CLONE_PROPS.length; i++) {
301
+ p = CLONE_PROPS[i];
302
+ eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];
303
+ // Work around SVGInstanceElement shadow tree
304
+ // Return the <use> element that is represented by the instance for Safari, Chrome, IE.
305
+ // This is the behavior implemented by Firefox.
306
+ if (p === 'target' || p === 'relatedTarget') {
307
+ if (HAS_SVG_INSTANCE && eventCopy[p] instanceof SVGElementInstance) {
308
+ eventCopy[p] = eventCopy[p].correspondingUseElement;
309
+ }
310
+ }
311
+ }
312
+ // keep the semantics of preventDefault
313
+ eventCopy.preventDefault = function() {
314
+ inEvent.preventDefault();
315
+ };
316
+ return eventCopy;
317
+ },
318
+ /**
319
+ * Dispatches the event to its target.
320
+ *
321
+ * @param {Event} inEvent The event to be dispatched.
322
+ * @return {Boolean} True if an event handler returns true, false otherwise.
323
+ */
324
+ dispatchEvent: function(inEvent) {
325
+ var t = inEvent._target;
326
+ if (t) {
327
+ t.dispatchEvent(inEvent);
328
+ // clone the event for the gesture system to process
329
+ // clone after dispatch to pick up gesture prevention code
330
+ var clone = this.cloneEvent(inEvent);
331
+ clone.target = t;
332
+ this.fillGestureQueue(clone);
333
+ }
334
+ },
335
+ gestureTrigger: function() {
336
+ // process the gesture queue
337
+ for (var i = 0, e, rg; i < this.gestureQueue.length; i++) {
338
+ e = this.gestureQueue[i];
339
+ rg = e._requiredGestures;
340
+ if (rg) {
341
+ for (var j = 0, g, fn; j < this.gestures.length; j++) {
342
+ // only run recognizer if an element in the source event's path is listening for those gestures
343
+ if (rg[j]) {
344
+ g = this.gestures[j];
345
+ fn = g[e.type];
346
+ if (fn) {
347
+ fn.call(g, e);
348
+ }
349
+ }
350
+ }
351
+ }
352
+ }
353
+ this.gestureQueue.length = 0;
354
+ },
355
+ fillGestureQueue: function(ev) {
356
+ // only trigger the gesture queue once
357
+ if (!this.gestureQueue.length) {
358
+ requestAnimationFrame(this.boundGestureTrigger);
359
+ }
360
+ ev._requiredGestures = this.requiredGestures.get(ev.pointerId);
361
+ this.gestureQueue.push(ev);
362
+ }
363
+ };
364
+ dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);
365
+ dispatcher.boundGestureTrigger = dispatcher.gestureTrigger.bind(dispatcher);
366
+ scope.dispatcher = dispatcher;
367
+
368
+ /**
369
+ * Listen for `gesture` on `node` with the `handler` function
370
+ *
371
+ * If `handler` is the first listener for `gesture`, the underlying gesture recognizer is then enabled.
372
+ *
373
+ * @param {Element} node
374
+ * @param {string} gesture
375
+ * @return Boolean `gesture` is a valid gesture
376
+ */
377
+ scope.activateGesture = function(node, gesture) {
378
+ var g = gesture.toLowerCase();
379
+ var dep = dispatcher.dependencyMap[g];
380
+ if (dep) {
381
+ var recognizer = dispatcher.gestures[dep.index];
382
+ if (!node._pgListeners) {
383
+ dispatcher.register(node);
384
+ node._pgListeners = 0;
385
+ }
386
+ // TODO(dfreedm): re-evaluate bookkeeping to avoid using attributes
387
+ if (recognizer) {
388
+ var touchAction = recognizer.defaultActions && recognizer.defaultActions[g];
389
+ var actionNode;
390
+ switch(node.nodeType) {
391
+ case Node.ELEMENT_NODE:
392
+ actionNode = node;
393
+ break;
394
+ case Node.DOCUMENT_FRAGMENT_NODE:
395
+ actionNode = node.host;
396
+ break;
397
+ default:
398
+ actionNode = null;
399
+ break;
400
+ }
401
+ if (touchAction && actionNode && !actionNode.hasAttribute('touch-action')) {
402
+ actionNode.setAttribute('touch-action', touchAction);
403
+ }
404
+ }
405
+ if (!node._pgEvents) {
406
+ node._pgEvents = {};
407
+ }
408
+ node._pgEvents[g] = (node._pgEvents[g] || 0) + 1;
409
+ node._pgListeners++;
410
+ }
411
+ return Boolean(dep);
412
+ };
413
+
414
+ /**
415
+ *
416
+ * Listen for `gesture` from `node` with `handler` function.
417
+ *
418
+ * @param {Element} node
419
+ * @param {string} gesture
420
+ * @param {Function} handler
421
+ * @param {Boolean} capture
422
+ */
423
+ scope.addEventListener = function(node, gesture, handler, capture) {
424
+ if (handler) {
425
+ scope.activateGesture(node, gesture);
426
+ node.addEventListener(gesture, handler, capture);
427
+ }
428
+ };
429
+
430
+ /**
431
+ * Tears down the gesture configuration for `node`
432
+ *
433
+ * If `handler` is the last listener for `gesture`, the underlying gesture recognizer is disabled.
434
+ *
435
+ * @param {Element} node
436
+ * @param {string} gesture
437
+ * @return Boolean `gesture` is a valid gesture
438
+ */
439
+ scope.deactivateGesture = function(node, gesture) {
440
+ var g = gesture.toLowerCase();
441
+ var dep = dispatcher.dependencyMap[g];
442
+ if (dep) {
443
+ if (node._pgListeners > 0) {
444
+ node._pgListeners--;
445
+ }
446
+ if (node._pgListeners === 0) {
447
+ dispatcher.unregister(node);
448
+ }
449
+ if (node._pgEvents) {
450
+ if (node._pgEvents[g] > 0) {
451
+ node._pgEvents[g]--;
452
+ } else {
453
+ node._pgEvents[g] = 0;
454
+ }
455
+ }
456
+ }
457
+ return Boolean(dep);
458
+ };
459
+
460
+ /**
461
+ * Stop listening for `gesture` from `node` with `handler` function.
462
+ *
463
+ * @param {Element} node
464
+ * @param {string} gesture
465
+ * @param {Function} handler
466
+ * @param {Boolean} capture
467
+ */
468
+ scope.removeEventListener = function(node, gesture, handler, capture) {
469
+ if (handler) {
470
+ scope.deactivateGesture(node, gesture);
471
+ node.removeEventListener(gesture, handler, capture);
472
+ }
473
+ };
474
+ })(window.PolymerGestures);