easycomments 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +14 -0
  5. data/LICENSE +21 -0
  6. data/README.md +92 -0
  7. data/Rakefile +49 -0
  8. data/_config.yml +28 -0
  9. data/bin/ec +45 -0
  10. data/config.ru +12 -0
  11. data/dashboard.rb +57 -0
  12. data/easycomments.gemspec +22 -0
  13. data/ec.rb +43 -0
  14. data/lib/easycomments/ec_configuration.rb +42 -0
  15. data/lib/easycomments/ec_dashboard_model.rb +70 -0
  16. data/lib/easycomments/ec_model.rb +47 -0
  17. data/lib/easycomments.rb +14 -0
  18. data/public/bower.json +32 -0
  19. data/public/bower_components/core-a11y-keys/.bower.json +28 -0
  20. data/public/bower_components/core-a11y-keys/README.md +4 -0
  21. data/public/bower_components/core-a11y-keys/bower.json +18 -0
  22. data/public/bower_components/core-a11y-keys/core-a11y-keys.html +335 -0
  23. data/public/bower_components/core-a11y-keys/demo.html +41 -0
  24. data/public/bower_components/core-a11y-keys/index.html +22 -0
  25. data/public/bower_components/core-ajax/.bower.json +22 -0
  26. data/public/bower_components/core-ajax/README.md +4 -0
  27. data/public/bower_components/core-ajax/bower.json +11 -0
  28. data/public/bower_components/core-ajax/core-ajax.html +434 -0
  29. data/public/bower_components/core-ajax/core-xhr.html +116 -0
  30. data/public/bower_components/core-ajax/demo-progress.html +65 -0
  31. data/public/bower_components/core-ajax/demo.html +43 -0
  32. data/public/bower_components/core-ajax/index.html +22 -0
  33. data/public/bower_components/core-ajax/metadata.html +23 -0
  34. data/public/bower_components/core-ajax/test/core-ajax-progress.html +108 -0
  35. data/public/bower_components/core-ajax/test/core-ajax-race.html +81 -0
  36. data/public/bower_components/core-ajax/test/core-ajax.html +287 -0
  37. data/public/bower_components/core-ajax/test/index.html +17 -0
  38. data/public/bower_components/core-collapse/.bower.json +21 -0
  39. data/public/bower_components/core-collapse/README.md +4 -0
  40. data/public/bower_components/core-collapse/bower.json +11 -0
  41. data/public/bower_components/core-collapse/core-collapse.css +16 -0
  42. data/public/bower_components/core-collapse/core-collapse.html +298 -0
  43. data/public/bower_components/core-collapse/demo.html +75 -0
  44. data/public/bower_components/core-collapse/index.html +22 -0
  45. data/public/bower_components/core-collapse/test/basic.html +85 -0
  46. data/public/bower_components/core-collapse/test/index.html +24 -0
  47. data/public/bower_components/core-component-page/.bower.json +19 -0
  48. data/public/bower_components/core-component-page/README.md +6 -0
  49. data/public/bower_components/core-component-page/bowager-logo.png +0 -0
  50. data/public/bower_components/core-component-page/bower.json +9 -0
  51. data/public/bower_components/core-component-page/core-component-page.html +37 -0
  52. data/public/bower_components/core-component-page/demo.html +23 -0
  53. data/public/bower_components/core-component-page/index.html +22 -0
  54. data/public/bower_components/core-drawer-panel/.bower.json +19 -0
  55. data/public/bower_components/core-drawer-panel/README.md +4 -0
  56. data/public/bower_components/core-drawer-panel/bower.json +9 -0
  57. data/public/bower_components/core-drawer-panel/core-drawer-panel.css +160 -0
  58. data/public/bower_components/core-drawer-panel/core-drawer-panel.html +418 -0
  59. data/public/bower_components/core-drawer-panel/demo.html +68 -0
  60. data/public/bower_components/core-drawer-panel/index.html +22 -0
  61. data/public/bower_components/core-drawer-panel/metadata.html +37 -0
  62. data/public/bower_components/core-focusable/.bower.json +18 -0
  63. data/public/bower_components/core-focusable/README.md +6 -0
  64. data/public/bower_components/core-focusable/bower.json +8 -0
  65. data/public/bower_components/core-focusable/core-focusable.html +4 -0
  66. data/public/bower_components/core-focusable/core-focusable.js +134 -0
  67. data/public/bower_components/core-focusable/demo.html +109 -0
  68. data/public/bower_components/core-focusable/polymer-mixin.js +35 -0
  69. data/public/bower_components/core-header-panel/.bower.json +18 -0
  70. data/public/bower_components/core-header-panel/README.md +4 -0
  71. data/public/bower_components/core-header-panel/bower.json +8 -0
  72. data/public/bower_components/core-header-panel/core-header-panel.css +78 -0
  73. data/public/bower_components/core-header-panel/core-header-panel.html +277 -0
  74. data/public/bower_components/core-header-panel/demo.html +100 -0
  75. data/public/bower_components/core-header-panel/index.html +23 -0
  76. data/public/bower_components/core-header-panel/metadata.html +37 -0
  77. data/public/bower_components/core-icon/.bower.json +19 -0
  78. data/public/bower_components/core-icon/README.md +4 -0
  79. data/public/bower_components/core-icon/bower.json +9 -0
  80. data/public/bower_components/core-icon/core-icon.css +16 -0
  81. data/public/bower_components/core-icon/core-icon.html +201 -0
  82. data/public/bower_components/core-icon/demo.html +44 -0
  83. data/public/bower_components/core-icon/index.html +22 -0
  84. data/public/bower_components/core-icon/metadata.html +21 -0
  85. data/public/bower_components/core-icon-button/.bower.json +18 -0
  86. data/public/bower_components/core-icon-button/README.md +4 -0
  87. data/public/bower_components/core-icon-button/bower.json +8 -0
  88. data/public/bower_components/core-icon-button/core-icon-button.css +75 -0
  89. data/public/bower_components/core-icon-button/core-icon-button.html +81 -0
  90. data/public/bower_components/core-icon-button/demo.html +35 -0
  91. data/public/bower_components/core-icon-button/index.html +22 -0
  92. data/public/bower_components/core-icon-button/metadata.html +20 -0
  93. data/public/bower_components/core-icons/.bower.json +24 -0
  94. data/public/bower_components/core-icons/.gitignore +2 -0
  95. data/public/bower_components/core-icons/README.md +8 -0
  96. data/public/bower_components/core-icons/av-icons.html +65 -0
  97. data/public/bower_components/core-icons/bower.json +14 -0
  98. data/public/bower_components/core-icons/communication-icons.html +54 -0
  99. data/public/bower_components/core-icons/core-icons.html +278 -0
  100. data/public/bower_components/core-icons/demo.html +98 -0
  101. data/public/bower_components/core-icons/device-icons.html +90 -0
  102. data/public/bower_components/core-icons/editor-icons.html +67 -0
  103. data/public/bower_components/core-icons/hardware-icons.html +56 -0
  104. data/public/bower_components/core-icons/image-icons.html +152 -0
  105. data/public/bower_components/core-icons/index.html +22 -0
  106. data/public/bower_components/core-icons/maps-icons.html +70 -0
  107. data/public/bower_components/core-icons/notification-icons.html +49 -0
  108. data/public/bower_components/core-icons/social-icons.html +39 -0
  109. data/public/bower_components/core-iconset/.bower.json +20 -0
  110. data/public/bower_components/core-iconset/README.md +4 -0
  111. data/public/bower_components/core-iconset/bower.json +10 -0
  112. data/public/bower_components/core-iconset/core-iconset.html +241 -0
  113. data/public/bower_components/core-iconset/demo.html +62 -0
  114. data/public/bower_components/core-iconset/index.html +22 -0
  115. data/public/bower_components/core-iconset/my-icons-big.png +0 -0
  116. data/public/bower_components/core-iconset/my-icons.png +0 -0
  117. data/public/bower_components/core-iconset-svg/.bower.json +19 -0
  118. data/public/bower_components/core-iconset-svg/README.md +4 -0
  119. data/public/bower_components/core-iconset-svg/bower.json +9 -0
  120. data/public/bower_components/core-iconset-svg/core-iconset-svg.html +168 -0
  121. data/public/bower_components/core-iconset-svg/demo.html +66 -0
  122. data/public/bower_components/core-iconset-svg/index.html +22 -0
  123. data/public/bower_components/core-iconset-svg/svg-sample-icons.html +68 -0
  124. data/public/bower_components/core-input/.bower.json +20 -0
  125. data/public/bower_components/core-input/README.md +2 -0
  126. data/public/bower_components/core-input/bower.json +10 -0
  127. data/public/bower_components/core-input/core-input.css +41 -0
  128. data/public/bower_components/core-input/core-input.html +148 -0
  129. data/public/bower_components/core-input/demo.html +62 -0
  130. data/public/bower_components/core-input/index.html +22 -0
  131. data/public/bower_components/core-input/metadata.html +23 -0
  132. data/public/bower_components/core-input/test/a11y.html +55 -0
  133. data/public/bower_components/core-input/test/basic.html +60 -0
  134. data/public/bower_components/core-input/test/index.html +25 -0
  135. data/public/bower_components/core-item/.bower.json +19 -0
  136. data/public/bower_components/core-item/README.md +4 -0
  137. data/public/bower_components/core-item/bower.json +9 -0
  138. data/public/bower_components/core-item/core-item.css +45 -0
  139. data/public/bower_components/core-item/core-item.html +73 -0
  140. data/public/bower_components/core-item/demo.html +92 -0
  141. data/public/bower_components/core-item/index.html +22 -0
  142. data/public/bower_components/core-item/metadata.html +24 -0
  143. data/public/bower_components/core-media-query/.bower.json +18 -0
  144. data/public/bower_components/core-media-query/README.md +4 -0
  145. data/public/bower_components/core-media-query/bower.json +8 -0
  146. data/public/bower_components/core-media-query/core-media-query.html +87 -0
  147. data/public/bower_components/core-media-query/demo.html +44 -0
  148. data/public/bower_components/core-media-query/index.html +22 -0
  149. data/public/bower_components/core-menu/.bower.json +22 -0
  150. data/public/bower_components/core-menu/README.md +4 -0
  151. data/public/bower_components/core-menu/bower.json +11 -0
  152. data/public/bower_components/core-menu/core-menu.css +18 -0
  153. data/public/bower_components/core-menu/core-menu.html +73 -0
  154. data/public/bower_components/core-menu/core-submenu.css +43 -0
  155. data/public/bower_components/core-menu/core-submenu.html +126 -0
  156. data/public/bower_components/core-menu/demo.html +101 -0
  157. data/public/bower_components/core-menu/index.html +22 -0
  158. data/public/bower_components/core-menu/metadata.html +62 -0
  159. data/public/bower_components/core-meta/.bower.json +18 -0
  160. data/public/bower_components/core-meta/README.md +4 -0
  161. data/public/bower_components/core-meta/bower.json +8 -0
  162. data/public/bower_components/core-meta/core-meta.html +145 -0
  163. data/public/bower_components/core-meta/demo.html +58 -0
  164. data/public/bower_components/core-meta/index.html +22 -0
  165. data/public/bower_components/core-overlay/.bower.json +20 -0
  166. data/public/bower_components/core-overlay/README.md +4 -0
  167. data/public/bower_components/core-overlay/bower.json +10 -0
  168. data/public/bower_components/core-overlay/core-key-helper.html +22 -0
  169. data/public/bower_components/core-overlay/core-overlay-layer.html +116 -0
  170. data/public/bower_components/core-overlay/core-overlay.html +776 -0
  171. data/public/bower_components/core-overlay/demo.html +155 -0
  172. data/public/bower_components/core-overlay/gulpfile.js +2 -0
  173. data/public/bower_components/core-overlay/index.html +22 -0
  174. data/public/bower_components/core-overlay/tests/html/core-overlay-basic.html +127 -0
  175. data/public/bower_components/core-overlay/tests/html/core-overlay-positioning-margin.html +153 -0
  176. data/public/bower_components/core-overlay/tests/html/core-overlay-positioning.html +167 -0
  177. data/public/bower_components/core-overlay/tests/html/core-overlay-quick-close.html +45 -0
  178. data/public/bower_components/core-overlay/tests/html/core-overlay-scroll.html +130 -0
  179. data/public/bower_components/core-overlay/tests/js/htmltests.js +7 -0
  180. data/public/bower_components/core-overlay/tests/runner.html +14 -0
  181. data/public/bower_components/core-overlay/tests/tests.json +6 -0
  182. data/public/bower_components/core-pages/.bower.json +19 -0
  183. data/public/bower_components/core-pages/README.md +4 -0
  184. data/public/bower_components/core-pages/bower.json +8 -0
  185. data/public/bower_components/core-pages/core-pages.css +30 -0
  186. data/public/bower_components/core-pages/core-pages.html +44 -0
  187. data/public/bower_components/core-pages/demo.html +136 -0
  188. data/public/bower_components/core-pages/index.html +22 -0
  189. data/public/bower_components/core-pages/metadata.html +25 -0
  190. data/public/bower_components/core-resizable/.bower.json +18 -0
  191. data/public/bower_components/core-resizable/README.md +4 -0
  192. data/public/bower_components/core-resizable/bower.json +8 -0
  193. data/public/bower_components/core-resizable/core-resizable.html +248 -0
  194. data/public/bower_components/core-resizable/index.html +22 -0
  195. data/public/bower_components/core-resizable/test/basic.html +504 -0
  196. data/public/bower_components/core-resizable/test/index.html +16 -0
  197. data/public/bower_components/core-resizable/test/test-elements.html +66 -0
  198. data/public/bower_components/core-scaffold/.bower.json +22 -0
  199. data/public/bower_components/core-scaffold/README.md +4 -0
  200. data/public/bower_components/core-scaffold/bower.json +11 -0
  201. data/public/bower_components/core-scaffold/core-scaffold.html +252 -0
  202. data/public/bower_components/core-scaffold/demo.html +82 -0
  203. data/public/bower_components/core-scaffold/index.html +22 -0
  204. data/public/bower_components/core-scaffold/metadata.html +52 -0
  205. data/public/bower_components/core-selection/.bower.json +21 -0
  206. data/public/bower_components/core-selection/README.md +4 -0
  207. data/public/bower_components/core-selection/bower.json +11 -0
  208. data/public/bower_components/core-selection/core-selection.html +149 -0
  209. data/public/bower_components/core-selection/demo.html +59 -0
  210. data/public/bower_components/core-selection/index.html +22 -0
  211. data/public/bower_components/core-selection/test/basic.html +62 -0
  212. data/public/bower_components/core-selection/test/index.html +25 -0
  213. data/public/bower_components/core-selection/test/multi.html +63 -0
  214. data/public/bower_components/core-selector/.bower.json +22 -0
  215. data/public/bower_components/core-selector/.gitignore +2 -0
  216. data/public/bower_components/core-selector/README.md +4 -0
  217. data/public/bower_components/core-selector/bower.json +12 -0
  218. data/public/bower_components/core-selector/core-selector.html +548 -0
  219. data/public/bower_components/core-selector/demo.html +106 -0
  220. data/public/bower_components/core-selector/index.html +22 -0
  221. data/public/bower_components/core-selector/metadata.html +20 -0
  222. data/public/bower_components/core-selector/test/activate-event.html +63 -0
  223. data/public/bower_components/core-selector/test/basic.html +126 -0
  224. data/public/bower_components/core-selector/test/content.html +101 -0
  225. data/public/bower_components/core-selector/test/index.html +30 -0
  226. data/public/bower_components/core-selector/test/multi.html +115 -0
  227. data/public/bower_components/core-selector/test/next-previous.html +113 -0
  228. data/public/bower_components/core-selector/test/selected-attr-prop.html +62 -0
  229. data/public/bower_components/core-selector/test/template-repeat.html +63 -0
  230. data/public/bower_components/core-style/.bower.json +18 -0
  231. data/public/bower_components/core-style/README.md +4 -0
  232. data/public/bower_components/core-style/bower.json +8 -0
  233. data/public/bower_components/core-style/core-style.html +387 -0
  234. data/public/bower_components/core-style/demo.html +58 -0
  235. data/public/bower_components/core-style/elements.html +55 -0
  236. data/public/bower_components/core-style/index.html +22 -0
  237. data/public/bower_components/core-style/my-theme.html +73 -0
  238. data/public/bower_components/core-toolbar/.bower.json +19 -0
  239. data/public/bower_components/core-toolbar/README.md +4 -0
  240. data/public/bower_components/core-toolbar/bower.json +9 -0
  241. data/public/bower_components/core-toolbar/core-toolbar.css +117 -0
  242. data/public/bower_components/core-toolbar/core-toolbar.html +155 -0
  243. data/public/bower_components/core-toolbar/demo.html +119 -0
  244. data/public/bower_components/core-toolbar/index.html +22 -0
  245. data/public/bower_components/core-toolbar/metadata.html +28 -0
  246. data/public/bower_components/core-toolbar/test/basic.html +86 -0
  247. data/public/bower_components/core-toolbar/test/index.html +24 -0
  248. data/public/bower_components/core-transition/.bower.json +19 -0
  249. data/public/bower_components/core-transition/README.md +2 -0
  250. data/public/bower_components/core-transition/bower.json +9 -0
  251. data/public/bower_components/core-transition/core-transition-css.html +220 -0
  252. data/public/bower_components/core-transition/core-transition-overlay.css +46 -0
  253. data/public/bower_components/core-transition/core-transition.html +140 -0
  254. data/public/bower_components/core-transition/demo.html +87 -0
  255. data/public/bower_components/core-transition/index.html +22 -0
  256. data/public/bower_components/font-roboto/.bower.json +15 -0
  257. data/public/bower_components/font-roboto/roboto.html +9 -0
  258. data/public/bower_components/paper-button/.bower.json +27 -0
  259. data/public/bower_components/paper-button/README.md +4 -0
  260. data/public/bower_components/paper-button/bower.json +16 -0
  261. data/public/bower_components/paper-button/demo.html +157 -0
  262. data/public/bower_components/paper-button/index.html +22 -0
  263. data/public/bower_components/paper-button/metadata.html +17 -0
  264. data/public/bower_components/paper-button/paper-button-base.html +164 -0
  265. data/public/bower_components/paper-button/paper-button.html +197 -0
  266. data/public/bower_components/paper-button/test/index.html +24 -0
  267. data/public/bower_components/paper-button/test/paper-button.html +112 -0
  268. data/public/bower_components/paper-icon-button/.bower.json +25 -0
  269. data/public/bower_components/paper-icon-button/README.md +4 -0
  270. data/public/bower_components/paper-icon-button/bower.json +15 -0
  271. data/public/bower_components/paper-icon-button/demo.html +150 -0
  272. data/public/bower_components/paper-icon-button/index.html +22 -0
  273. data/public/bower_components/paper-icon-button/metadata.html +21 -0
  274. data/public/bower_components/paper-icon-button/paper-icon-button.html +154 -0
  275. data/public/bower_components/paper-icon-button/test/a11y.html +68 -0
  276. data/public/bower_components/paper-icon-button/test/basic.html +50 -0
  277. data/public/bower_components/paper-icon-button/test/index.html +25 -0
  278. data/public/bower_components/paper-input/.bower.json +26 -0
  279. data/public/bower_components/paper-input/.gitignore +1 -0
  280. data/public/bower_components/paper-input/README.md +4 -0
  281. data/public/bower_components/paper-input/bower.json +15 -0
  282. data/public/bower_components/paper-input/demo.html +236 -0
  283. data/public/bower_components/paper-input/index.html +22 -0
  284. data/public/bower_components/paper-input/metadata.html +20 -0
  285. data/public/bower_components/paper-input/paper-autogrow-textarea.html +162 -0
  286. data/public/bower_components/paper-input/paper-char-counter.html +121 -0
  287. data/public/bower_components/paper-input/paper-input-decorator.css +132 -0
  288. data/public/bower_components/paper-input/paper-input-decorator.html +547 -0
  289. data/public/bower_components/paper-input/paper-input.html +145 -0
  290. data/public/bower_components/paper-input/test/index.html +26 -0
  291. data/public/bower_components/paper-input/test/paper-autogrow-textarea.html +146 -0
  292. data/public/bower_components/paper-input/test/paper-input-decorator.html +240 -0
  293. data/public/bower_components/paper-input/test/paper-input.html +68 -0
  294. data/public/bower_components/paper-input/test/util.js +15 -0
  295. data/public/bower_components/paper-radio-button/.bower.json +22 -0
  296. data/public/bower_components/paper-radio-button/README.md +4 -0
  297. data/public/bower_components/paper-radio-button/bower.json +12 -0
  298. data/public/bower_components/paper-radio-button/demo.html +84 -0
  299. data/public/bower_components/paper-radio-button/index.html +22 -0
  300. data/public/bower_components/paper-radio-button/metadata.html +17 -0
  301. data/public/bower_components/paper-radio-button/paper-radio-button.css +108 -0
  302. data/public/bower_components/paper-radio-button/paper-radio-button.html +166 -0
  303. data/public/bower_components/paper-ripple/.bower.json +23 -0
  304. data/public/bower_components/paper-ripple/README.md +4 -0
  305. data/public/bower_components/paper-ripple/bower.json +13 -0
  306. data/public/bower_components/paper-ripple/demo.html +414 -0
  307. data/public/bower_components/paper-ripple/index.html +22 -0
  308. data/public/bower_components/paper-ripple/metadata.html +20 -0
  309. data/public/bower_components/paper-ripple/paper-ripple.html +477 -0
  310. data/public/bower_components/paper-ripple/test/index.html +24 -0
  311. data/public/bower_components/paper-ripple/test/position.html +109 -0
  312. data/public/bower_components/paper-shadow/.bower.json +22 -0
  313. data/public/bower_components/paper-shadow/README.md +4 -0
  314. data/public/bower_components/paper-shadow/bower.json +11 -0
  315. data/public/bower_components/paper-shadow/demo.html +134 -0
  316. data/public/bower_components/paper-shadow/index.html +22 -0
  317. data/public/bower_components/paper-shadow/metadata.html +17 -0
  318. data/public/bower_components/paper-shadow/paper-shadow.css +66 -0
  319. data/public/bower_components/paper-shadow/paper-shadow.html +86 -0
  320. data/public/bower_components/paper-shadow/test/basic.html +62 -0
  321. data/public/bower_components/paper-shadow/test/index.html +24 -0
  322. data/public/bower_components/paper-tabs/.bower.json +26 -0
  323. data/public/bower_components/paper-tabs/README.md +4 -0
  324. data/public/bower_components/paper-tabs/bower.json +15 -0
  325. data/public/bower_components/paper-tabs/demo.html +242 -0
  326. data/public/bower_components/paper-tabs/index.html +22 -0
  327. data/public/bower_components/paper-tabs/metadata.html +58 -0
  328. data/public/bower_components/paper-tabs/paper-tab.css +59 -0
  329. data/public/bower_components/paper-tabs/paper-tab.html +82 -0
  330. data/public/bower_components/paper-tabs/paper-tabs.css +80 -0
  331. data/public/bower_components/paper-tabs/paper-tabs.html +353 -0
  332. data/public/bower_components/paper-toast/.bower.json +22 -0
  333. data/public/bower_components/paper-toast/README.md +4 -0
  334. data/public/bower_components/paper-toast/bower.json +11 -0
  335. data/public/bower_components/paper-toast/demo.html +63 -0
  336. data/public/bower_components/paper-toast/index.html +22 -0
  337. data/public/bower_components/paper-toast/metadata.html +20 -0
  338. data/public/bower_components/paper-toast/paper-toast.css +80 -0
  339. data/public/bower_components/paper-toast/paper-toast.html +296 -0
  340. data/public/bower_components/paper-toggle-button/.bower.json +20 -0
  341. data/public/bower_components/paper-toggle-button/README.md +4 -0
  342. data/public/bower_components/paper-toggle-button/bower.json +9 -0
  343. data/public/bower_components/paper-toggle-button/demo.html +97 -0
  344. data/public/bower_components/paper-toggle-button/index.html +22 -0
  345. data/public/bower_components/paper-toggle-button/metadata.html +17 -0
  346. data/public/bower_components/paper-toggle-button/paper-toggle-button.css +95 -0
  347. data/public/bower_components/paper-toggle-button/paper-toggle-button.html +179 -0
  348. data/public/bower_components/polymer/.bower.json +32 -0
  349. data/public/bower_components/polymer/README.md +21 -0
  350. data/public/bower_components/polymer/bower.json +23 -0
  351. data/public/bower_components/polymer/build.log +26 -0
  352. data/public/bower_components/polymer/layout.html +286 -0
  353. data/public/bower_components/polymer/polymer.html +12 -0
  354. data/public/bower_components/polymer/polymer.js +11859 -0
  355. data/public/bower_components/polymer/polymer.min.js +14 -0
  356. data/public/bower_components/webcomponentsjs/.bower.json +23 -0
  357. data/public/bower_components/webcomponentsjs/CustomElements.js +634 -0
  358. data/public/bower_components/webcomponentsjs/CustomElements.min.js +11 -0
  359. data/public/bower_components/webcomponentsjs/HTMLImports.js +764 -0
  360. data/public/bower_components/webcomponentsjs/HTMLImports.min.js +11 -0
  361. data/public/bower_components/webcomponentsjs/README.md +73 -0
  362. data/public/bower_components/webcomponentsjs/ShadowDOM.js +4277 -0
  363. data/public/bower_components/webcomponentsjs/ShadowDOM.min.js +13 -0
  364. data/public/bower_components/webcomponentsjs/bower.json +14 -0
  365. data/public/bower_components/webcomponentsjs/build.log +31 -0
  366. data/public/bower_components/webcomponentsjs/package.json +31 -0
  367. data/public/bower_components/webcomponentsjs/webcomponents-lite.js +1728 -0
  368. data/public/bower_components/webcomponentsjs/webcomponents-lite.min.js +11 -0
  369. data/public/bower_components/webcomponentsjs/webcomponents.js +6114 -0
  370. data/public/bower_components/webcomponentsjs/webcomponents.min.js +14 -0
  371. data/public/css/main.css +41 -0
  372. data/public/elements/ec-dashboard/ec-dashboard.html +269 -0
  373. data/public/polymer-loader.html +24 -0
  374. data/public/polymer-loader.vulcanized.html +19 -0
  375. data/spec/ec/ec_dashboard_spec.rb +78 -0
  376. data/spec/ec/ec_spec.rb +78 -0
  377. data/spec/spec_helper.rb +27 -0
  378. data/views/index.html +88 -0
  379. metadata +464 -0
