easycomments 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,547 @@
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
4
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS
5
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
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
8
+ -->
9
+
10
+ <!--
11
+
12
+ Material Design: <a href="http://www.google.com/design/spec/components/text-fields.html">Text fields</a>
13
+
14
+ `paper-input-decorator` adds Material Design input field styling and animations to an element.
15
+
16
+ Example:
17
+
18
+ <paper-input-decorator label="Your Name">
19
+ <input is="core-input">
20
+ </paper-input-decorator>
21
+
22
+ <paper-input-decorator floatingLabel label="Your address">
23
+ <textarea></textarea>
24
+ </paper-input-decorator>
25
+
26
+ Theming
27
+ -------
28
+
29
+ `paper-input-decorator` uses `core-style` for global theming. The following options are available:
30
+
31
+ - `CoreStyle.g.paperInput.labelColor` - The inline label, floating label, error message and error icon color when the input does not have focus.
32
+ - `CoreStyle.g.paperInput.focusedColor` - The floating label and the underline color when the input has focus.
33
+ - `CoreStyle.g.paperInput.invalidColor` - The error message, the error icon, the floating label and the underline's color when the input is invalid and has focus.
34
+
35
+ To add custom styling to only some elements, use these selectors:
36
+
37
+ paper-input-decorator /deep/ .label-text,
38
+ paper-input-decorator /deep/ .error {
39
+ /* inline label, floating label, error message and error icon color when the input is unfocused */
40
+ color: green;
41
+ }
42
+
43
+ paper-input-decorator /deep/ ::-webkit-input-placeholder {
44
+ /* platform specific rules for placeholder text */
45
+ color: green;
46
+ }
47
+ paper-input-decorator /deep/ ::-moz-placeholder {
48
+ color: green;
49
+ }
50
+ paper-input-decorator /deep/ :-ms-input-placeholder {
51
+ color: green;
52
+ }
53
+
54
+ paper-input-decorator /deep/ .unfocused-underline {
55
+ /* line color when the input is unfocused */
56
+ background-color: green;
57
+ }
58
+
59
+ paper-input-decorator[focused] /deep/ .floating-label .label-text {
60
+ /* floating label color when the input is focused */
61
+ color: orange;
62
+ }
63
+
64
+ paper-input-decorator /deep/ .focused-underline {
65
+ /* line color when the input is focused */
66
+ background-color: orange;
67
+ }
68
+
69
+ paper-input-decorator.invalid[focused] /deep/ .floated-label .label-text,
70
+ paper-input-decorator[focused] /deep/ .error {
71
+ /* floating label, error message nad error icon color when the input is invalid and focused */
72
+ color: salmon;
73
+ }
74
+
75
+ paper-input-decorator.invalid /deep/ .focused-underline {
76
+ /* line and color when the input is invalid and focused */
77
+ background-color: salmon;
78
+ }
79
+
80
+ Form submission
81
+ ---------------
82
+
83
+ You can use inputs decorated with this element in a `form` as usual.
84
+
85
+ Validation
86
+ ----------
87
+
88
+ Because you provide the `input` element to `paper-input-decorator`, you can use any validation library
89
+ or the <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation">HTML5 Constraints Validation API</a>
90
+ to implement validation. Set the `isInvalid` attribute when the input is validated, and provide an
91
+ error message in the `error` attribute.
92
+
93
+ Example:
94
+
95
+ <paper-input-decorator id="paper1" error="Value must start with a number!">
96
+ <input id="input1" is="core-input" pattern="^[0-9].*">
97
+ </paper-input-decorator>
98
+ <button onclick="validate()"></button>
99
+ <script>
100
+ function validate() {
101
+ var decorator = document.getElementById('paper1');
102
+ var input = document.getElementById('input1');
103
+ decorator.isInvalid = !input.validity.valid;
104
+ }
105
+ </script>
106
+
107
+ Example to validate as the user types:
108
+
109
+ <template is="auto-binding">
110
+ <paper-input-decorator id="paper2" error="Value must start with a number!" isInvalid="{{!$.input2.validity.valid}}">
111
+ <input id="input2" is="core-input" pattern="^[0-9].*">
112
+ </paper-input-decorator>
113
+ </template>
114
+
115
+ Accessibility
116
+ -------------
117
+
118
+ `paper-input-decorator` will automatically set the `aria-label` attribute on the nested input
119
+ to the value of `label`. Do not set the `placeholder` attribute on the nested input, as it will
120
+ conflict with this element.
121
+
122
+ @group Paper Elements
123
+ @element paper-input-decorator
124
+ @homepage github.io
125
+ -->
126
+ <link href="../polymer/polymer.html" rel="import">
127
+ <link href="../core-icon/core-icon.html" rel="import">
128
+ <link href="../core-icons/core-icons.html" rel="import">
129
+ <link href="../core-input/core-input.html" rel="import">
130
+ <link href="../core-style/core-style.html" rel="import">
131
+
132
+ <core-style id="paper-input-decorator">
133
+
134
+ .label-text,
135
+ .error {
136
+ color: {{g.paperInput.labelColor}};
137
+ }
138
+
139
+ ::-webkit-input-placeholder {
140
+ color: {{g.paperInput.labelColor}};
141
+ }
142
+
143
+ ::-moz-placeholder {
144
+ color: {{g.paperInput.labelColor}};
145
+ }
146
+
147
+ :-ms-input-placeholder {
148
+ color: {{g.paperInput.labelColor}};
149
+ }
150
+
151
+ .unfocused-underline {
152
+ background-color: {{g.paperInput.labelColor}};
153
+ }
154
+
155
+ :host([focused]) .floated-label .label-text {
156
+ color: {{g.paperInput.focusedColor}};
157
+ }
158
+
159
+ .focused-underline {
160
+ background-color: {{g.paperInput.focusedColor}};
161
+ }
162
+
163
+ :host(.invalid) .floated-label .label-text,
164
+ .error {
165
+ color: {{g.paperInput.invalidColor}};
166
+ }
167
+
168
+ :host(.invalid) .unfocused-underline,
169
+ :host(.invalid) .focused-underline {
170
+ background-color: {{g.paperInput.invalidColor}};
171
+ }
172
+
173
+ </core-style>
174
+
175
+ <polymer-element name="paper-input-decorator" layout vertical
176
+ on-transitionEnd="{{transitionEndAction}}" on-webkitTransitionEnd="{{transitionEndAction}}"
177
+ on-input="{{inputAction}}"
178
+ on-down="{{downAction}}"
179
+ on-tap="{{tapAction}}"
180
+ on-char-counter-error="{{charCounterErrorAction}}">
181
+
182
+ <template>
183
+
184
+ <link href="paper-input-decorator.css" rel="stylesheet">
185
+ <core-style ref="paper-input-decorator"></core-style>
186
+
187
+ <div class="floated-label" aria-hidden="true" hidden?="{{!floatingLabel}}" invisible?="{{!floatingLabelVisible || labelAnimated}}">
188
+ <!-- needed for floating label animation measurement -->
189
+ <span id="floatedLabelText" class="label-text">{{label}}</span>
190
+ </div>
191
+
192
+ <div class="input-body" flex auto relative>
193
+
194
+ <div class="label" fit invisible aria-hidden="true">
195
+ <!-- needed for floating label animation measurement -->
196
+ <span id="labelText" class="label-text" invisible?="{{!_labelVisible}}" animated?="{{labelAnimated}}">{{label}}</span>
197
+ </div>
198
+
199
+ <content select="*:not(.counter)"></content>
200
+
201
+ </div>
202
+
203
+ <div id="underline" class="underline" relative>
204
+ <div class="unfocused-underline" fit invisible?="{{disabled}}"></div>
205
+ <div id="focusedUnderline" class="focused-underline" fit invisible?="{{!underlineVisible}}" animated?="{{underlineAnimated}}"></div>
206
+ </div>
207
+
208
+ <div class="footer" layout horizontal end-justified>
209
+ <div class="error" flex layout horizontal center hidden?="{{!isInvalid}}">
210
+ <div class="error-text" flex auto role="alert" aria-hidden="{{!isInvalid}}">{{error}}</div>
211
+ <core-icon id="errorIcon" class="error-icon" icon="warning"></core-icon>
212
+ </div>
213
+ <div aria-hidden="true">
214
+ <content select=".counter"></content>
215
+ </div>
216
+ </div>
217
+
218
+ </template>
219
+
220
+ <script>
221
+
222
+ (function() {
223
+
224
+ var paperInput = CoreStyle.g.paperInput = CoreStyle.g.paperInput || {};
225
+
226
+ paperInput.labelColor = '#757575';
227
+ paperInput.focusedColor = '#4059a9';
228
+ paperInput.invalidColor = '#d34336';
229
+
230
+ Polymer({
231
+
232
+ publish: {
233
+
234
+ /**
235
+ * The label for this input. It normally appears as grey text inside
236
+ * the text input and disappears once the user enters text.
237
+ *
238
+ * @attribute label
239
+ * @type string
240
+ * @default ''
241
+ */
242
+ label: '',
243
+
244
+ /**
245
+ * If true, the label will "float" above the text input once the
246
+ * user enters text instead of disappearing.
247
+ *
248
+ * @attribute floatingLabel
249
+ * @type boolean
250
+ * @default false
251
+ */
252
+ floatingLabel: false,
253
+
254
+ /**
255
+ * Set to true to style the element as disabled.
256
+ *
257
+ * @attribute disabled
258
+ * @type boolean
259
+ * @default false
260
+ */
261
+ disabled: {value: false, reflect: true},
262
+
263
+ /**
264
+ * Use this property to override the automatic label visibility.
265
+ * If this property is set to `true` or `false`, the label visibility
266
+ * will respect this value instead of be based on whether there is
267
+ * a non-null value in the input.
268
+ *
269
+ * @attribute labelVisible
270
+ * @type boolean
271
+ * @default false
272
+ */
273
+ labelVisible: null,
274
+
275
+ /**
276
+ * Set this property to true to show the error message.
277
+ *
278
+ * @attribute isInvalid
279
+ * @type boolean
280
+ * @default false
281
+ */
282
+ isInvalid: false,
283
+
284
+ /**
285
+ * Set this property to true to validate the input as the user types.
286
+ * This will not validate when changing the input programmatically; call
287
+ * `validate()` instead.
288
+ *
289
+ * @attribute autoValidate
290
+ * @type boolean
291
+ * @default false
292
+ */
293
+ autoValidate: false,
294
+
295
+ /**
296
+ * The message to display if the input value fails validation. If this
297
+ * is unset or the empty string, a default message is displayed depending
298
+ * on the type of validation error.
299
+ *
300
+ * @attribute error
301
+ * @type string
302
+ */
303
+ error: '',
304
+
305
+ focused: {value: false, reflect: true}
306
+
307
+ },
308
+
309
+ computed: {
310
+ floatingLabelVisible: 'floatingLabel && !_labelVisible',
311
+ _labelVisible: '(labelVisible === true || labelVisible === false) ? labelVisible : _autoLabelVisible'
312
+ },
313
+
314
+ ready: function() {
315
+ // Delegate focus/blur events
316
+ Polymer.addEventListener(this, 'focus', this.focusAction.bind(this), true);
317
+ Polymer.addEventListener(this, 'blur', this.blurAction.bind(this), true);
318
+ },
319
+
320
+ attached: function() {
321
+ this.input = this.querySelector('input,textarea');
322
+
323
+ this.mo = new MutationObserver(function() {
324
+ this.input = this.querySelector('input,textarea');
325
+ }.bind(this));
326
+ this.mo.observe(this, {childList: true});
327
+ },
328
+
329
+ detached: function() {
330
+ this.mo.disconnect();
331
+ this.mo = null;
332
+ },
333
+
334
+ prepareLabelTransform: function() {
335
+ var toRect = this.$.floatedLabelText.getBoundingClientRect();
336
+ var fromRect = this.$.labelText.getBoundingClientRect();
337
+ if (toRect.width !== 0) {
338
+ var sy = toRect.height / fromRect.height;
339
+ this.$.labelText.cachedTransform =
340
+ 'scale3d(' + (toRect.width / fromRect.width) + ',' + sy + ',1) ' +
341
+ 'translate3d(0,' + (toRect.top - fromRect.top) / sy + 'px,0)';
342
+ }
343
+ },
344
+
345
+ animateFloatingLabel: function() {
346
+ if (!this.floatingLabel || this.labelAnimated) {
347
+ return false;
348
+ }
349
+
350
+ if (!this.$.labelText.cachedTransform) {
351
+ this.prepareLabelTransform();
352
+ }
353
+
354
+ // If there's still no cached transform, the input is invisible so don't
355
+ // do the animation.
356
+ if (!this.$.labelText.cachedTransform) {
357
+ return false;
358
+ }
359
+
360
+ this.labelAnimated = true;
361
+ // Handle interrupted animation
362
+ this.async(function() {
363
+ this.transitionEndAction();
364
+ }, null, 250);
365
+
366
+ if (this._labelVisible) {
367
+ // Handle if the label started out floating
368
+ if (!this.$.labelText.style.webkitTransform && !this.$.labelText.style.transform) {
369
+ this.$.labelText.style.webkitTransform = this.$.labelText.cachedTransform;
370
+ this.$.labelText.style.transform = this.$.labelText.cachedTransform;
371
+ this.$.labelText.offsetTop;
372
+ }
373
+ this.$.labelText.style.webkitTransform = '';
374
+ this.$.labelText.style.transform = '';
375
+ } else {
376
+ this.$.labelText.style.webkitTransform = this.$.labelText.cachedTransform;
377
+ this.$.labelText.style.transform = this.$.labelText.cachedTransform;
378
+ this.input.placeholder = '';
379
+ }
380
+
381
+ return true;
382
+ },
383
+
384
+ animateUnderline: function(e) {
385
+ if (this.focused) {
386
+ var rect = this.$.underline.getBoundingClientRect();
387
+ var right = e.x - rect.left;
388
+ this.$.focusedUnderline.style.mozTransformOrigin = right + 'px';
389
+ this.$.focusedUnderline.style.webkitTransformOrigin = right + 'px ';
390
+ this.$.focusedUnderline.style.transformOriginX = right + 'px';
391
+
392
+ // Animations only run when the user interacts with the input
393
+ this.underlineAnimated = true;
394
+ }
395
+ },
396
+
397
+ /**
398
+ * Validate the input using HTML5 Constraints.
399
+ *
400
+ * @method validate
401
+ * @return {boolean} True if the input is valid.
402
+ */
403
+ validate: function() {
404
+ this.isInvalid = !this.input.validity.valid;
405
+ return this.input.validity.valid;
406
+ },
407
+
408
+ _labelVisibleChanged: function(old) {
409
+ // do not do the animation on first render
410
+ if (old !== undefined) {
411
+ if (!this.animateFloatingLabel()) {
412
+ this.updateInputLabel(this.input, this.label);
413
+ }
414
+ }
415
+ },
416
+
417
+ labelVisibleChanged: function() {
418
+ if (this.labelVisible === 'true') {
419
+ this.labelVisible = true;
420
+ } else if (this.labelVisible === 'false') {
421
+ this.labelVisible = false;
422
+ }
423
+ },
424
+
425
+ labelChanged: function() {
426
+ if (this.input) {
427
+ this.updateInputLabel(this.input, this.label);
428
+ }
429
+ },
430
+
431
+ isInvalidChanged: function() {
432
+ this.classList.toggle('invalid', this.isInvalid);
433
+ },
434
+
435
+ focusedChanged: function() {
436
+ this.updateLabelVisibility(this.input && this.input.value);
437
+ if (this.lastEvent) {
438
+ this.animateUnderline(this.lastEvent);
439
+ this.lastEvent = null;
440
+ }
441
+ this.underlineVisible = this.focused;
442
+ },
443
+
444
+ inputChanged: function(old) {
445
+ if (this.input) {
446
+ this.updateLabelVisibility(this.input.value);
447
+ this.updateInputLabel(this.input, this.label);
448
+
449
+ if (this.autoValidate) {
450
+ this.validate();
451
+ }
452
+ }
453
+ if (old) {
454
+ this.updateInputLabel(old, '');
455
+ }
456
+ },
457
+
458
+ focusAction: function() {
459
+ this.focused = true;
460
+ },
461
+
462
+ blurAction: function() {
463
+ this.focused = false;
464
+ },
465
+
466
+ /**
467
+ * Updates the label visibility based on a value. This is handled automatically
468
+ * if the user is typing, but if you imperatively set the input value you need
469
+ * to call this function.
470
+ *
471
+ * @method updateLabelVisibility
472
+ * @param {string} value
473
+ */
474
+ updateLabelVisibility: function(value) {
475
+ var v = (value !== null && value !== undefined) ? String(value) : value;
476
+ this._autoLabelVisible = (!this.focused && !v) || (!this.floatingLabel && !v);
477
+ },
478
+
479
+ updateInputLabel: function(input, label) {
480
+ if (this._labelVisible) {
481
+ this.input.placeholder = this.label;
482
+ } else {
483
+ this.input.placeholder = '';
484
+ }
485
+ if (label) {
486
+ input.setAttribute('aria-label', label);
487
+ } else {
488
+ input.removeAttribute('aria-label');
489
+ }
490
+ },
491
+
492
+ inputAction: function() {
493
+ this.updateLabelVisibility(this.input.value);
494
+ if (this.autoValidate) {
495
+ this.validate();
496
+ }
497
+ },
498
+
499
+ downAction: function(e) {
500
+ // eat the event and do nothing if already focused
501
+ if (e.target !== this.input && this.focused) {
502
+ e.preventDefault();
503
+ return;
504
+ }
505
+ // cache the event here because "down" fires before "focus" when tapping on
506
+ // the input and the underline animation runs on focus change
507
+ this.lastEvent = e;
508
+ },
509
+
510
+ tapAction: function(e) {
511
+ if (this.disabled) {
512
+ return;
513
+ }
514
+
515
+ if (this.focused) {
516
+ return;
517
+ }
518
+
519
+ if (this.input) {
520
+ this.input.focus();
521
+ e.preventDefault();
522
+ }
523
+ },
524
+
525
+ transitionEndAction: function() {
526
+ this.underlineAnimated = false;
527
+ this.labelAnimated = false;
528
+ if (this._labelVisible) {
529
+ this.input.placeholder = this.label;
530
+ }
531
+ },
532
+
533
+ charCounterErrorAction: function(e) {
534
+ this.isInvalid = e.detail.hasError;
535
+
536
+ // If the allowed characters have been exceeded, show either the error
537
+ // icon, or the character counter, but not both.
538
+ this.$.errorIcon.hidden = e.detail.hideErrorIcon;
539
+ }
540
+
541
+ });
542
+
543
+ }());
544
+
545
+ </script>
546
+
547
+ </polymer-element>
@@ -0,0 +1,145 @@
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
4
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS
5
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
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
8
+ -->
9
+
10
+ <!--
11
+
12
+ Material Design: <a href="http://www.google.com/design/spec/components/text-fields.html#text-fields-single-line-text-field">Single line text field</a>
13
+
14
+ `paper-input` is a single-line text field for user input. It is a convenience element composed of
15
+ a `paper-input-decorator` and a `input is="core-input"`.
16
+
17
+ Example:
18
+
19
+ <paper-input label="Your Name"></paper-input>
20
+
21
+ If you need more control over the `input` element, use `paper-input-decorator`.
22
+
23
+ Theming
24
+ -------
25
+
26
+ `paper-input` can be styled similarly to `paper-input-decorator`.
27
+
28
+ Form submission
29
+ ---------------
30
+
31
+ Unlike inputs using `paper-input-decorator` directly, `paper-input` does not work out of
32
+ the box with the native `form` element. This is because the native `form` is not aware of
33
+ shadow DOM and does not treat `paper-input` as a form element.
34
+
35
+ Use `paper-input-decorator` directly, or see
36
+ <a href="https://github.com/garstasio/ajax-form">`ajax-form`</a> for a possible solution
37
+ to submitting a `paper-input`.
38
+
39
+ Validation
40
+ ----------
41
+
42
+ Use `paper-input-decorator` if you would like to implement validation.
43
+
44
+ @group Paper Elements
45
+ @element paper-input
46
+ @homepage github.io
47
+ -->
48
+ <link href="../polymer/polymer.html" rel="import">
49
+ <link href="../core-input/core-input.html" rel="import">
50
+
51
+ <link href="paper-input-decorator.html" rel="import">
52
+
53
+ <polymer-element name="paper-input">
54
+
55
+ <template>
56
+
57
+ <style>
58
+ :host {
59
+ display: inline-block;
60
+ }
61
+ </style>
62
+
63
+ <paper-input-decorator id="decorator" label="{{label}}" floatingLabel="{{floatingLabel}}" value="{{value}}" disabled?="{{disabled}}">
64
+ <input is="core-input" id="input" value="{{value}}" committedValue="{{committedValue}}" on-change="{{changeAction}}" disabled?="{{disabled}}">
65
+ </paper-input-decorator>
66
+
67
+ </template>
68
+
69
+ <script>
70
+
71
+ Polymer('paper-input', {
72
+
73
+ publish: {
74
+ /**
75
+ * The label for this input. It normally appears as grey text inside
76
+ * the text input and disappears once the user enters text.
77
+ *
78
+ * @attribute label
79
+ * @type string
80
+ * @default ''
81
+ */
82
+ label: '',
83
+
84
+ /**
85
+ * If true, the label will "float" above the text input once the
86
+ * user enters text instead of disappearing.
87
+ *
88
+ * @attribute floatingLabel
89
+ * @type boolean
90
+ * @default false
91
+ */
92
+ floatingLabel: false,
93
+
94
+ /**
95
+ * Set to true to style the element as disabled.
96
+ *
97
+ * @attribute disabled
98
+ * @type boolean
99
+ * @default false
100
+ */
101
+ disabled: {value: false, reflect: true},
102
+
103
+ /**
104
+ * The current value of the input.
105
+ *
106
+ * @attribute value
107
+ * @type String
108
+ * @default ''
109
+ */
110
+ value: '',
111
+
112
+ /**
113
+ * The most recently committed value of the input.
114
+ *
115
+ * @attribute committedValue
116
+ * @type String
117
+ * @default ''
118
+ */
119
+ committedValue: ''
120
+
121
+ },
122
+
123
+ /**
124
+ * Focuses the `input`.
125
+ *
126
+ * @method focus
127
+ */
128
+ focus: function() {
129
+ this.$.input.focus();
130
+ },
131
+
132
+ valueChanged: function() {
133
+ this.$.decorator.updateLabelVisibility(this.value);
134
+ },
135
+
136
+ changeAction: function(e) {
137
+ // re-fire event that does not bubble across shadow roots
138
+ this.fire('change', null, this);
139
+ }
140
+
141
+ });
142
+
143
+ </script>
144
+
145
+ </polymer-element>