@@ -0,0 +1,776 @@
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
+ <link rel="import" href="../polymer/polymer.html">
11
+ <link rel="import" href="../core-transition/core-transition.html">
12
+ <link rel="import" href="../core-resizable/core-resizable.html">
13
+ <link rel="import" href="core-key-helper.html">
14
+ <link rel="import" href="core-overlay-layer.html">
15
+
16
+ <!--
17
+ The `core-overlay` element displays overlayed on top of other content. It starts
18
+ out hidden and is displayed by setting its `opened` property to true.
19
+ A `core-overlay's` opened state can be toggled by calling the `toggle`
20
+ method.
21
+
22
+ The `core-overlay` will, by default, show/hide itself when it's opened. The
23
+ `target` property may be set to another element to cause that element to
24
+ be shown when the overlay is opened.
25
+
26
+ It's common to want a `core-overlay` to animate to its opened
27
+ position. The `core-overlay` element uses a `core-transition` to handle
28
+ animation. The default transition is `core-transition-fade` which
29
+ causes the overlay to fade in when displayed. See
30
+ <a href="../core-transition/">`core-transition`</a> for more
31
+ information about customizing a `core-overlay's` opening animation. The
32
+ `backdrop` property can be set to true to show a backdrop behind the overlay
33
+ that will darken the rest of the window.
34
+
35
+ An element that should close the `core-overlay` will automatically
36
+ do so if it's given the `core-overlay-toggle` attribute. This attribute
37
+ can be customized with the `closeAttribute` property. You can also use
38
+ `closeSelector` if more general matching is needed.
39
+
40
+ By default `core-overlay` will close whenever the user taps outside it or
41
+ presses the escape key. This behavior can be turned off via the
42
+ `autoCloseDisabled` property.
43
+
44
+ <core-overlay>
45
+ <h2>Dialog</h2>
46
+ <input placeholder="say something..." autofocus>
47
+ <div>I agree with this wholeheartedly.</div>
48
+ <button core-overlay-toggle>OK</button>
49
+ </core-overlay>
50
+
51
+ `core-overlay` will automatically size and position itself according to the
52
+ following rules. The overlay's size is constrained such that it does not
53
+ overflow the screen. This is done by setting maxHeight/maxWidth on the
54
+ `sizingTarget`. If the `sizingTarget` already has a setting for one of these
55
+ properties, it will not be overridden. The overlay should
56
+ be positioned via css or imperatively using the `core-overlay-position` event.
57
+ If the overlay is not positioned vertically via setting `top` or `bottom`, it
58
+ will be centered vertically. The same is true horizontally via a setting to
59
+ `left` or `right`. In addition, css `margin` can be used to provide some space
60
+ around the overlay. This can be used to ensure
61
+ that, for example, a drop shadow is always visible around the overlay.
62
+
63
+ @group Core Elements
64
+ @element core-overlay
65
+ @mixins Polymer.CoreResizer https://github.com/polymer/core-resizable
66
+ @homepage github.io
67
+ -->
68
+ <!--
69
+ Fired when the `core-overlay`'s `opened` property changes.
70
+
71
+ @event core-overlay-open
72
+ @param {Object} detail
73
+ @param {Object} detail.opened the opened state
74
+ -->
75
+ <!--
76
+ Fired when the `core-overlay` has completely opened.
77
+
78
+ @event core-overlay-open-completed
79
+ -->
80
+ <!--
81
+ Fired when the `core-overlay` has completely closed.
82
+
83
+ @event core-overlay-close-completed
84
+ -->
85
+ <!--
86
+ Fired when the `core-overlay` needs to position itself. Optionally, implement
87
+ in order to position an overlay via code. If the overlay was not otherwise
88
+ positioned, it's important to indicate how the overlay has been positioned by
89
+ setting the `dimensions.position` object. For example, if the overlay has been
90
+ positioned via setting `right` and `top`, set dimensions.position to an
91
+ object like this: `{v: 'top', h: 'right'}`.
92
+
93
+ @event core-overlay-position
94
+ @param {Object} detail
95
+ @param {Object} detail.target the overlay target
96
+ @param {Object} detail.sizingTarget the overlay sizing target
97
+ @param {Object} detail.opened the opened state
98
+ -->
99
+ <style>
100
+ .core-overlay-backdrop {
101
+ position: fixed;
102
+ top: 0;
103
+ left: 0;
104
+ width: 100vw;
105
+ height: 100vh;
106
+ background-color: black;
107
+ opacity: 0;
108
+ transition: opacity 0.2s;
109
+ }
110
+
111
+ .core-overlay-backdrop.core-opened {
112
+ opacity: 0.6;
113
+ }
114
+ </style>
115
+
116
+ <polymer-element name="core-overlay">
117
+ <script>
118
+ (function() {
119
+
120
+ Polymer(Polymer.mixin({
121
+
122
+ publish: {
123
+ /**
124
+ * The target element that will be shown when the overlay is
125
+ * opened. If unspecified, the core-overlay itself is the target.
126
+ *
127
+ * @attribute target
128
+ * @type Object
129
+ * @default the overlay element
130
+ */
131
+ target: null,
132
+
133
+
134
+ /**
135
+ * A `core-overlay`'s size is guaranteed to be
136
+ * constrained to the window size. To achieve this, the sizingElement
137
+ * is sized with a max-height/width. By default this element is the
138
+ * target element, but it can be specifically set to a specific element
139
+ * inside the target if that is more appropriate. This is useful, for
140
+ * example, when a region inside the overlay should scroll if needed.
141
+ *
142
+ * @attribute sizingTarget
143
+ * @type Object
144
+ * @default the target element
145
+ */
146
+ sizingTarget: null,
147
+
148
+ /**
149
+ * Set opened to true to show an overlay and to false to hide it.
150
+ * A `core-overlay` may be made initially opened by setting its
151
+ * `opened` attribute.
152
+ * @attribute opened
153
+ * @type boolean
154
+ * @default false
155
+ */
156
+ opened: false,
157
+
158
+ /**
159
+ * If true, the overlay has a backdrop darkening the rest of the screen.
160
+ * The backdrop element is attached to the document body and may be styled
161
+ * with the class `core-overlay-backdrop`. When opened the `core-opened`
162
+ * class is applied.
163
+ *
164
+ * @attribute backdrop
165
+ * @type boolean
166
+ * @default false
167
+ */
168
+ backdrop: false,
169
+
170
+ /**
171
+ * If true, the overlay is guaranteed to display above page content.
172
+ *
173
+ * @attribute layered
174
+ * @type boolean
175
+ * @default false
176
+ */
177
+ layered: false,
178
+
179
+ /**
180
+ * By default an overlay will close automatically if the user
181
+ * taps outside it or presses the escape key. Disable this
182
+ * behavior by setting the `autoCloseDisabled` property to true.
183
+ * @attribute autoCloseDisabled
184
+ * @type boolean
185
+ * @default false
186
+ */
187
+ autoCloseDisabled: false,
188
+
189
+ /**
190
+ * By default an overlay will focus its target or an element inside
191
+ * it with the `autoFocus` attribute. Disable this
192
+ * behavior by setting the `autoFocusDisabled` property to true.
193
+ * @attribute autoFocusDisabled
194
+ * @type boolean
195
+ * @default false
196
+ */
197
+ autoFocusDisabled: false,
198
+
199
+ /**
200
+ * This property specifies an attribute on elements that should
201
+ * close the overlay on tap. Should not set `closeSelector` if this
202
+ * is set.
203
+ *
204
+ * @attribute closeAttribute
205
+ * @type string
206
+ * @default "core-overlay-toggle"
207
+ */
208
+ closeAttribute: 'core-overlay-toggle',
209
+
210
+ /**
211
+ * This property specifies a selector matching elements that should
212
+ * close the overlay on tap. Should not set `closeAttribute` if this
213
+ * is set.
214
+ *
215
+ * @attribute closeSelector
216
+ * @type string
217
+ * @default ""
218
+ */
219
+ closeSelector: '',
220
+
221
+ /**
222
+ * The transition property specifies a string which identifies a
223
+ * <a href="../core-transition/">`core-transition`</a> element that
224
+ * will be used to help the overlay open and close. The default
225
+ * `core-transition-fade` will cause the overlay to fade in and out.
226
+ *
227
+ * @attribute transition
228
+ * @type string
229
+ * @default 'core-transition-fade'
230
+ */
231
+ transition: 'core-transition-fade'
232
+
233
+ },
234
+
235
+ captureEventName: 'tap',
236
+ targetListeners: {
237
+ 'tap': 'tapHandler',
238
+ 'keydown': 'keydownHandler',
239
+ 'core-transitionend': 'transitionend'
240
+ },
241
+
242
+ attached: function() {
243
+ this.resizerAttachedHandler();
244
+ },
245
+
246
+ detached: function() {
247
+ this.resizerDetachedHandler();
248
+ },
249
+
250
+ resizerShouldNotify: function() {
251
+ return this.opened;
252
+ },
253
+
254
+ registerCallback: function(element) {
255
+ this.layer = document.createElement('core-overlay-layer');
256
+ this.keyHelper = document.createElement('core-key-helper');
257
+ this.meta = document.createElement('core-transition');
258
+ this.scrim = document.createElement('div');
259
+ this.scrim.className = 'core-overlay-backdrop';
260
+ },
261
+
262
+ ready: function() {
263
+ this.target = this.target || this;
264
+ // flush to ensure styles are installed before paint
265
+ Polymer.flush();
266
+ },
267
+
268
+ /**
269
+ * Toggle the opened state of the overlay.
270
+ * @method toggle
271
+ */
272
+ toggle: function() {
273
+ this.opened = !this.opened;
274
+ },
275
+
276
+ /**
277
+ * Open the overlay. This is equivalent to setting the `opened`
278
+ * property to true.
279
+ * @method open
280
+ */
281
+ open: function() {
282
+ this.opened = true;
283
+ },
284
+
285
+ /**
286
+ * Close the overlay. This is equivalent to setting the `opened`
287
+ * property to false.
288
+ * @method close
289
+ */
290
+ close: function() {
291
+ this.opened = false;
292
+ },
293
+
294
+ domReady: function() {
295
+ this.ensureTargetSetup();
296
+ },
297
+
298
+ targetChanged: function(old) {
299
+ if (this.target) {
300
+ // really make sure tabIndex is set
301
+ if (this.target.tabIndex < 0) {
302
+ this.target.tabIndex = -1;
303
+ }
304
+ this.addElementListenerList(this.target, this.targetListeners);
305
+ this.target.style.display = 'none';
306
+ this.target.__overlaySetup = false;
307
+ }
308
+ if (old) {
309
+ this.removeElementListenerList(old, this.targetListeners);
310
+ var transition = this.getTransition();
311
+ if (transition) {
312
+ transition.teardown(old);
313
+ } else {
314
+ old.style.position = '';
315
+ old.style.outline = '';
316
+ }
317
+ old.style.display = '';
318
+ }
319
+ },
320
+
321
+ transitionChanged: function(old) {
322
+ if (!this.target) {
323
+ return;
324
+ }
325
+ if (old) {
326
+ this.getTransition(old).teardown(this.target);
327
+ }
328
+ this.target.__overlaySetup = false;
329
+ },
330
+
331
+ // NOTE: wait to call this until we're as sure as possible that target
332
+ // is styled.
333
+ ensureTargetSetup: function() {
334
+ if (!this.target || this.target.__overlaySetup) {
335
+ return;
336
+ }
337
+ if (!this.sizingTarget) {
338
+ this.sizingTarget = this.target;
339
+ }
340
+ this.target.__overlaySetup = true;
341
+ this.target.style.display = '';
342
+ var transition = this.getTransition();
343
+ if (transition) {
344
+ transition.setup(this.target);
345
+ }
346
+ var style = this.target.style;
347
+ var computed = getComputedStyle(this.target);
348
+ if (computed.position === 'static') {
349
+ style.position = 'fixed';
350
+ }
351
+ style.outline = 'none';
352
+ style.display = 'none';
353
+ },
354
+
355
+ openedChanged: function() {
356
+ this.transitioning = true;
357
+ this.ensureTargetSetup();
358
+ this.prepareRenderOpened();
359
+ // async here to allow overlay layer to become visible.
360
+ this.async(function() {
361
+ this.target.style.display = '';
362
+ // force layout to ensure transitions will go
363
+ this.target.offsetWidth;
364
+ this.renderOpened();
365
+ });
366
+ this.fire('core-overlay-open', this.opened);
367
+ },
368
+
369
+ // tasks which must occur before opening; e.g. making the element visible
370
+ prepareRenderOpened: function() {
371
+ if (this.opened) {
372
+ addOverlay(this);
373
+ }
374
+ this.prepareBackdrop();
375
+ // async so we don't auto-close immediately via a click.
376
+ this.async(function() {
377
+ if (!this.autoCloseDisabled) {
378
+ this.enableElementListener(this.opened, document,
379
+ this.captureEventName, 'captureHandler', true);
380
+ }
381
+ });
382
+ this.enableElementListener(this.opened, window, 'resize',
383
+ 'resizeHandler');
384
+
385
+ if (this.opened) {
386
+ // force layout so SD Polyfill renders
387
+ this.target.offsetHeight;
388
+ this.discoverDimensions();
389
+ // if we are showing, then take care when positioning
390
+ this.preparePositioning();
391
+ this.positionTarget();
392
+ this.updateTargetDimensions();
393
+ this.finishPositioning();
394
+ if (this.layered) {
395
+ this.layer.addElement(this.target);
396
+ this.layer.opened = this.opened;
397
+ }
398
+ }
399
+ },
400
+
401
+ // tasks which cause the overlay to actually open; typically play an
402
+ // animation
403
+ renderOpened: function() {
404
+ this.notifyResize();
405
+ var transition = this.getTransition();
406
+ if (transition) {
407
+ transition.go(this.target, {opened: this.opened});
408
+ } else {
409
+ this.transitionend();
410
+ }
411
+ this.renderBackdropOpened();
412
+ },
413
+
414
+ // finishing tasks; typically called via a transition
415
+ transitionend: function(e) {
416
+ // make sure this is our transition event.
417
+ if (e && e.target !== this.target) {
418
+ return;
419
+ }
420
+ this.transitioning = false;
421
+ if (!this.opened) {
422
+ this.resetTargetDimensions();
423
+ this.target.style.display = 'none';
424
+ this.completeBackdrop();
425
+ removeOverlay(this);
426
+ if (this.layered) {
427
+ if (!currentOverlay()) {
428
+ this.layer.opened = this.opened;
429
+ }
430
+ this.layer.removeElement(this.target);
431
+ }
432
+ }
433
+ this.fire('core-overlay-' + (this.opened ? 'open' : 'close') +
434
+ '-completed');
435
+ this.applyFocus();
436
+ },
437
+
438
+ prepareBackdrop: function() {
439
+ if (this.backdrop && this.opened) {
440
+ if (!this.scrim.parentNode) {
441
+ document.body.appendChild(this.scrim);
442
+ this.scrim.style.zIndex = currentOverlayZ() - 1;
443
+ }
444
+ trackBackdrop(this);
445
+ }
446
+ },
447
+
448
+ renderBackdropOpened: function() {
449
+ if (this.backdrop && getBackdrops().length < 2) {
450
+ this.scrim.classList.toggle('core-opened', this.opened);
451
+ }
452
+ },
453
+
454
+ completeBackdrop: function() {
455
+ if (this.backdrop) {
456
+ trackBackdrop(this);
457
+ if (getBackdrops().length === 0) {
458
+ this.scrim.parentNode.removeChild(this.scrim);
459
+ }
460
+ }
461
+ },
462
+
463
+ preparePositioning: function() {
464
+ this.target.style.transition = this.target.style.webkitTransition = 'none';
465
+ this.target.style.transform = this.target.style.webkitTransform = 'none';
466
+ this.target.style.display = '';
467
+ },
468
+
469
+ discoverDimensions: function() {
470
+ if (this.dimensions) {
471
+ return;
472
+ }
473
+ var target = getComputedStyle(this.target);
474
+ var sizer = getComputedStyle(this.sizingTarget);
475
+ this.dimensions = {
476
+ position: {
477
+ v: target.top !== 'auto' ? 'top' : (target.bottom !== 'auto' ?
478
+ 'bottom' : null),
479
+ h: target.left !== 'auto' ? 'left' : (target.right !== 'auto' ?
480
+ 'right' : null),
481
+ css: target.position
482
+ },
483
+ size: {
484
+ v: sizer.maxHeight !== 'none',
485
+ h: sizer.maxWidth !== 'none'
486
+ },
487
+ margin: {
488
+ top: parseInt(target.marginTop) || 0,
489
+ right: parseInt(target.marginRight) || 0,
490
+ bottom: parseInt(target.marginBottom) || 0,
491
+ left: parseInt(target.marginLeft) || 0
492
+ }
493
+ };
494
+ },
495
+
496
+ finishPositioning: function(target) {
497
+ this.target.style.display = 'none';
498
+ this.target.style.transform = this.target.style.webkitTransform = '';
499
+ // force layout to avoid application of transform
500
+ this.target.offsetWidth;
501
+ this.target.style.transition = this.target.style.webkitTransition = '';
502
+ },
503
+
504
+ getTransition: function(name) {
505
+ return this.meta.byId(name || this.transition);
506
+ },
507
+
508
+ getFocusNode: function() {
509
+ return this.target.querySelector('[autofocus]') || this.target;
510
+ },
511
+
512
+ applyFocus: function() {
513
+ var focusNode = this.getFocusNode();
514
+ if (this.opened) {
515
+ if (!this.autoFocusDisabled) {
516
+ focusNode.focus();
517
+ }
518
+ } else {
519
+ focusNode.blur();
520
+ if (currentOverlay() == this) {
521
+ console.warn('Current core-overlay is attempting to focus itself as next! (bug)');
522
+ } else {
523
+ focusOverlay();
524
+ }
525
+ }
526
+ },
527
+
528
+ positionTarget: function() {
529
+ // fire positioning event
530
+ this.fire('core-overlay-position', {target: this.target,
531
+ sizingTarget: this.sizingTarget, opened: this.opened});
532
+ if (!this.dimensions.position.v) {
533
+ this.target.style.top = '0px';
534
+ }
535
+ if (!this.dimensions.position.h) {
536
+ this.target.style.left = '0px';
537
+ }
538
+ },
539
+
540
+ updateTargetDimensions: function() {
541
+ this.sizeTarget();
542
+ this.repositionTarget();
543
+ },
544
+
545
+ sizeTarget: function() {
546
+ this.sizingTarget.style.boxSizing = 'border-box';
547
+ var dims = this.dimensions;
548
+ var rect = this.target.getBoundingClientRect();
549
+ if (!dims.size.v) {
550
+ this.sizeDimension(rect, dims.position.v, 'top', 'bottom', 'Height');
551
+ }
552
+ if (!dims.size.h) {
553
+ this.sizeDimension(rect, dims.position.h, 'left', 'right', 'Width');
554
+ }
555
+ },
556
+
557
+ sizeDimension: function(rect, positionedBy, start, end, extent) {
558
+ var dims = this.dimensions;
559
+ var flip = (positionedBy === end);
560
+ var m = flip ? start : end;
561
+ var ws = window['inner' + extent];
562
+ var o = dims.margin[m] + (flip ? ws - rect[end] :
563
+ rect[start]);
564
+ var offset = 'offset' + extent;
565
+ var o2 = this.target[offset] - this.sizingTarget[offset];
566
+ this.sizingTarget.style['max' + extent] = (ws - o - o2) + 'px';
567
+ },
568
+
569
+ // vertically and horizontally center if not positioned
570
+ repositionTarget: function() {
571
+ // only center if position fixed.
572
+ if (this.dimensions.position.css !== 'fixed') {
573
+ return;
574
+ }
575
+ if (!this.dimensions.position.v) {
576
+ var t = (window.innerHeight - this.target.offsetHeight) / 2;
577
+ t -= this.dimensions.margin.top;
578
+ this.target.style.top = t + 'px';
579
+ }
580
+
581
+ if (!this.dimensions.position.h) {
582
+ var l = (window.innerWidth - this.target.offsetWidth) / 2;
583
+ l -= this.dimensions.margin.left;
584
+ this.target.style.left = l + 'px';
585
+ }
586
+ },
587
+
588
+ resetTargetDimensions: function() {
589
+ if (!this.dimensions || !this.dimensions.size.v) {
590
+ this.sizingTarget.style.maxHeight = '';
591
+ this.target.style.top = '';
592
+ }
593
+ if (!this.dimensions || !this.dimensions.size.h) {
594
+ this.sizingTarget.style.maxWidth = '';
595
+ this.target.style.left = '';
596
+ }
597
+ this.dimensions = null;
598
+ },
599
+
600
+ tapHandler: function(e) {
601
+ // closeSelector takes precedence since closeAttribute has a default non-null value.
602
+ if (e.target &&
603
+ (this.closeSelector && e.target.matches(this.closeSelector)) ||
604
+ (this.closeAttribute && e.target.hasAttribute(this.closeAttribute))) {
605
+ this.toggle();
606
+ } else {
607
+ if (this.autoCloseJob) {
608
+ this.autoCloseJob.stop();
609
+ this.autoCloseJob = null;
610
+ }
611
+ }
612
+ },
613
+
614
+ // We use the traditional approach of capturing events on document
615
+ // to to determine if the overlay needs to close. However, due to
616
+ // ShadowDOM event retargeting, the event target is not useful. Instead
617
+ // of using it, we attempt to close asynchronously and prevent the close
618
+ // if a tap event is immediately heard on the target.
619
+ // TODO(sorvell): This approach will not work with modal. For
620
+ // this we need a scrim.
621
+ captureHandler: function(e) {
622
+ if (!this.autoCloseDisabled && (currentOverlay() == this)) {
623
+ this.autoCloseJob = this.job(this.autoCloseJob, function() {
624
+ this.close();
625
+ });
626
+ }
627
+ },
628
+
629
+ keydownHandler: function(e) {
630
+ if (!this.autoCloseDisabled && (e.keyCode == this.keyHelper.ESCAPE_KEY)) {
631
+ this.close();
632
+ e.stopPropagation();
633
+ }
634
+ },
635
+
636
+ /**
637
+ * Extensions of core-overlay should implement the `resizeHandler`
638
+ * method to adjust the size and position of the overlay when the
639
+ * browser window resizes.
640
+ * @method resizeHandler
641
+ */
642
+ resizeHandler: function() {
643
+ this.updateTargetDimensions();
644
+ },
645
+
646
+ // TODO(sorvell): these utility methods should not be here.
647
+ addElementListenerList: function(node, events) {
648
+ for (var i in events) {
649
+ this.addElementListener(node, i, events[i]);
650
+ }
651
+ },
652
+
653
+ removeElementListenerList: function(node, events) {
654
+ for (var i in events) {
655
+ this.removeElementListener(node, i, events[i]);
656
+ }
657
+ },
658
+
659
+ enableElementListener: function(enable, node, event, methodName, capture) {
660
+ if (enable) {
661
+ this.addElementListener(node, event, methodName, capture);
662
+ } else {
663
+ this.removeElementListener(node, event, methodName, capture);
664
+ }
665
+ },
666
+
667
+ addElementListener: function(node, event, methodName, capture) {
668
+ var fn = this._makeBoundListener(methodName);
669
+ if (node && fn) {
670
+ Polymer.addEventListener(node, event, fn, capture);
671
+ }
672
+ },
673
+
674
+ removeElementListener: function(node, event, methodName, capture) {
675
+ var fn = this._makeBoundListener(methodName);
676
+ if (node && fn) {
677
+ Polymer.removeEventListener(node, event, fn, capture);
678
+ }
679
+ },
680
+
681
+ _makeBoundListener: function(methodName) {
682
+ var self = this, method = this[methodName];
683
+ if (!method) {
684
+ return;
685
+ }
686
+ var bound = '_bound' + methodName;
687
+ if (!this[bound]) {
688
+ this[bound] = function(e) {
689
+ method.call(self, e);
690
+ };
691
+ }
692
+ return this[bound];
693
+ }
694
+
695
+ }, Polymer.CoreResizer));
696
+
697
+ // TODO(sorvell): This should be an element with private state so it can
698
+ // be independent of overlay.
699
+ // track overlays for z-index and focus managemant
700
+ var overlays = [];
701
+ function addOverlay(overlay) {
702
+ var z0 = currentOverlayZ();
703
+ overlays.push(overlay);
704
+ var z1 = currentOverlayZ();
705
+ if (z1 <= z0) {
706
+ applyOverlayZ(overlay, z0);
707
+ }
708
+ }
709
+
710
+ function removeOverlay(overlay) {
711
+ var i = overlays.indexOf(overlay);
712
+ if (i >= 0) {
713
+ overlays.splice(i, 1);
714
+ setZ(overlay, '');
715
+ }
716
+ }
717
+
718
+ function applyOverlayZ(overlay, aboveZ) {
719
+ setZ(overlay.target, aboveZ + 2);
720
+ }
721
+
722
+ function setZ(element, z) {
723
+ element.style.zIndex = z;
724
+ }
725
+
726
+ function currentOverlay() {
727
+ return overlays[overlays.length-1];
728
+ }
729
+
730
+ var DEFAULT_Z = 10;
731
+
732
+ function currentOverlayZ() {
733
+ var z;
734
+ var current = currentOverlay();
735
+ if (current) {
736
+ var z1 = window.getComputedStyle(current.target).zIndex;
737
+ if (!isNaN(z1)) {
738
+ z = Number(z1);
739
+ }
740
+ }
741
+ return z || DEFAULT_Z;
742
+ }
743
+
744
+ function focusOverlay() {
745
+ var current = currentOverlay();
746
+ // We have to be careful to focus the next overlay _after_ any current
747
+ // transitions are complete (due to the state being toggled prior to the
748
+ // transition). Otherwise, we risk infinite recursion when a transitioning
749
+ // (closed) overlay becomes the current overlay.
750
+ //
751
+ // NOTE: We make the assumption that any overlay that completes a transition
752
+ // will call into focusOverlay to kick the process back off. Currently:
753
+ // transitionend -> applyFocus -> focusOverlay.
754
+ if (current && !current.transitioning) {
755
+ current.applyFocus();
756
+ }
757
+ }
758
+
759
+ var backdrops = [];
760
+ function trackBackdrop(element) {
761
+ if (element.opened) {
762
+ backdrops.push(element);
763
+ } else {
764
+ var i = backdrops.indexOf(element);
765
+ if (i >= 0) {
766
+ backdrops.splice(i, 1);
767
+ }
768
+ }
769
+ }
770
+
771
+ function getBackdrops() {
772
+ return backdrops;
773
+ }
774
+ })();
775
+ </script>
776
+ </polymer-element>