closure 1.1.692

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 (1494) hide show
  1. data/.gitignore +6 -0
  2. data/.yardopts +3 -0
  3. data/LICENSE +202 -0
  4. data/README.md +26 -0
  5. data/beanshell/LICENSE +12 -0
  6. data/beanshell/bsh-core-2.0b4.jar +0 -0
  7. data/closure-compiler/COPYING +202 -0
  8. data/closure-compiler/README +278 -0
  9. data/closure-compiler/compiler.jar +0 -0
  10. data/closure-library/AUTHORS +12 -0
  11. data/closure-library/LICENSE +176 -0
  12. data/closure-library/README +6 -0
  13. data/closure-library/all_tests.html +113 -0
  14. data/closure-library/alltests.js +16 -0
  15. data/closure-library/closure/bin/build/closurebuilder.py +257 -0
  16. data/closure-library/closure/bin/build/depstree.py +186 -0
  17. data/closure-library/closure/bin/build/depstree_test.py +127 -0
  18. data/closure-library/closure/bin/build/depswriter.py +197 -0
  19. data/closure-library/closure/bin/build/jscompiler.py +69 -0
  20. data/closure-library/closure/bin/build/source.py +86 -0
  21. data/closure-library/closure/bin/build/source_test.py +57 -0
  22. data/closure-library/closure/bin/build/treescan.py +78 -0
  23. data/closure-library/closure/bin/calcdeps.py +570 -0
  24. data/closure-library/closure/bin/scopify.py +211 -0
  25. data/closure-library/closure/css/inlay/g-base.css +82 -0
  26. data/closure-library/closure/css/inlay/g-fixed.css +158 -0
  27. data/closure-library/closure/css/inlay/g-ratio.css +253 -0
  28. data/closure-library/closure/goog/array/array.js +1300 -0
  29. data/closure-library/closure/goog/array/array_test.html +1524 -0
  30. data/closure-library/closure/goog/asserts/asserts.js +277 -0
  31. data/closure-library/closure/goog/asserts/asserts_test.html +163 -0
  32. data/closure-library/closure/goog/async/conditionaldelay.js +238 -0
  33. data/closure-library/closure/goog/async/conditionaldelay_test.html +227 -0
  34. data/closure-library/closure/goog/async/delay.js +174 -0
  35. data/closure-library/closure/goog/async/delay_test.html +148 -0
  36. data/closure-library/closure/goog/async/throttle.js +189 -0
  37. data/closure-library/closure/goog/async/throttle_test.html +102 -0
  38. data/closure-library/closure/goog/base.js +1471 -0
  39. data/closure-library/closure/goog/base_test.html +1166 -0
  40. data/closure-library/closure/goog/bootstrap/webworkers.js +37 -0
  41. data/closure-library/closure/goog/color/alpha.js +436 -0
  42. data/closure-library/closure/goog/color/alpha_test.html +234 -0
  43. data/closure-library/closure/goog/color/color.js +757 -0
  44. data/closure-library/closure/goog/color/color_test.html +645 -0
  45. data/closure-library/closure/goog/color/names.js +176 -0
  46. data/closure-library/closure/goog/crypt/arc4.js +141 -0
  47. data/closure-library/closure/goog/crypt/arc4_test.html +42 -0
  48. data/closure-library/closure/goog/crypt/base64.js +267 -0
  49. data/closure-library/closure/goog/crypt/base64_test.html +106 -0
  50. data/closure-library/closure/goog/crypt/basen.js +242 -0
  51. data/closure-library/closure/goog/crypt/basen_test.html +167 -0
  52. data/closure-library/closure/goog/crypt/crypt.js +103 -0
  53. data/closure-library/closure/goog/crypt/crypt_test.html +68 -0
  54. data/closure-library/closure/goog/crypt/hash32.js +184 -0
  55. data/closure-library/closure/goog/crypt/hash32_test.html +287 -0
  56. data/closure-library/closure/goog/crypt/sha1.js +238 -0
  57. data/closure-library/closure/goog/crypt/sha1_test.html +47 -0
  58. data/closure-library/closure/goog/css/autocomplete.css +43 -0
  59. data/closure-library/closure/goog/css/bubble.css +84 -0
  60. data/closure-library/closure/goog/css/button.css +38 -0
  61. data/closure-library/closure/goog/css/charpicker.css +201 -0
  62. data/closure-library/closure/goog/css/checkbox.css +38 -0
  63. data/closure-library/closure/goog/css/colormenubutton.css +25 -0
  64. data/closure-library/closure/goog/css/colorpalette.css +54 -0
  65. data/closure-library/closure/goog/css/colorpicker-simplegrid.css +50 -0
  66. data/closure-library/closure/goog/css/combobox.css +57 -0
  67. data/closure-library/closure/goog/css/common.css +41 -0
  68. data/closure-library/closure/goog/css/css3button.css +77 -0
  69. data/closure-library/closure/goog/css/css3menubutton.css +23 -0
  70. data/closure-library/closure/goog/css/custombutton.css +164 -0
  71. data/closure-library/closure/goog/css/datepicker.css +148 -0
  72. data/closure-library/closure/goog/css/dialog.css +72 -0
  73. data/closure-library/closure/goog/css/dimensionpicker.css +47 -0
  74. data/closure-library/closure/goog/css/dragdropdetector.css +48 -0
  75. data/closure-library/closure/goog/css/editor/bubble.css +73 -0
  76. data/closure-library/closure/goog/css/editor/dialog.css +66 -0
  77. data/closure-library/closure/goog/css/editor/linkdialog.css +36 -0
  78. data/closure-library/closure/goog/css/editortoolbar.css +225 -0
  79. data/closure-library/closure/goog/css/filteredmenu.css +30 -0
  80. data/closure-library/closure/goog/css/filterobservingmenuitem.css +25 -0
  81. data/closure-library/closure/goog/css/flatbutton.css +65 -0
  82. data/closure-library/closure/goog/css/flatmenubutton.css +63 -0
  83. data/closure-library/closure/goog/css/hovercard.css +51 -0
  84. data/closure-library/closure/goog/css/hsvapalette.css +231 -0
  85. data/closure-library/closure/goog/css/hsvpalette.css +179 -0
  86. data/closure-library/closure/goog/css/imagelessbutton.css +160 -0
  87. data/closure-library/closure/goog/css/imagelessmenubutton.css +23 -0
  88. data/closure-library/closure/goog/css/inputdatepicker.css +12 -0
  89. data/closure-library/closure/goog/css/linkbutton.css +26 -0
  90. data/closure-library/closure/goog/css/menu.css +27 -0
  91. data/closure-library/closure/goog/css/menubutton.css +169 -0
  92. data/closure-library/closure/goog/css/menuitem.css +96 -0
  93. data/closure-library/closure/goog/css/menuseparator.css +19 -0
  94. data/closure-library/closure/goog/css/multitestrunner.css +121 -0
  95. data/closure-library/closure/goog/css/offline.css +147 -0
  96. data/closure-library/closure/goog/css/palette.css +36 -0
  97. data/closure-library/closure/goog/css/popupdatepicker.css +17 -0
  98. data/closure-library/closure/goog/css/roundedpanel.css +29 -0
  99. data/closure-library/closure/goog/css/roundedtab.css +158 -0
  100. data/closure-library/closure/goog/css/submenu.css +28 -0
  101. data/closure-library/closure/goog/css/tab.css +91 -0
  102. data/closure-library/closure/goog/css/tabbar.css +52 -0
  103. data/closure-library/closure/goog/css/tablesorter.css +14 -0
  104. data/closure-library/closure/goog/css/toolbar.css +400 -0
  105. data/closure-library/closure/goog/css/tooltip.css +14 -0
  106. data/closure-library/closure/goog/css/tree.css +147 -0
  107. data/closure-library/closure/goog/css/tristatemenuitem.css +43 -0
  108. data/closure-library/closure/goog/cssom/cssom.js +447 -0
  109. data/closure-library/closure/goog/cssom/cssom_test.html +343 -0
  110. data/closure-library/closure/goog/cssom/cssom_test_import_1.css +11 -0
  111. data/closure-library/closure/goog/cssom/cssom_test_import_2.css +10 -0
  112. data/closure-library/closure/goog/cssom/cssom_test_link_1.css +10 -0
  113. data/closure-library/closure/goog/cssom/iframe/style.js +1020 -0
  114. data/closure-library/closure/goog/cssom/iframe/style_test.html +391 -0
  115. data/closure-library/closure/goog/cssom/iframe/style_test_import.css +10 -0
  116. data/closure-library/closure/goog/datasource/datamanager.js +566 -0
  117. data/closure-library/closure/goog/datasource/datasource.js +646 -0
  118. data/closure-library/closure/goog/datasource/datasource_test.html +265 -0
  119. data/closure-library/closure/goog/datasource/expr.js +544 -0
  120. data/closure-library/closure/goog/datasource/expr_test.html +97 -0
  121. data/closure-library/closure/goog/datasource/fastdatanode.js +792 -0
  122. data/closure-library/closure/goog/datasource/fastdatanode_test.html +254 -0
  123. data/closure-library/closure/goog/datasource/jsdatasource.js +460 -0
  124. data/closure-library/closure/goog/datasource/jsondatasource.js +146 -0
  125. data/closure-library/closure/goog/datasource/jsxmlhttpdatasource.js +191 -0
  126. data/closure-library/closure/goog/datasource/jsxmlhttpdatasource_test.html +94 -0
  127. data/closure-library/closure/goog/datasource/xmldatasource.js +407 -0
  128. data/closure-library/closure/goog/date/date.js +1642 -0
  129. data/closure-library/closure/goog/date/date_test.html +1293 -0
  130. data/closure-library/closure/goog/date/datelike.js +27 -0
  131. data/closure-library/closure/goog/date/daterange.js +398 -0
  132. data/closure-library/closure/goog/date/daterange_test.html +213 -0
  133. data/closure-library/closure/goog/date/relative.js +425 -0
  134. data/closure-library/closure/goog/date/relative_test.html +124 -0
  135. data/closure-library/closure/goog/date/utcdatetime.js +178 -0
  136. data/closure-library/closure/goog/date/utcdatetime_test.html +119 -0
  137. data/closure-library/closure/goog/debug/console.js +138 -0
  138. data/closure-library/closure/goog/debug/debug.js +452 -0
  139. data/closure-library/closure/goog/debug/debug_test.html +32 -0
  140. data/closure-library/closure/goog/debug/debugwindow.js +582 -0
  141. data/closure-library/closure/goog/debug/devcss/devcss.js +435 -0
  142. data/closure-library/closure/goog/debug/devcss/devcss_test.html +365 -0
  143. data/closure-library/closure/goog/debug/devcss/devcssrunner.js +26 -0
  144. data/closure-library/closure/goog/debug/divconsole.js +141 -0
  145. data/closure-library/closure/goog/debug/enhanceerror_test.html +138 -0
  146. data/closure-library/closure/goog/debug/entrypointregistry.js +111 -0
  147. data/closure-library/closure/goog/debug/entrypointregistry_test.html +63 -0
  148. data/closure-library/closure/goog/debug/error.js +47 -0
  149. data/closure-library/closure/goog/debug/error_test.html +85 -0
  150. data/closure-library/closure/goog/debug/errorhandler.js +234 -0
  151. data/closure-library/closure/goog/debug/errorhandler_async_test.html +112 -0
  152. data/closure-library/closure/goog/debug/errorhandler_test.html +186 -0
  153. data/closure-library/closure/goog/debug/errorhandlerweakdep.js +38 -0
  154. data/closure-library/closure/goog/debug/errorreporter.js +324 -0
  155. data/closure-library/closure/goog/debug/errorreporter_test.html +289 -0
  156. data/closure-library/closure/goog/debug/fancywindow.js +265 -0
  157. data/closure-library/closure/goog/debug/formatter.js +314 -0
  158. data/closure-library/closure/goog/debug/gcdiagnostics.js +143 -0
  159. data/closure-library/closure/goog/debug/logbuffer.js +147 -0
  160. data/closure-library/closure/goog/debug/logbuffer_test.html +105 -0
  161. data/closure-library/closure/goog/debug/logger.js +809 -0
  162. data/closure-library/closure/goog/debug/logger_test.html +208 -0
  163. data/closure-library/closure/goog/debug/logrecord.js +271 -0
  164. data/closure-library/closure/goog/debug/reflect.js +159 -0
  165. data/closure-library/closure/goog/debug/reflect_test.html +81 -0
  166. data/closure-library/closure/goog/debug/relativetimeprovider.js +83 -0
  167. data/closure-library/closure/goog/debug/tracer.js +750 -0
  168. data/closure-library/closure/goog/debug/tracer_test.html +57 -0
  169. data/closure-library/closure/goog/demos/advancedtooltip.html +78 -0
  170. data/closure-library/closure/goog/demos/animationqueue.html +149 -0
  171. data/closure-library/closure/goog/demos/autocomplete-basic.html +56 -0
  172. data/closure-library/closure/goog/demos/autocompleteremote.html +40 -0
  173. data/closure-library/closure/goog/demos/autocompleteremotedata.js +18 -0
  174. data/closure-library/closure/goog/demos/autocompleterichremote.html +137 -0
  175. data/closure-library/closure/goog/demos/autocompleterichremotedata.js +33 -0
  176. data/closure-library/closure/goog/demos/bidiinput.html +72 -0
  177. data/closure-library/closure/goog/demos/bubble.html +250 -0
  178. data/closure-library/closure/goog/demos/button.html +395 -0
  179. data/closure-library/closure/goog/demos/charcounter.html +57 -0
  180. data/closure-library/closure/goog/demos/charpicker.html +64 -0
  181. data/closure-library/closure/goog/demos/checkbox.html +122 -0
  182. data/closure-library/closure/goog/demos/color-contrast.html +60 -0
  183. data/closure-library/closure/goog/demos/colormenubutton.html +213 -0
  184. data/closure-library/closure/goog/demos/colorpicker.html +43 -0
  185. data/closure-library/closure/goog/demos/combobox.html +125 -0
  186. data/closure-library/closure/goog/demos/container.html +670 -0
  187. data/closure-library/closure/goog/demos/control.html +477 -0
  188. data/closure-library/closure/goog/demos/css/demo.css +75 -0
  189. data/closure-library/closure/goog/demos/css/emojipicker.css +36 -0
  190. data/closure-library/closure/goog/demos/css/emojisprite.css +92 -0
  191. data/closure-library/closure/goog/demos/css3button.html +166 -0
  192. data/closure-library/closure/goog/demos/css3menubutton.html +285 -0
  193. data/closure-library/closure/goog/demos/cssspriteanimation.html +80 -0
  194. data/closure-library/closure/goog/demos/datepicker.html +183 -0
  195. data/closure-library/closure/goog/demos/debug.html +119 -0
  196. data/closure-library/closure/goog/demos/depsgraph.html +221 -0
  197. data/closure-library/closure/goog/demos/dialog.html +156 -0
  198. data/closure-library/closure/goog/demos/dimensionpicker.html +108 -0
  199. data/closure-library/closure/goog/demos/dimensionpicker_rtl.html +123 -0
  200. data/closure-library/closure/goog/demos/dom_selection.html +88 -0
  201. data/closure-library/closure/goog/demos/drag.html +191 -0
  202. data/closure-library/closure/goog/demos/dragdrop.html +263 -0
  203. data/closure-library/closure/goog/demos/dragdropdetector.html +46 -0
  204. data/closure-library/closure/goog/demos/dragdropdetector_target.html +17 -0
  205. data/closure-library/closure/goog/demos/dragger.html +83 -0
  206. data/closure-library/closure/goog/demos/draglistgroup.html +261 -0
  207. data/closure-library/closure/goog/demos/drilldownrow.html +78 -0
  208. data/closure-library/closure/goog/demos/editor/deps.js +20 -0
  209. data/closure-library/closure/goog/demos/editor/editor.html +139 -0
  210. data/closure-library/closure/goog/demos/editor/field_basic.html +74 -0
  211. data/closure-library/closure/goog/demos/editor/helloworld.html +91 -0
  212. data/closure-library/closure/goog/demos/editor/helloworld.js +81 -0
  213. data/closure-library/closure/goog/demos/editor/helloworld_test.html +75 -0
  214. data/closure-library/closure/goog/demos/editor/helloworlddialog.js +163 -0
  215. data/closure-library/closure/goog/demos/editor/helloworlddialog_test.html +100 -0
  216. data/closure-library/closure/goog/demos/editor/helloworlddialogplugin.js +110 -0
  217. data/closure-library/closure/goog/demos/editor/helloworlddialogplugin_test.html +198 -0
  218. data/closure-library/closure/goog/demos/editor/seamlessfield.html +106 -0
  219. data/closure-library/closure/goog/demos/effects.html +142 -0
  220. data/closure-library/closure/goog/demos/emoji/200.gif +0 -0
  221. data/closure-library/closure/goog/demos/emoji/201.gif +0 -0
  222. data/closure-library/closure/goog/demos/emoji/202.gif +0 -0
  223. data/closure-library/closure/goog/demos/emoji/203.gif +0 -0
  224. data/closure-library/closure/goog/demos/emoji/204.gif +0 -0
  225. data/closure-library/closure/goog/demos/emoji/205.gif +0 -0
  226. data/closure-library/closure/goog/demos/emoji/206.gif +0 -0
  227. data/closure-library/closure/goog/demos/emoji/2BC.gif +0 -0
  228. data/closure-library/closure/goog/demos/emoji/2BD.gif +0 -0
  229. data/closure-library/closure/goog/demos/emoji/2BE.gif +0 -0
  230. data/closure-library/closure/goog/demos/emoji/2BF.gif +0 -0
  231. data/closure-library/closure/goog/demos/emoji/2C0.gif +0 -0
  232. data/closure-library/closure/goog/demos/emoji/2C1.gif +0 -0
  233. data/closure-library/closure/goog/demos/emoji/2C2.gif +0 -0
  234. data/closure-library/closure/goog/demos/emoji/2C3.gif +0 -0
  235. data/closure-library/closure/goog/demos/emoji/2C4.gif +0 -0
  236. data/closure-library/closure/goog/demos/emoji/2C5.gif +0 -0
  237. data/closure-library/closure/goog/demos/emoji/2C6.gif +0 -0
  238. data/closure-library/closure/goog/demos/emoji/2C7.gif +0 -0
  239. data/closure-library/closure/goog/demos/emoji/2C8.gif +0 -0
  240. data/closure-library/closure/goog/demos/emoji/2C9.gif +0 -0
  241. data/closure-library/closure/goog/demos/emoji/2CA.gif +0 -0
  242. data/closure-library/closure/goog/demos/emoji/2CB.gif +0 -0
  243. data/closure-library/closure/goog/demos/emoji/2CC.gif +0 -0
  244. data/closure-library/closure/goog/demos/emoji/2CD.gif +0 -0
  245. data/closure-library/closure/goog/demos/emoji/2CE.gif +0 -0
  246. data/closure-library/closure/goog/demos/emoji/2CF.gif +0 -0
  247. data/closure-library/closure/goog/demos/emoji/2D0.gif +0 -0
  248. data/closure-library/closure/goog/demos/emoji/2D1.gif +0 -0
  249. data/closure-library/closure/goog/demos/emoji/2D2.gif +0 -0
  250. data/closure-library/closure/goog/demos/emoji/2D3.gif +0 -0
  251. data/closure-library/closure/goog/demos/emoji/2D4.gif +0 -0
  252. data/closure-library/closure/goog/demos/emoji/2D5.gif +0 -0
  253. data/closure-library/closure/goog/demos/emoji/2D6.gif +0 -0
  254. data/closure-library/closure/goog/demos/emoji/2D7.gif +0 -0
  255. data/closure-library/closure/goog/demos/emoji/2D8.gif +0 -0
  256. data/closure-library/closure/goog/demos/emoji/2D9.gif +0 -0
  257. data/closure-library/closure/goog/demos/emoji/2DA.gif +0 -0
  258. data/closure-library/closure/goog/demos/emoji/2DB.gif +0 -0
  259. data/closure-library/closure/goog/demos/emoji/2DC.gif +0 -0
  260. data/closure-library/closure/goog/demos/emoji/2DD.gif +0 -0
  261. data/closure-library/closure/goog/demos/emoji/2DE.gif +0 -0
  262. data/closure-library/closure/goog/demos/emoji/2DF.gif +0 -0
  263. data/closure-library/closure/goog/demos/emoji/2E0.gif +0 -0
  264. data/closure-library/closure/goog/demos/emoji/2E1.gif +0 -0
  265. data/closure-library/closure/goog/demos/emoji/2E2.gif +0 -0
  266. data/closure-library/closure/goog/demos/emoji/2E3.gif +0 -0
  267. data/closure-library/closure/goog/demos/emoji/2E4.gif +0 -0
  268. data/closure-library/closure/goog/demos/emoji/2E5.gif +0 -0
  269. data/closure-library/closure/goog/demos/emoji/2E6.gif +0 -0
  270. data/closure-library/closure/goog/demos/emoji/2E7.gif +0 -0
  271. data/closure-library/closure/goog/demos/emoji/2E8.gif +0 -0
  272. data/closure-library/closure/goog/demos/emoji/2E9.gif +0 -0
  273. data/closure-library/closure/goog/demos/emoji/2EA.gif +0 -0
  274. data/closure-library/closure/goog/demos/emoji/2EB.gif +0 -0
  275. data/closure-library/closure/goog/demos/emoji/2EC.gif +0 -0
  276. data/closure-library/closure/goog/demos/emoji/2ED.gif +0 -0
  277. data/closure-library/closure/goog/demos/emoji/2EE.gif +0 -0
  278. data/closure-library/closure/goog/demos/emoji/2EF.gif +0 -0
  279. data/closure-library/closure/goog/demos/emoji/2F0.gif +0 -0
  280. data/closure-library/closure/goog/demos/emoji/2F1.gif +0 -0
  281. data/closure-library/closure/goog/demos/emoji/2F2.gif +0 -0
  282. data/closure-library/closure/goog/demos/emoji/2F3.gif +0 -0
  283. data/closure-library/closure/goog/demos/emoji/2F4.gif +0 -0
  284. data/closure-library/closure/goog/demos/emoji/2F5.gif +0 -0
  285. data/closure-library/closure/goog/demos/emoji/2F6.gif +0 -0
  286. data/closure-library/closure/goog/demos/emoji/2F7.gif +0 -0
  287. data/closure-library/closure/goog/demos/emoji/2F8.gif +0 -0
  288. data/closure-library/closure/goog/demos/emoji/2F9.gif +0 -0
  289. data/closure-library/closure/goog/demos/emoji/2FA.gif +0 -0
  290. data/closure-library/closure/goog/demos/emoji/2FB.gif +0 -0
  291. data/closure-library/closure/goog/demos/emoji/2FC.gif +0 -0
  292. data/closure-library/closure/goog/demos/emoji/2FD.gif +0 -0
  293. data/closure-library/closure/goog/demos/emoji/2FE.gif +0 -0
  294. data/closure-library/closure/goog/demos/emoji/2FF.gif +0 -0
  295. data/closure-library/closure/goog/demos/emoji/none.gif +0 -0
  296. data/closure-library/closure/goog/demos/emoji/sprite.png +0 -0
  297. data/closure-library/closure/goog/demos/emoji/sprite2.png +0 -0
  298. data/closure-library/closure/goog/demos/emoji/unknown.gif +0 -0
  299. data/closure-library/closure/goog/demos/event-propagation.html +192 -0
  300. data/closure-library/closure/goog/demos/events.html +99 -0
  301. data/closure-library/closure/goog/demos/eventtarget.html +70 -0
  302. data/closure-library/closure/goog/demos/filedrophandler.html +63 -0
  303. data/closure-library/closure/goog/demos/filteredmenu.html +118 -0
  304. data/closure-library/closure/goog/demos/focushandler.html +58 -0
  305. data/closure-library/closure/goog/demos/gauge.html +158 -0
  306. data/closure-library/closure/goog/demos/graphics/advancedcoordinates.html +141 -0
  307. data/closure-library/closure/goog/demos/graphics/advancedcoordinates2.html +130 -0
  308. data/closure-library/closure/goog/demos/graphics/basicelements.html +264 -0
  309. data/closure-library/closure/goog/demos/graphics/events.html +113 -0
  310. data/closure-library/closure/goog/demos/graphics/modifyelements.html +195 -0
  311. data/closure-library/closure/goog/demos/graphics/subpixel.html +80 -0
  312. data/closure-library/closure/goog/demos/graphics/tiger.html +105 -0
  313. data/closure-library/closure/goog/demos/graphics/tigerdata.js +2840 -0
  314. data/closure-library/closure/goog/demos/history1.html +132 -0
  315. data/closure-library/closure/goog/demos/history2.html +100 -0
  316. data/closure-library/closure/goog/demos/history3.html +106 -0
  317. data/closure-library/closure/goog/demos/history3js.html +36 -0
  318. data/closure-library/closure/goog/demos/history_blank.html +25 -0
  319. data/closure-library/closure/goog/demos/hovercard.html +177 -0
  320. data/closure-library/closure/goog/demos/hsvapalette.html +55 -0
  321. data/closure-library/closure/goog/demos/hsvpalette.html +56 -0
  322. data/closure-library/closure/goog/demos/html5history.html +87 -0
  323. data/closure-library/closure/goog/demos/imagelessbutton.html +221 -0
  324. data/closure-library/closure/goog/demos/imagelessmenubutton.html +285 -0
  325. data/closure-library/closure/goog/demos/imagelessroundedcorner.html +231 -0
  326. data/closure-library/closure/goog/demos/index.html +19 -0
  327. data/closure-library/closure/goog/demos/index_nav.html +253 -0
  328. data/closure-library/closure/goog/demos/index_splash.html +22 -0
  329. data/closure-library/closure/goog/demos/inline_block_quirks.html +125 -0
  330. data/closure-library/closure/goog/demos/inline_block_standards.html +126 -0
  331. data/closure-library/closure/goog/demos/inputdatepicker.html +60 -0
  332. data/closure-library/closure/goog/demos/inputhandler.html +72 -0
  333. data/closure-library/closure/goog/demos/jsonprettyprinter.html +80 -0
  334. data/closure-library/closure/goog/demos/keyboardshortcuts.html +112 -0
  335. data/closure-library/closure/goog/demos/keyhandler.html +127 -0
  336. data/closure-library/closure/goog/demos/labelinput.html +42 -0
  337. data/closure-library/closure/goog/demos/menu.html +220 -0
  338. data/closure-library/closure/goog/demos/menubutton.html +318 -0
  339. data/closure-library/closure/goog/demos/mousewheelhandler.html +109 -0
  340. data/closure-library/closure/goog/demos/offline.html +268 -0
  341. data/closure-library/closure/goog/demos/onlinehandler.html +77 -0
  342. data/closure-library/closure/goog/demos/palette.html +302 -0
  343. data/closure-library/closure/goog/demos/pastehandler.html +54 -0
  344. data/closure-library/closure/goog/demos/plaintextspellchecker.html +106 -0
  345. data/closure-library/closure/goog/demos/popup.html +200 -0
  346. data/closure-library/closure/goog/demos/popupcolorpicker.html +49 -0
  347. data/closure-library/closure/goog/demos/popupdatepicker.html +53 -0
  348. data/closure-library/closure/goog/demos/popupemojipicker.html +407 -0
  349. data/closure-library/closure/goog/demos/popupmenu.html +89 -0
  350. data/closure-library/closure/goog/demos/progressbar.html +97 -0
  351. data/closure-library/closure/goog/demos/prompt.html +92 -0
  352. data/closure-library/closure/goog/demos/quadtree.html +107 -0
  353. data/closure-library/closure/goog/demos/ratings.html +120 -0
  354. data/closure-library/closure/goog/demos/richtextspellchecker.html +92 -0
  355. data/closure-library/closure/goog/demos/roundedpanel.html +139 -0
  356. data/closure-library/closure/goog/demos/samplecomponent.html +75 -0
  357. data/closure-library/closure/goog/demos/samplecomponent.js +206 -0
  358. data/closure-library/closure/goog/demos/scrollfloater.html +117 -0
  359. data/closure-library/closure/goog/demos/select.html +324 -0
  360. data/closure-library/closure/goog/demos/selectionmenubutton.html +186 -0
  361. data/closure-library/closure/goog/demos/serverchart.html +122 -0
  362. data/closure-library/closure/goog/demos/silverlightclipboardbutton.html +71 -0
  363. data/closure-library/closure/goog/demos/slider.html +110 -0
  364. data/closure-library/closure/goog/demos/splitbehavior.html +164 -0
  365. data/closure-library/closure/goog/demos/splitpane.html +243 -0
  366. data/closure-library/closure/goog/demos/stopevent.html +171 -0
  367. data/closure-library/closure/goog/demos/submenus.html +130 -0
  368. data/closure-library/closure/goog/demos/submenus2.html +150 -0
  369. data/closure-library/closure/goog/demos/tabbar.html +289 -0
  370. data/closure-library/closure/goog/demos/tablesorter.html +116 -0
  371. data/closure-library/closure/goog/demos/tabpane.html +302 -0
  372. data/closure-library/closure/goog/demos/textarea.html +128 -0
  373. data/closure-library/closure/goog/demos/timers.html +291 -0
  374. data/closure-library/closure/goog/demos/toolbar.html +703 -0
  375. data/closure-library/closure/goog/demos/tooltip.html +91 -0
  376. data/closure-library/closure/goog/demos/tracer.html +92 -0
  377. data/closure-library/closure/goog/demos/tree/demo.html +126 -0
  378. data/closure-library/closure/goog/demos/tree/testdata.js +260 -0
  379. data/closure-library/closure/goog/demos/tweakui.html +121 -0
  380. data/closure-library/closure/goog/demos/twothumbslider.html +121 -0
  381. data/closure-library/closure/goog/demos/useragent.html +173 -0
  382. data/closure-library/closure/goog/demos/viewportsizemonitor.html +71 -0
  383. data/closure-library/closure/goog/demos/xpc/blank.html +7 -0
  384. data/closure-library/closure/goog/demos/xpc/index.html +89 -0
  385. data/closure-library/closure/goog/demos/xpc/inner.html +58 -0
  386. data/closure-library/closure/goog/demos/xpc/minimal/blank.html +7 -0
  387. data/closure-library/closure/goog/demos/xpc/minimal/index.html +105 -0
  388. data/closure-library/closure/goog/demos/xpc/minimal/inner.html +75 -0
  389. data/closure-library/closure/goog/demos/xpc/minimal/relay.html +7 -0
  390. data/closure-library/closure/goog/demos/xpc/relay.html +7 -0
  391. data/closure-library/closure/goog/demos/xpc/xpcdemo.js +304 -0
  392. data/closure-library/closure/goog/demos/zippy.html +127 -0
  393. data/closure-library/closure/goog/deps.js +672 -0
  394. data/closure-library/closure/goog/disposable/disposable.js +167 -0
  395. data/closure-library/closure/goog/disposable/disposable_test.html +202 -0
  396. data/closure-library/closure/goog/dom/a11y.js +438 -0
  397. data/closure-library/closure/goog/dom/a11y_test.html +86 -0
  398. data/closure-library/closure/goog/dom/abstractmultirange.js +77 -0
  399. data/closure-library/closure/goog/dom/abstractrange.js +514 -0
  400. data/closure-library/closure/goog/dom/abstractrange_test.html +73 -0
  401. data/closure-library/closure/goog/dom/annotate.js +352 -0
  402. data/closure-library/closure/goog/dom/annotate_test.html +187 -0
  403. data/closure-library/closure/goog/dom/browserfeature.js +50 -0
  404. data/closure-library/closure/goog/dom/browserrange/abstractrange.js +316 -0
  405. data/closure-library/closure/goog/dom/browserrange/browserrange.js +149 -0
  406. data/closure-library/closure/goog/dom/browserrange/browserrange_test.html +562 -0
  407. data/closure-library/closure/goog/dom/browserrange/geckorange.js +82 -0
  408. data/closure-library/closure/goog/dom/browserrange/ierange.js +970 -0
  409. data/closure-library/closure/goog/dom/browserrange/operarange.js +83 -0
  410. data/closure-library/closure/goog/dom/browserrange/w3crange.js +364 -0
  411. data/closure-library/closure/goog/dom/browserrange/webkitrange.js +112 -0
  412. data/closure-library/closure/goog/dom/classes.js +233 -0
  413. data/closure-library/closure/goog/dom/classes_test.html +228 -0
  414. data/closure-library/closure/goog/dom/controlrange.js +511 -0
  415. data/closure-library/closure/goog/dom/controlrange_test.html +246 -0
  416. data/closure-library/closure/goog/dom/dataset.js +90 -0
  417. data/closure-library/closure/goog/dom/dataset_test.html +104 -0
  418. data/closure-library/closure/goog/dom/dom.js +2424 -0
  419. data/closure-library/closure/goog/dom/dom_quirks_test.html +104 -0
  420. data/closure-library/closure/goog/dom/dom_test.html +103 -0
  421. data/closure-library/closure/goog/dom/dom_test.js +1129 -0
  422. data/closure-library/closure/goog/dom/fontsizemonitor.js +159 -0
  423. data/closure-library/closure/goog/dom/fontsizemonitor_test.html +283 -0
  424. data/closure-library/closure/goog/dom/forms.js +403 -0
  425. data/closure-library/closure/goog/dom/forms_test.html +483 -0
  426. data/closure-library/closure/goog/dom/iframe.js +128 -0
  427. data/closure-library/closure/goog/dom/iframe_test.html +87 -0
  428. data/closure-library/closure/goog/dom/iter.js +127 -0
  429. data/closure-library/closure/goog/dom/iter_test.html +97 -0
  430. data/closure-library/closure/goog/dom/multirange.js +519 -0
  431. data/closure-library/closure/goog/dom/multirange_test.html +67 -0
  432. data/closure-library/closure/goog/dom/nodeiterator.js +85 -0
  433. data/closure-library/closure/goog/dom/nodeiterator_test.html +49 -0
  434. data/closure-library/closure/goog/dom/nodeoffset.js +111 -0
  435. data/closure-library/closure/goog/dom/nodeoffset_test.html +88 -0
  436. data/closure-library/closure/goog/dom/pattern/abstractpattern.js +60 -0
  437. data/closure-library/closure/goog/dom/pattern/allchildren.js +73 -0
  438. data/closure-library/closure/goog/dom/pattern/callback/callback.js +82 -0
  439. data/closure-library/closure/goog/dom/pattern/callback/counter.js +72 -0
  440. data/closure-library/closure/goog/dom/pattern/callback/test.js +77 -0
  441. data/closure-library/closure/goog/dom/pattern/childmatches.js +152 -0
  442. data/closure-library/closure/goog/dom/pattern/endtag.js +53 -0
  443. data/closure-library/closure/goog/dom/pattern/fulltag.js +92 -0
  444. data/closure-library/closure/goog/dom/pattern/matcher.js +150 -0
  445. data/closure-library/closure/goog/dom/pattern/matcher_test.html +204 -0
  446. data/closure-library/closure/goog/dom/pattern/nodetype.js +57 -0
  447. data/closure-library/closure/goog/dom/pattern/pattern.js +93 -0
  448. data/closure-library/closure/goog/dom/pattern/pattern_test.html +614 -0
  449. data/closure-library/closure/goog/dom/pattern/repeat.js +188 -0
  450. data/closure-library/closure/goog/dom/pattern/sequence.js +139 -0
  451. data/closure-library/closure/goog/dom/pattern/starttag.js +53 -0
  452. data/closure-library/closure/goog/dom/pattern/tag.js +149 -0
  453. data/closure-library/closure/goog/dom/pattern/text.js +69 -0
  454. data/closure-library/closure/goog/dom/range.js +220 -0
  455. data/closure-library/closure/goog/dom/range_test.html +702 -0
  456. data/closure-library/closure/goog/dom/rangeendpoint.js +32 -0
  457. data/closure-library/closure/goog/dom/savedcaretrange.js +203 -0
  458. data/closure-library/closure/goog/dom/savedcaretrange_test.html +235 -0
  459. data/closure-library/closure/goog/dom/savedrange.js +74 -0
  460. data/closure-library/closure/goog/dom/savedrange_test.html +61 -0
  461. data/closure-library/closure/goog/dom/selection.js +470 -0
  462. data/closure-library/closure/goog/dom/selection_test.html +329 -0
  463. data/closure-library/closure/goog/dom/tagiterator.js +365 -0
  464. data/closure-library/closure/goog/dom/tagiterator_test.html +589 -0
  465. data/closure-library/closure/goog/dom/tagname.js +121 -0
  466. data/closure-library/closure/goog/dom/tagname_test.html +37 -0
  467. data/closure-library/closure/goog/dom/textrange.js +611 -0
  468. data/closure-library/closure/goog/dom/textrange_test.html +127 -0
  469. data/closure-library/closure/goog/dom/textrangeiterator.js +246 -0
  470. data/closure-library/closure/goog/dom/textrangeiterator_test.html +142 -0
  471. data/closure-library/closure/goog/dom/viewportsizemonitor.js +220 -0
  472. data/closure-library/closure/goog/dom/viewportsizemonitor_test.html +166 -0
  473. data/closure-library/closure/goog/dom/xml.js +187 -0
  474. data/closure-library/closure/goog/dom/xml_test.html +77 -0
  475. data/closure-library/closure/goog/editor/browserfeature.js +251 -0
  476. data/closure-library/closure/goog/editor/browserfeature_test.html +124 -0
  477. data/closure-library/closure/goog/editor/clicktoeditwrapper.js +438 -0
  478. data/closure-library/closure/goog/editor/clicktoeditwrapper_test.html +137 -0
  479. data/closure-library/closure/goog/editor/command.js +74 -0
  480. data/closure-library/closure/goog/editor/defines.js +34 -0
  481. data/closure-library/closure/goog/editor/field.js +2594 -0
  482. data/closure-library/closure/goog/editor/field_test.html +1000 -0
  483. data/closure-library/closure/goog/editor/focus.js +32 -0
  484. data/closure-library/closure/goog/editor/focus_test.html +66 -0
  485. data/closure-library/closure/goog/editor/icontent.js +296 -0
  486. data/closure-library/closure/goog/editor/icontent_test.html +209 -0
  487. data/closure-library/closure/goog/editor/link.js +279 -0
  488. data/closure-library/closure/goog/editor/link_test.html +234 -0
  489. data/closure-library/closure/goog/editor/node.js +435 -0
  490. data/closure-library/closure/goog/editor/node_test.html +590 -0
  491. data/closure-library/closure/goog/editor/plugin.js +444 -0
  492. data/closure-library/closure/goog/editor/plugin_test.html +187 -0
  493. data/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js +535 -0
  494. data/closure-library/closure/goog/editor/plugins/abstractbubbleplugin_test.html +227 -0
  495. data/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js +336 -0
  496. data/closure-library/closure/goog/editor/plugins/abstractdialogplugin_test.html +399 -0
  497. data/closure-library/closure/goog/editor/plugins/abstracttabhandler.js +78 -0
  498. data/closure-library/closure/goog/editor/plugins/abstracttabhandler_test.html +91 -0
  499. data/closure-library/closure/goog/editor/plugins/basictextformatter.js +1740 -0
  500. data/closure-library/closure/goog/editor/plugins/basictextformatter_test.html +1171 -0
  501. data/closure-library/closure/goog/editor/plugins/blockquote.js +422 -0
  502. data/closure-library/closure/goog/editor/plugins/blockquote_test.html +149 -0
  503. data/closure-library/closure/goog/editor/plugins/emoticons.js +83 -0
  504. data/closure-library/closure/goog/editor/plugins/emoticons_test.html +67 -0
  505. data/closure-library/closure/goog/editor/plugins/enterhandler.js +730 -0
  506. data/closure-library/closure/goog/editor/plugins/enterhandler_test.html +739 -0
  507. data/closure-library/closure/goog/editor/plugins/headerformatter.js +95 -0
  508. data/closure-library/closure/goog/editor/plugins/headerformatter_test.html +100 -0
  509. data/closure-library/closure/goog/editor/plugins/linkbubble.js +458 -0
  510. data/closure-library/closure/goog/editor/plugins/linkbubble_test.html +309 -0
  511. data/closure-library/closure/goog/editor/plugins/linkdialogplugin.js +222 -0
  512. data/closure-library/closure/goog/editor/plugins/linkdialogplugin_test.html +370 -0
  513. data/closure-library/closure/goog/editor/plugins/listtabhandler.js +66 -0
  514. data/closure-library/closure/goog/editor/plugins/listtabhandler_test.html +177 -0
  515. data/closure-library/closure/goog/editor/plugins/loremipsum.js +186 -0
  516. data/closure-library/closure/goog/editor/plugins/loremipsum_test.html +169 -0
  517. data/closure-library/closure/goog/editor/plugins/removeformatting.js +772 -0
  518. data/closure-library/closure/goog/editor/plugins/removeformatting_test.html +920 -0
  519. data/closure-library/closure/goog/editor/plugins/spacestabhandler.js +93 -0
  520. data/closure-library/closure/goog/editor/plugins/spacestabhandler_test.html +186 -0
  521. data/closure-library/closure/goog/editor/plugins/tableeditor.js +496 -0
  522. data/closure-library/closure/goog/editor/plugins/tableeditor_test.html +299 -0
  523. data/closure-library/closure/goog/editor/plugins/tagonenterhandler.js +741 -0
  524. data/closure-library/closure/goog/editor/plugins/tagonenterhandler_test.html +481 -0
  525. data/closure-library/closure/goog/editor/plugins/undoredo.js +1014 -0
  526. data/closure-library/closure/goog/editor/plugins/undoredo_test.html +525 -0
  527. data/closure-library/closure/goog/editor/plugins/undoredomanager.js +337 -0
  528. data/closure-library/closure/goog/editor/plugins/undoredomanager_test.html +394 -0
  529. data/closure-library/closure/goog/editor/plugins/undoredostate.js +84 -0
  530. data/closure-library/closure/goog/editor/plugins/undoredostate_test.html +44 -0
  531. data/closure-library/closure/goog/editor/range.js +602 -0
  532. data/closure-library/closure/goog/editor/range_test.html +880 -0
  533. data/closure-library/closure/goog/editor/seamlessfield.js +720 -0
  534. data/closure-library/closure/goog/editor/seamlessfield_quirks_test.html +30 -0
  535. data/closure-library/closure/goog/editor/seamlessfield_test.html +33 -0
  536. data/closure-library/closure/goog/editor/seamlessfield_test.js +392 -0
  537. data/closure-library/closure/goog/editor/style.js +222 -0
  538. data/closure-library/closure/goog/editor/style_test.html +177 -0
  539. data/closure-library/closure/goog/editor/table.js +566 -0
  540. data/closure-library/closure/goog/editor/table_test.html +522 -0
  541. data/closure-library/closure/goog/events/actioneventwrapper.js +131 -0
  542. data/closure-library/closure/goog/events/actioneventwrapper_test.html +176 -0
  543. data/closure-library/closure/goog/events/actionhandler.js +189 -0
  544. data/closure-library/closure/goog/events/actionhandler_test.html +82 -0
  545. data/closure-library/closure/goog/events/browserevent.js +412 -0
  546. data/closure-library/closure/goog/events/browserevent_test.html +145 -0
  547. data/closure-library/closure/goog/events/browserfeature.js +43 -0
  548. data/closure-library/closure/goog/events/event.js +123 -0
  549. data/closure-library/closure/goog/events/event_test.html +70 -0
  550. data/closure-library/closure/goog/events/eventhandler.js +348 -0
  551. data/closure-library/closure/goog/events/eventhandler_test.html +230 -0
  552. data/closure-library/closure/goog/events/events.js +1101 -0
  553. data/closure-library/closure/goog/events/events_test.html +362 -0
  554. data/closure-library/closure/goog/events/eventtarget.js +197 -0
  555. data/closure-library/closure/goog/events/eventtarget_test.html +423 -0
  556. data/closure-library/closure/goog/events/eventtype.js +107 -0
  557. data/closure-library/closure/goog/events/eventwrapper.js +67 -0
  558. data/closure-library/closure/goog/events/filedrophandler.js +224 -0
  559. data/closure-library/closure/goog/events/filedrophandler_test.html +258 -0
  560. data/closure-library/closure/goog/events/focushandler.js +111 -0
  561. data/closure-library/closure/goog/events/imehandler.js +365 -0
  562. data/closure-library/closure/goog/events/imehandler_test.html +271 -0
  563. data/closure-library/closure/goog/events/inputhandler.js +218 -0
  564. data/closure-library/closure/goog/events/keycodes.js +314 -0
  565. data/closure-library/closure/goog/events/keycodes_test.html +72 -0
  566. data/closure-library/closure/goog/events/keyhandler.js +522 -0
  567. data/closure-library/closure/goog/events/keyhandler_test.html +621 -0
  568. data/closure-library/closure/goog/events/keynames.js +124 -0
  569. data/closure-library/closure/goog/events/listener.js +160 -0
  570. data/closure-library/closure/goog/events/mousewheelhandler.js +280 -0
  571. data/closure-library/closure/goog/events/mousewheelhandler_test.html +331 -0
  572. data/closure-library/closure/goog/events/onlinehandler.js +176 -0
  573. data/closure-library/closure/goog/events/onlinelistener_test.html +214 -0
  574. data/closure-library/closure/goog/events/pastehandler.js +444 -0
  575. data/closure-library/closure/goog/events/pastehandler_test.html +354 -0
  576. data/closure-library/closure/goog/events/pools.js +342 -0
  577. data/closure-library/closure/goog/format/emailaddress.js +329 -0
  578. data/closure-library/closure/goog/format/emailaddress_test.html +179 -0
  579. data/closure-library/closure/goog/format/format.js +451 -0
  580. data/closure-library/closure/goog/format/format_test.html +257 -0
  581. data/closure-library/closure/goog/format/htmlprettyprinter.js +406 -0
  582. data/closure-library/closure/goog/format/htmlprettyprinter_test.html +205 -0
  583. data/closure-library/closure/goog/format/jsonprettyprinter.js +405 -0
  584. data/closure-library/closure/goog/format/jsonprettyprinter_test.html +111 -0
  585. data/closure-library/closure/goog/fs/entry.js +406 -0
  586. data/closure-library/closure/goog/fs/error.js +103 -0
  587. data/closure-library/closure/goog/fs/filesaver.js +214 -0
  588. data/closure-library/closure/goog/fs/filesystem.js +59 -0
  589. data/closure-library/closure/goog/fs/filewriter.js +106 -0
  590. data/closure-library/closure/goog/fs/fs.js +183 -0
  591. data/closure-library/closure/goog/fs/fs_test.html +270 -0
  592. data/closure-library/closure/goog/functions/functions.js +219 -0
  593. data/closure-library/closure/goog/functions/functions_test.html +198 -0
  594. data/closure-library/closure/goog/fx/abstractdragdrop.js +1451 -0
  595. data/closure-library/closure/goog/fx/abstractdragdrop_test.html +430 -0
  596. data/closure-library/closure/goog/fx/animation.js +621 -0
  597. data/closure-library/closure/goog/fx/animationqueue.js +348 -0
  598. data/closure-library/closure/goog/fx/cssspriteanimation.js +112 -0
  599. data/closure-library/closure/goog/fx/cssspriteanimation_test.html +125 -0
  600. data/closure-library/closure/goog/fx/dom.js +610 -0
  601. data/closure-library/closure/goog/fx/dragdrop.js +49 -0
  602. data/closure-library/closure/goog/fx/dragdropgroup.js +107 -0
  603. data/closure-library/closure/goog/fx/dragdropgroup_test.html +234 -0
  604. data/closure-library/closure/goog/fx/dragger.js +731 -0
  605. data/closure-library/closure/goog/fx/dragger_test.html +415 -0
  606. data/closure-library/closure/goog/fx/draglistgroup.js +1159 -0
  607. data/closure-library/closure/goog/fx/draglistgroup_test.html +231 -0
  608. data/closure-library/closure/goog/fx/dragscrollsupport.js +274 -0
  609. data/closure-library/closure/goog/fx/dragscrollsupport_test.html +253 -0
  610. data/closure-library/closure/goog/fx/easing.js +50 -0
  611. data/closure-library/closure/goog/fx/fx.js +30 -0
  612. data/closure-library/closure/goog/fx/fx_test.html +157 -0
  613. data/closure-library/closure/goog/gears/basestore.js +523 -0
  614. data/closure-library/closure/goog/gears/basestore_test.html +247 -0
  615. data/closure-library/closure/goog/gears/database.js +935 -0
  616. data/closure-library/closure/goog/gears/database_test.html +699 -0
  617. data/closure-library/closure/goog/gears/fakeworkerpool.js +252 -0
  618. data/closure-library/closure/goog/gears/fakeworkerpool_test.html +188 -0
  619. data/closure-library/closure/goog/gears/gears.js +228 -0
  620. data/closure-library/closure/goog/gears/gears_test.html +78 -0
  621. data/closure-library/closure/goog/gears/httprequest.js +77 -0
  622. data/closure-library/closure/goog/gears/loggerclient.js +131 -0
  623. data/closure-library/closure/goog/gears/loggerclient_test.html +171 -0
  624. data/closure-library/closure/goog/gears/loggerserver.js +158 -0
  625. data/closure-library/closure/goog/gears/loggerserver_test.html +118 -0
  626. data/closure-library/closure/goog/gears/logstore.js +479 -0
  627. data/closure-library/closure/goog/gears/logstore_test.html +600 -0
  628. data/closure-library/closure/goog/gears/managedresourcestore.js +553 -0
  629. data/closure-library/closure/goog/gears/managedresourcestore_test.html +453 -0
  630. data/closure-library/closure/goog/gears/multipartformdata.js +203 -0
  631. data/closure-library/closure/goog/gears/multipartformdata_test.html +220 -0
  632. data/closure-library/closure/goog/gears/statustype.js +37 -0
  633. data/closure-library/closure/goog/gears/urlcapture.js +370 -0
  634. data/closure-library/closure/goog/gears/urlcapture_test.html +392 -0
  635. data/closure-library/closure/goog/gears/worker.js +201 -0
  636. data/closure-library/closure/goog/gears/workerchannel.js +205 -0
  637. data/closure-library/closure/goog/gears/workerchannel_test.html +207 -0
  638. data/closure-library/closure/goog/gears/workerpool.js +241 -0
  639. data/closure-library/closure/goog/gears/workerpool_test.html +203 -0
  640. data/closure-library/closure/goog/graphics/abstractgraphics.js +439 -0
  641. data/closure-library/closure/goog/graphics/affinetransform.js +497 -0
  642. data/closure-library/closure/goog/graphics/affinetransform_test.html +316 -0
  643. data/closure-library/closure/goog/graphics/canvaselement.js +776 -0
  644. data/closure-library/closure/goog/graphics/canvasgraphics.js +632 -0
  645. data/closure-library/closure/goog/graphics/element.js +145 -0
  646. data/closure-library/closure/goog/graphics/ellipseelement.js +59 -0
  647. data/closure-library/closure/goog/graphics/ext/coordinates.js +158 -0
  648. data/closure-library/closure/goog/graphics/ext/coordinates_test.html +74 -0
  649. data/closure-library/closure/goog/graphics/ext/element.js +970 -0
  650. data/closure-library/closure/goog/graphics/ext/element_test.html +144 -0
  651. data/closure-library/closure/goog/graphics/ext/ellipse.js +58 -0
  652. data/closure-library/closure/goog/graphics/ext/ext.js +29 -0
  653. data/closure-library/closure/goog/graphics/ext/graphics.js +209 -0
  654. data/closure-library/closure/goog/graphics/ext/group.js +213 -0
  655. data/closure-library/closure/goog/graphics/ext/image.js +62 -0
  656. data/closure-library/closure/goog/graphics/ext/path.js +140 -0
  657. data/closure-library/closure/goog/graphics/ext/path_test.html +46 -0
  658. data/closure-library/closure/goog/graphics/ext/rectangle.js +53 -0
  659. data/closure-library/closure/goog/graphics/ext/shape.js +144 -0
  660. data/closure-library/closure/goog/graphics/ext/strokeandfillelement.js +69 -0
  661. data/closure-library/closure/goog/graphics/fill.js +29 -0
  662. data/closure-library/closure/goog/graphics/font.js +59 -0
  663. data/closure-library/closure/goog/graphics/graphics.js +124 -0
  664. data/closure-library/closure/goog/graphics/groupelement.js +54 -0
  665. data/closure-library/closure/goog/graphics/imageelement.js +67 -0
  666. data/closure-library/closure/goog/graphics/lineargradient.js +131 -0
  667. data/closure-library/closure/goog/graphics/path.js +508 -0
  668. data/closure-library/closure/goog/graphics/path_test.html +359 -0
  669. data/closure-library/closure/goog/graphics/pathelement.js +50 -0
  670. data/closure-library/closure/goog/graphics/paths.js +86 -0
  671. data/closure-library/closure/goog/graphics/paths_test.html +97 -0
  672. data/closure-library/closure/goog/graphics/rectelement.js +59 -0
  673. data/closure-library/closure/goog/graphics/solidfill.js +70 -0
  674. data/closure-library/closure/goog/graphics/stroke.js +63 -0
  675. data/closure-library/closure/goog/graphics/strokeandfillelement.js +110 -0
  676. data/closure-library/closure/goog/graphics/svgelement.js +262 -0
  677. data/closure-library/closure/goog/graphics/svggraphics.js +813 -0
  678. data/closure-library/closure/goog/graphics/textelement.js +51 -0
  679. data/closure-library/closure/goog/graphics/vmlelement.js +380 -0
  680. data/closure-library/closure/goog/graphics/vmlgraphics.js +863 -0
  681. data/closure-library/closure/goog/history/event.js +54 -0
  682. data/closure-library/closure/goog/history/eventtype.js +30 -0
  683. data/closure-library/closure/goog/history/history.js +979 -0
  684. data/closure-library/closure/goog/history/html5history.js +303 -0
  685. data/closure-library/closure/goog/history/html5history_test.html +163 -0
  686. data/closure-library/closure/goog/i18n/bidi.js +772 -0
  687. data/closure-library/closure/goog/i18n/bidi_test.html +414 -0
  688. data/closure-library/closure/goog/i18n/bidiformatter.js +488 -0
  689. data/closure-library/closure/goog/i18n/bidiformatter_test.html +343 -0
  690. data/closure-library/closure/goog/i18n/charlistdecompressor.js +157 -0
  691. data/closure-library/closure/goog/i18n/charlistdecompressor_test.html +65 -0
  692. data/closure-library/closure/goog/i18n/charpickerdata.js +3185 -0
  693. data/closure-library/closure/goog/i18n/currency.js +385 -0
  694. data/closure-library/closure/goog/i18n/currency_test.html +202 -0
  695. data/closure-library/closure/goog/i18n/currencycodemap.js +210 -0
  696. data/closure-library/closure/goog/i18n/datetimeformat.js +636 -0
  697. data/closure-library/closure/goog/i18n/datetimeformat_test.html +436 -0
  698. data/closure-library/closure/goog/i18n/datetimeparse.js +1111 -0
  699. data/closure-library/closure/goog/i18n/datetimeparse_test.html +796 -0
  700. data/closure-library/closure/goog/i18n/datetimepatterns.js +1586 -0
  701. data/closure-library/closure/goog/i18n/datetimepatternsext.js +7386 -0
  702. data/closure-library/closure/goog/i18n/datetimesymbols.js +3350 -0
  703. data/closure-library/closure/goog/i18n/datetimesymbolsext.js +12938 -0
  704. data/closure-library/closure/goog/i18n/graphemebreak.js +181 -0
  705. data/closure-library/closure/goog/i18n/graphemebreak_test.html +72 -0
  706. data/closure-library/closure/goog/i18n/messageformat.js +553 -0
  707. data/closure-library/closure/goog/i18n/messageformat_test.html +323 -0
  708. data/closure-library/closure/goog/i18n/mime.js +100 -0
  709. data/closure-library/closure/goog/i18n/mime_test.html +51 -0
  710. data/closure-library/closure/goog/i18n/numberformat.js +763 -0
  711. data/closure-library/closure/goog/i18n/numberformat_test.html +605 -0
  712. data/closure-library/closure/goog/i18n/numberformatsymbols.js +10358 -0
  713. data/closure-library/closure/goog/i18n/pluralrules.js +695 -0
  714. data/closure-library/closure/goog/i18n/timezone.js +341 -0
  715. data/closure-library/closure/goog/i18n/timezone_test.html +163 -0
  716. data/closure-library/closure/goog/i18n/uchar.js +1160 -0
  717. data/closure-library/closure/goog/i18n/uchar_test.html +72 -0
  718. data/closure-library/closure/goog/images/blank.gif +0 -0
  719. data/closure-library/closure/goog/images/bubble_close.jpg +0 -0
  720. data/closure-library/closure/goog/images/bubble_left.gif +0 -0
  721. data/closure-library/closure/goog/images/bubble_right.gif +0 -0
  722. data/closure-library/closure/goog/images/button-bg.gif +0 -0
  723. data/closure-library/closure/goog/images/check-outline.gif +0 -0
  724. data/closure-library/closure/goog/images/check-sprite.gif +0 -0
  725. data/closure-library/closure/goog/images/check.gif +0 -0
  726. data/closure-library/closure/goog/images/close_box.gif +0 -0
  727. data/closure-library/closure/goog/images/color-swatch-tick.gif +0 -0
  728. data/closure-library/closure/goog/images/dialog_close_box.gif +0 -0
  729. data/closure-library/closure/goog/images/dimension-highlighted.png +0 -0
  730. data/closure-library/closure/goog/images/dimension-unhighlighted.png +0 -0
  731. data/closure-library/closure/goog/images/dropdn.gif +0 -0
  732. data/closure-library/closure/goog/images/dropdn_disabled.gif +0 -0
  733. data/closure-library/closure/goog/images/dropdown.gif +0 -0
  734. data/closure-library/closure/goog/images/gears_bluedot.gif +0 -0
  735. data/closure-library/closure/goog/images/gears_offline.gif +0 -0
  736. data/closure-library/closure/goog/images/gears_online.gif +0 -0
  737. data/closure-library/closure/goog/images/gears_paused.gif +0 -0
  738. data/closure-library/closure/goog/images/gears_syncing.gif +0 -0
  739. data/closure-library/closure/goog/images/hsv-sprite-sm.gif +0 -0
  740. data/closure-library/closure/goog/images/hsv-sprite-sm.png +0 -0
  741. data/closure-library/closure/goog/images/hsv-sprite.gif +0 -0
  742. data/closure-library/closure/goog/images/hsv-sprite.png +0 -0
  743. data/closure-library/closure/goog/images/hsva-sprite-sm.gif +0 -0
  744. data/closure-library/closure/goog/images/hsva-sprite-sm.png +0 -0
  745. data/closure-library/closure/goog/images/hsva-sprite.gif +0 -0
  746. data/closure-library/closure/goog/images/hsva-sprite.png +0 -0
  747. data/closure-library/closure/goog/images/left_anchor_bubble_bot.gif +0 -0
  748. data/closure-library/closure/goog/images/left_anchor_bubble_top.gif +0 -0
  749. data/closure-library/closure/goog/images/menu-arrows.gif +0 -0
  750. data/closure-library/closure/goog/images/minus.png +0 -0
  751. data/closure-library/closure/goog/images/no_anchor_bubble_bot.gif +0 -0
  752. data/closure-library/closure/goog/images/no_anchor_bubble_top.gif +0 -0
  753. data/closure-library/closure/goog/images/offlineicons.png +0 -0
  754. data/closure-library/closure/goog/images/plus.png +0 -0
  755. data/closure-library/closure/goog/images/ratingstars.gif +0 -0
  756. data/closure-library/closure/goog/images/right_anchor_bubble_bot.gif +0 -0
  757. data/closure-library/closure/goog/images/right_anchor_bubble_top.gif +0 -0
  758. data/closure-library/closure/goog/images/toolbar-bg.png +0 -0
  759. data/closure-library/closure/goog/images/toolbar-separator.gif +0 -0
  760. data/closure-library/closure/goog/images/toolbar_icons.gif +0 -0
  761. data/closure-library/closure/goog/images/tree/I.png +0 -0
  762. data/closure-library/closure/goog/images/tree/cleardot.gif +0 -0
  763. data/closure-library/closure/goog/images/tree/tree.gif +0 -0
  764. data/closure-library/closure/goog/images/tree/tree.png +0 -0
  765. data/closure-library/closure/goog/images/ui_controls.jpg +0 -0
  766. data/closure-library/closure/goog/iter/iter.js +627 -0
  767. data/closure-library/closure/goog/iter/iter_test.html +443 -0
  768. data/closure-library/closure/goog/json/json.js +302 -0
  769. data/closure-library/closure/goog/json/json_test.html +501 -0
  770. data/closure-library/closure/goog/locale/countries.js +288 -0
  771. data/closure-library/closure/goog/locale/countrylanguagenames_test.html +233 -0
  772. data/closure-library/closure/goog/locale/defaultlocalenameconstants.js +847 -0
  773. data/closure-library/closure/goog/locale/genericfontnames.js +73 -0
  774. data/closure-library/closure/goog/locale/genericfontnames_test.html +97 -0
  775. data/closure-library/closure/goog/locale/genericfontnamesdata.js +328 -0
  776. data/closure-library/closure/goog/locale/locale.js +397 -0
  777. data/closure-library/closure/goog/locale/nativenameconstants.js +1354 -0
  778. data/closure-library/closure/goog/locale/scriptToLanguages.js +482 -0
  779. data/closure-library/closure/goog/locale/timezonedetection.js +117 -0
  780. data/closure-library/closure/goog/locale/timezonedetection_test.html +130 -0
  781. data/closure-library/closure/goog/locale/timezonefingerprint.js +250 -0
  782. data/closure-library/closure/goog/locale/timezonelist.js +129 -0
  783. data/closure-library/closure/goog/locale/timezonelist_test.html +165 -0
  784. data/closure-library/closure/goog/math/bezier.js +244 -0
  785. data/closure-library/closure/goog/math/bezier_test.html +70 -0
  786. data/closure-library/closure/goog/math/box.js +236 -0
  787. data/closure-library/closure/goog/math/box_test.html +139 -0
  788. data/closure-library/closure/goog/math/coordinate.js +136 -0
  789. data/closure-library/closure/goog/math/coordinate3.js +168 -0
  790. data/closure-library/closure/goog/math/coordinate3_test.html +208 -0
  791. data/closure-library/closure/goog/math/coordinate_test.html +92 -0
  792. data/closure-library/closure/goog/math/integer.js +736 -0
  793. data/closure-library/closure/goog/math/integer_test.html +1653 -0
  794. data/closure-library/closure/goog/math/line.js +177 -0
  795. data/closure-library/closure/goog/math/line_test.html +62 -0
  796. data/closure-library/closure/goog/math/long.js +801 -0
  797. data/closure-library/closure/goog/math/long_test.html +1571 -0
  798. data/closure-library/closure/goog/math/math.js +355 -0
  799. data/closure-library/closure/goog/math/math_test.html +254 -0
  800. data/closure-library/closure/goog/math/matrix.js +669 -0
  801. data/closure-library/closure/goog/math/matrix_test.html +427 -0
  802. data/closure-library/closure/goog/math/range.js +146 -0
  803. data/closure-library/closure/goog/math/range_test.html +103 -0
  804. data/closure-library/closure/goog/math/rangeset.js +368 -0
  805. data/closure-library/closure/goog/math/rangeset_test.html +619 -0
  806. data/closure-library/closure/goog/math/rect.js +340 -0
  807. data/closure-library/closure/goog/math/rect_test.html +315 -0
  808. data/closure-library/closure/goog/math/size.js +201 -0
  809. data/closure-library/closure/goog/math/size_test.html +174 -0
  810. data/closure-library/closure/goog/math/vec2.js +255 -0
  811. data/closure-library/closure/goog/math/vec2_test.html +203 -0
  812. data/closure-library/closure/goog/math/vec3.js +327 -0
  813. data/closure-library/closure/goog/math/vec3_test.html +231 -0
  814. data/closure-library/closure/goog/memoize/memoize.js +98 -0
  815. data/closure-library/closure/goog/memoize/memoize_test.html +157 -0
  816. data/closure-library/closure/goog/messaging/abstractchannel.js +209 -0
  817. data/closure-library/closure/goog/messaging/abstractchannel_test.html +90 -0
  818. data/closure-library/closure/goog/messaging/bufferedchannel.js +277 -0
  819. data/closure-library/closure/goog/messaging/bufferedchannel_test.html +205 -0
  820. data/closure-library/closure/goog/messaging/deferredchannel.js +79 -0
  821. data/closure-library/closure/goog/messaging/deferredchannel_test.html +107 -0
  822. data/closure-library/closure/goog/messaging/loggerclient.js +131 -0
  823. data/closure-library/closure/goog/messaging/loggerclient_test.html +102 -0
  824. data/closure-library/closure/goog/messaging/loggerserver.js +94 -0
  825. data/closure-library/closure/goog/messaging/loggerserver_test.html +101 -0
  826. data/closure-library/closure/goog/messaging/messagechannel.js +115 -0
  827. data/closure-library/closure/goog/messaging/messaging.js +34 -0
  828. data/closure-library/closure/goog/messaging/messaging_test.html +42 -0
  829. data/closure-library/closure/goog/messaging/multichannel.js +303 -0
  830. data/closure-library/closure/goog/messaging/multichannel_test.html +122 -0
  831. data/closure-library/closure/goog/messaging/portchannel.js +341 -0
  832. data/closure-library/closure/goog/messaging/portchannel_test.html +359 -0
  833. data/closure-library/closure/goog/messaging/testdata/portchannel_worker.js +37 -0
  834. data/closure-library/closure/goog/module/abstractmoduleloader.js +46 -0
  835. data/closure-library/closure/goog/module/basemodule.js +45 -0
  836. data/closure-library/closure/goog/module/basemoduleloader.js +210 -0
  837. data/closure-library/closure/goog/module/loader.js +269 -0
  838. data/closure-library/closure/goog/module/module.js +166 -0
  839. data/closure-library/closure/goog/module/moduleinfo.js +336 -0
  840. data/closure-library/closure/goog/module/moduleinfo_test.html +109 -0
  841. data/closure-library/closure/goog/module/moduleloadcallback.js +84 -0
  842. data/closure-library/closure/goog/module/moduleloadcallback_test.html +57 -0
  843. data/closure-library/closure/goog/module/moduleloader.js +250 -0
  844. data/closure-library/closure/goog/module/moduleloader_test.html +244 -0
  845. data/closure-library/closure/goog/module/modulemanager.js +1008 -0
  846. data/closure-library/closure/goog/module/modulemanager_test.html +1240 -0
  847. data/closure-library/closure/goog/module/testdata/modA_1.js +22 -0
  848. data/closure-library/closure/goog/module/testdata/modA_2.js +24 -0
  849. data/closure-library/closure/goog/module/testdata/modB_1.js +24 -0
  850. data/closure-library/closure/goog/net/browserchannel.js +2441 -0
  851. data/closure-library/closure/goog/net/browserchannel_test.html +1176 -0
  852. data/closure-library/closure/goog/net/browsertestchannel.js +552 -0
  853. data/closure-library/closure/goog/net/bulkloader.js +174 -0
  854. data/closure-library/closure/goog/net/bulkloader_test.html +232 -0
  855. data/closure-library/closure/goog/net/bulkloaderhelper.js +129 -0
  856. data/closure-library/closure/goog/net/channeldebug.js +288 -0
  857. data/closure-library/closure/goog/net/channelrequest.js +1125 -0
  858. data/closure-library/closure/goog/net/channelrequest_test.html +158 -0
  859. data/closure-library/closure/goog/net/cookies.js +401 -0
  860. data/closure-library/closure/goog/net/cookies_test.html +255 -0
  861. data/closure-library/closure/goog/net/crossdomainrpc.js +848 -0
  862. data/closure-library/closure/goog/net/crossdomainrpc_test.gif +0 -0
  863. data/closure-library/closure/goog/net/crossdomainrpc_test.html +120 -0
  864. data/closure-library/closure/goog/net/crossdomainrpc_test_response.html +59 -0
  865. data/closure-library/closure/goog/net/errorcode.js +130 -0
  866. data/closure-library/closure/goog/net/eventtype.js +37 -0
  867. data/closure-library/closure/goog/net/iframe_xhr_test.html +142 -0
  868. data/closure-library/closure/goog/net/iframe_xhr_test_response.html +17 -0
  869. data/closure-library/closure/goog/net/iframeio.js +1342 -0
  870. data/closure-library/closure/goog/net/iframeio_different_base_test.data +2 -0
  871. data/closure-library/closure/goog/net/iframeio_different_base_test.html +42 -0
  872. data/closure-library/closure/goog/net/iframeio_test.html +368 -0
  873. data/closure-library/closure/goog/net/iframeloadmonitor.js +199 -0
  874. data/closure-library/closure/goog/net/iframeloadmonitor_test.html +113 -0
  875. data/closure-library/closure/goog/net/iframeloadmonitor_test_frame.html +12 -0
  876. data/closure-library/closure/goog/net/iframeloadmonitor_test_frame2.html +12 -0
  877. data/closure-library/closure/goog/net/iframeloadmonitor_test_frame3.html +12 -0
  878. data/closure-library/closure/goog/net/imageloader.js +237 -0
  879. data/closure-library/closure/goog/net/imageloader_test.html +200 -0
  880. data/closure-library/closure/goog/net/imageloader_testimg1.gif +0 -0
  881. data/closure-library/closure/goog/net/imageloader_testimg2.gif +0 -0
  882. data/closure-library/closure/goog/net/imageloader_testimg3.gif +0 -0
  883. data/closure-library/closure/goog/net/jsonp.js +379 -0
  884. data/closure-library/closure/goog/net/jsonp_test.html +328 -0
  885. data/closure-library/closure/goog/net/mockiframeio.js +318 -0
  886. data/closure-library/closure/goog/net/mockxhrlite.js +34 -0
  887. data/closure-library/closure/goog/net/mockxhrlite_test.html +109 -0
  888. data/closure-library/closure/goog/net/multiiframeloadmonitor.js +116 -0
  889. data/closure-library/closure/goog/net/multiiframeloadmonitor_test.html +172 -0
  890. data/closure-library/closure/goog/net/networktester.js +383 -0
  891. data/closure-library/closure/goog/net/networktester_test.html +227 -0
  892. data/closure-library/closure/goog/net/tmpnetwork.js +168 -0
  893. data/closure-library/closure/goog/net/wrapperxmlhttpfactory.js +68 -0
  894. data/closure-library/closure/goog/net/xhrio.js +1093 -0
  895. data/closure-library/closure/goog/net/xhrio_test.html +603 -0
  896. data/closure-library/closure/goog/net/xhriopool.js +87 -0
  897. data/closure-library/closure/goog/net/xhrlite.js +119 -0
  898. data/closure-library/closure/goog/net/xhrlite_test.html +156 -0
  899. data/closure-library/closure/goog/net/xhrlitepool.js +37 -0
  900. data/closure-library/closure/goog/net/xhrmanager.js +763 -0
  901. data/closure-library/closure/goog/net/xhrmonitor.js +254 -0
  902. data/closure-library/closure/goog/net/xhrmonitor_test.html +199 -0
  903. data/closure-library/closure/goog/net/xmlhttp.js +215 -0
  904. data/closure-library/closure/goog/net/xmlhttpfactory.js +64 -0
  905. data/closure-library/closure/goog/net/xpc/crosspagechannel.js +624 -0
  906. data/closure-library/closure/goog/net/xpc/crosspagechannel_test.html +422 -0
  907. data/closure-library/closure/goog/net/xpc/frameelementmethodtransport.js +251 -0
  908. data/closure-library/closure/goog/net/xpc/iframepollingtransport.js +822 -0
  909. data/closure-library/closure/goog/net/xpc/iframerelaytransport.js +288 -0
  910. data/closure-library/closure/goog/net/xpc/nativemessagingtransport.js +280 -0
  911. data/closure-library/closure/goog/net/xpc/nativemessagingtransport_test.html +164 -0
  912. data/closure-library/closure/goog/net/xpc/nixtransport.js +454 -0
  913. data/closure-library/closure/goog/net/xpc/relay.js +72 -0
  914. data/closure-library/closure/goog/net/xpc/testdata/inner_peer.html +106 -0
  915. data/closure-library/closure/goog/net/xpc/transport.js +104 -0
  916. data/closure-library/closure/goog/net/xpc/xpc.js +238 -0
  917. data/closure-library/closure/goog/object/object.js +553 -0
  918. data/closure-library/closure/goog/object/object_test.html +376 -0
  919. data/closure-library/closure/goog/positioning/absoluteposition.js +73 -0
  920. data/closure-library/closure/goog/positioning/abstractposition.js +47 -0
  921. data/closure-library/closure/goog/positioning/anchoredposition.js +78 -0
  922. data/closure-library/closure/goog/positioning/anchoredviewportposition.js +126 -0
  923. data/closure-library/closure/goog/positioning/anchoredviewportposition_test.html +117 -0
  924. data/closure-library/closure/goog/positioning/anchoredviewportposition_test_iframe.html +35 -0
  925. data/closure-library/closure/goog/positioning/clientposition.js +75 -0
  926. data/closure-library/closure/goog/positioning/menuanchoredposition.js +97 -0
  927. data/closure-library/closure/goog/positioning/positioning.js +476 -0
  928. data/closure-library/closure/goog/positioning/positioning_test.html +877 -0
  929. data/closure-library/closure/goog/positioning/positioning_test_iframe1.html +16 -0
  930. data/closure-library/closure/goog/positioning/positioning_test_iframe2.html +13 -0
  931. data/closure-library/closure/goog/positioning/positioning_test_quirk.html +9 -0
  932. data/closure-library/closure/goog/positioning/positioning_test_standard.html +13 -0
  933. data/closure-library/closure/goog/positioning/viewportclientposition.js +102 -0
  934. data/closure-library/closure/goog/positioning/viewportclientposition_test.html +172 -0
  935. data/closure-library/closure/goog/positioning/viewportposition.js +63 -0
  936. data/closure-library/closure/goog/proto/proto.js +43 -0
  937. data/closure-library/closure/goog/proto/serializer.js +68 -0
  938. data/closure-library/closure/goog/proto/serializer_test.html +43 -0
  939. data/closure-library/closure/goog/proto2/descriptor.js +198 -0
  940. data/closure-library/closure/goog/proto2/descriptor_test.html +60 -0
  941. data/closure-library/closure/goog/proto2/fielddescriptor.js +288 -0
  942. data/closure-library/closure/goog/proto2/fielddescriptor_test.html +124 -0
  943. data/closure-library/closure/goog/proto2/lazydeserializer.js +69 -0
  944. data/closure-library/closure/goog/proto2/message.js +726 -0
  945. data/closure-library/closure/goog/proto2/message_test.html +356 -0
  946. data/closure-library/closure/goog/proto2/objectserializer.js +159 -0
  947. data/closure-library/closure/goog/proto2/objectserializer_test.html +423 -0
  948. data/closure-library/closure/goog/proto2/package_test.pb.js +164 -0
  949. data/closure-library/closure/goog/proto2/pbliteserializer.js +150 -0
  950. data/closure-library/closure/goog/proto2/pbliteserializer_test.html +267 -0
  951. data/closure-library/closure/goog/proto2/proto_test.html +693 -0
  952. data/closure-library/closure/goog/proto2/serializer.js +148 -0
  953. data/closure-library/closure/goog/proto2/test.pb.js +2820 -0
  954. data/closure-library/closure/goog/proto2/util.js +54 -0
  955. data/closure-library/closure/goog/pubsub/pubsub.js +326 -0
  956. data/closure-library/closure/goog/pubsub/pubsub_test.html +635 -0
  957. data/closure-library/closure/goog/reflect/reflect.js +50 -0
  958. data/closure-library/closure/goog/spell/spellcheck.js +474 -0
  959. data/closure-library/closure/goog/spell/spellcheck_test.html +112 -0
  960. data/closure-library/closure/goog/string/path.js +100 -0
  961. data/closure-library/closure/goog/string/path_test.html +59 -0
  962. data/closure-library/closure/goog/string/string.js +1207 -0
  963. data/closure-library/closure/goog/string/string_test.html +877 -0
  964. data/closure-library/closure/goog/string/stringbuffer.js +167 -0
  965. data/closure-library/closure/goog/string/stringbuffer_test.html +101 -0
  966. data/closure-library/closure/goog/string/stringformat.js +247 -0
  967. data/closure-library/closure/goog/string/stringformat_test.html +211 -0
  968. data/closure-library/closure/goog/structs/avltree.js +769 -0
  969. data/closure-library/closure/goog/structs/avltree_test.html +241 -0
  970. data/closure-library/closure/goog/structs/circularbuffer.js +219 -0
  971. data/closure-library/closure/goog/structs/circularbuffer_test.html +105 -0
  972. data/closure-library/closure/goog/structs/heap.js +332 -0
  973. data/closure-library/closure/goog/structs/heap_test.html +220 -0
  974. data/closure-library/closure/goog/structs/inversionmap.js +159 -0
  975. data/closure-library/closure/goog/structs/inversionmap_test.html +157 -0
  976. data/closure-library/closure/goog/structs/linkedmap.js +472 -0
  977. data/closure-library/closure/goog/structs/linkedmap_test.html +300 -0
  978. data/closure-library/closure/goog/structs/map.js +446 -0
  979. data/closure-library/closure/goog/structs/map_test.html +430 -0
  980. data/closure-library/closure/goog/structs/node.js +74 -0
  981. data/closure-library/closure/goog/structs/pool.js +344 -0
  982. data/closure-library/closure/goog/structs/pool_test.html +265 -0
  983. data/closure-library/closure/goog/structs/prioritypool.js +147 -0
  984. data/closure-library/closure/goog/structs/prioritypool_test.html +478 -0
  985. data/closure-library/closure/goog/structs/priorityqueue.js +64 -0
  986. data/closure-library/closure/goog/structs/priorityqueue_test.html +179 -0
  987. data/closure-library/closure/goog/structs/quadtree.js +571 -0
  988. data/closure-library/closure/goog/structs/quadtree_test.html +179 -0
  989. data/closure-library/closure/goog/structs/queue.js +157 -0
  990. data/closure-library/closure/goog/structs/queue_test.html +140 -0
  991. data/closure-library/closure/goog/structs/set.js +251 -0
  992. data/closure-library/closure/goog/structs/set_test.html +551 -0
  993. data/closure-library/closure/goog/structs/simplepool.js +203 -0
  994. data/closure-library/closure/goog/structs/stringset.js +404 -0
  995. data/closure-library/closure/goog/structs/stringset_test.html +251 -0
  996. data/closure-library/closure/goog/structs/structs.js +341 -0
  997. data/closure-library/closure/goog/structs/structs_test.html +1050 -0
  998. data/closure-library/closure/goog/structs/treenode.js +312 -0
  999. data/closure-library/closure/goog/structs/treenode_test.html +285 -0
  1000. data/closure-library/closure/goog/structs/trie.js +368 -0
  1001. data/closure-library/closure/goog/structs/trie_test.html +378 -0
  1002. data/closure-library/closure/goog/style/cursor.js +125 -0
  1003. data/closure-library/closure/goog/style/cursor_test.html +131 -0
  1004. data/closure-library/closure/goog/style/style.js +1804 -0
  1005. data/closure-library/closure/goog/style/style_quirks_test.html +1928 -0
  1006. data/closure-library/closure/goog/style/style_test.html +2073 -0
  1007. data/closure-library/closure/goog/style/style_test_iframe_quirk.html +29 -0
  1008. data/closure-library/closure/goog/style/style_test_iframe_standard.html +30 -0
  1009. data/closure-library/closure/goog/style/style_test_quirk.html +9 -0
  1010. data/closure-library/closure/goog/style/style_test_standard.html +11 -0
  1011. data/closure-library/closure/goog/testing/asserts.js +970 -0
  1012. data/closure-library/closure/goog/testing/asserts_test.html +966 -0
  1013. data/closure-library/closure/goog/testing/async/mockcontrol.js +174 -0
  1014. data/closure-library/closure/goog/testing/async/mockcontrol_test.html +224 -0
  1015. data/closure-library/closure/goog/testing/asynctestcase.js +812 -0
  1016. data/closure-library/closure/goog/testing/asynctestcase_async_test.html +102 -0
  1017. data/closure-library/closure/goog/testing/asynctestcase_noasync_test.html +98 -0
  1018. data/closure-library/closure/goog/testing/benchmark.js +87 -0
  1019. data/closure-library/closure/goog/testing/benchmarks/jsbinarysizebutton.js +64 -0
  1020. data/closure-library/closure/goog/testing/benchmarks/jsbinarysizebutton_test.html +58 -0
  1021. data/closure-library/closure/goog/testing/benchmarks/jsbinarysizetoolbar.js +66 -0
  1022. data/closure-library/closure/goog/testing/benchmarks/jsbinarysizetoolbar_test.html +49 -0
  1023. data/closure-library/closure/goog/testing/continuationtestcase.js +682 -0
  1024. data/closure-library/closure/goog/testing/continuationtestcase_test.html +349 -0
  1025. data/closure-library/closure/goog/testing/deferredtestcase.js +157 -0
  1026. data/closure-library/closure/goog/testing/deferredtestcase_test.html +152 -0
  1027. data/closure-library/closure/goog/testing/dom.js +596 -0
  1028. data/closure-library/closure/goog/testing/dom_test.html +438 -0
  1029. data/closure-library/closure/goog/testing/editor/dom.js +293 -0
  1030. data/closure-library/closure/goog/testing/editor/dom_test.html +295 -0
  1031. data/closure-library/closure/goog/testing/editor/fieldmock.js +90 -0
  1032. data/closure-library/closure/goog/testing/editor/testhelper.js +168 -0
  1033. data/closure-library/closure/goog/testing/editor/testhelper_test.html +176 -0
  1034. data/closure-library/closure/goog/testing/events/eventobserver.js +85 -0
  1035. data/closure-library/closure/goog/testing/events/eventobserver_test.html +70 -0
  1036. data/closure-library/closure/goog/testing/events/events.js +540 -0
  1037. data/closure-library/closure/goog/testing/events/events_test.html +434 -0
  1038. data/closure-library/closure/goog/testing/events/matchers.js +41 -0
  1039. data/closure-library/closure/goog/testing/events/matchers_test.html +40 -0
  1040. data/closure-library/closure/goog/testing/expectedfailures.js +236 -0
  1041. data/closure-library/closure/goog/testing/expectedfailures_test.html +122 -0
  1042. data/closure-library/closure/goog/testing/fs/blob.js +74 -0
  1043. data/closure-library/closure/goog/testing/fs/blob_test.html +53 -0
  1044. data/closure-library/closure/goog/testing/fs/directoryentry_test.html +185 -0
  1045. data/closure-library/closure/goog/testing/fs/entry.js +511 -0
  1046. data/closure-library/closure/goog/testing/fs/entry_test.html +153 -0
  1047. data/closure-library/closure/goog/testing/fs/file.js +51 -0
  1048. data/closure-library/closure/goog/testing/fs/fileentry_test.html +54 -0
  1049. data/closure-library/closure/goog/testing/fs/filesystem.js +64 -0
  1050. data/closure-library/closure/goog/testing/fs/filewriter.js +314 -0
  1051. data/closure-library/closure/goog/testing/fs/filewriter_test.html +248 -0
  1052. data/closure-library/closure/goog/testing/fs/fs.js +146 -0
  1053. data/closure-library/closure/goog/testing/fs/fs_test.html +54 -0
  1054. data/closure-library/closure/goog/testing/fs/integration_test.html +219 -0
  1055. data/closure-library/closure/goog/testing/functionmock.js +157 -0
  1056. data/closure-library/closure/goog/testing/functionmock_test.html +357 -0
  1057. data/closure-library/closure/goog/testing/graphics.js +64 -0
  1058. data/closure-library/closure/goog/testing/jsunit.js +144 -0
  1059. data/closure-library/closure/goog/testing/loosemock.js +240 -0
  1060. data/closure-library/closure/goog/testing/loosemock_test.html +343 -0
  1061. data/closure-library/closure/goog/testing/messaging/mockmessagechannel.js +77 -0
  1062. data/closure-library/closure/goog/testing/messaging/mockmessageevent.js +100 -0
  1063. data/closure-library/closure/goog/testing/mock.js +556 -0
  1064. data/closure-library/closure/goog/testing/mock_test.html +208 -0
  1065. data/closure-library/closure/goog/testing/mockclassfactory.js +580 -0
  1066. data/closure-library/closure/goog/testing/mockclassfactory_test.html +241 -0
  1067. data/closure-library/closure/goog/testing/mockclock.js +395 -0
  1068. data/closure-library/closure/goog/testing/mockclock_test.html +413 -0
  1069. data/closure-library/closure/goog/testing/mockcontrol.js +210 -0
  1070. data/closure-library/closure/goog/testing/mockcontrol_test.html +127 -0
  1071. data/closure-library/closure/goog/testing/mockinterface.js +45 -0
  1072. data/closure-library/closure/goog/testing/mockmatchers.js +395 -0
  1073. data/closure-library/closure/goog/testing/mockmatchers_test.html +388 -0
  1074. data/closure-library/closure/goog/testing/mockrandom.js +128 -0
  1075. data/closure-library/closure/goog/testing/mockrandom_test.html +56 -0
  1076. data/closure-library/closure/goog/testing/mockrange.js +65 -0
  1077. data/closure-library/closure/goog/testing/mockrange_test.html +41 -0
  1078. data/closure-library/closure/goog/testing/mockuseragent.js +143 -0
  1079. data/closure-library/closure/goog/testing/mockuseragent_test.html +59 -0
  1080. data/closure-library/closure/goog/testing/multitestrunner.js +1442 -0
  1081. data/closure-library/closure/goog/testing/net/xhrio.js +595 -0
  1082. data/closure-library/closure/goog/testing/net/xhrio_test.html +321 -0
  1083. data/closure-library/closure/goog/testing/objectpropertystring.js +67 -0
  1084. data/closure-library/closure/goog/testing/performancetable.css +46 -0
  1085. data/closure-library/closure/goog/testing/performancetable.js +162 -0
  1086. data/closure-library/closure/goog/testing/performancetimer.js +166 -0
  1087. data/closure-library/closure/goog/testing/performancetimer_test.html +107 -0
  1088. data/closure-library/closure/goog/testing/propertyreplacer.js +243 -0
  1089. data/closure-library/closure/goog/testing/propertyreplacer_test.html +368 -0
  1090. data/closure-library/closure/goog/testing/pseudorandom.js +162 -0
  1091. data/closure-library/closure/goog/testing/pseudorandom_test.html +98 -0
  1092. data/closure-library/closure/goog/testing/recordfunction.js +194 -0
  1093. data/closure-library/closure/goog/testing/recordfunction_test.html +147 -0
  1094. data/closure-library/closure/goog/testing/singleton.js +82 -0
  1095. data/closure-library/closure/goog/testing/singleton_test.html +39 -0
  1096. data/closure-library/closure/goog/testing/stacktrace.js +470 -0
  1097. data/closure-library/closure/goog/testing/stacktrace_test.html +229 -0
  1098. data/closure-library/closure/goog/testing/strictmock.js +124 -0
  1099. data/closure-library/closure/goog/testing/strictmock_test.html +368 -0
  1100. data/closure-library/closure/goog/testing/style/layoutasserts.js +368 -0
  1101. data/closure-library/closure/goog/testing/style/layoutasserts_test.html +269 -0
  1102. data/closure-library/closure/goog/testing/testcase.js +1053 -0
  1103. data/closure-library/closure/goog/testing/testqueue.js +66 -0
  1104. data/closure-library/closure/goog/testing/testrunner.js +391 -0
  1105. data/closure-library/closure/goog/testing/ui/rendererasserts.js +50 -0
  1106. data/closure-library/closure/goog/testing/ui/rendererasserts_test.html +51 -0
  1107. data/closure-library/closure/goog/testing/ui/rendererharness.js +175 -0
  1108. data/closure-library/closure/goog/testing/ui/style.js +137 -0
  1109. data/closure-library/closure/goog/testing/ui/style_reference.html +27 -0
  1110. data/closure-library/closure/goog/testing/ui/style_test.html +130 -0
  1111. data/closure-library/closure/goog/timer/timer.js +285 -0
  1112. data/closure-library/closure/goog/timer/timer_test.html +118 -0
  1113. data/closure-library/closure/goog/tweak/entries.js +990 -0
  1114. data/closure-library/closure/goog/tweak/entries_test.html +94 -0
  1115. data/closure-library/closure/goog/tweak/registry.js +310 -0
  1116. data/closure-library/closure/goog/tweak/registry_test.html +144 -0
  1117. data/closure-library/closure/goog/tweak/testhelpers.js +111 -0
  1118. data/closure-library/closure/goog/tweak/tweak.js +318 -0
  1119. data/closure-library/closure/goog/tweak/tweakui.js +817 -0
  1120. data/closure-library/closure/goog/tweak/tweakui_test.html +280 -0
  1121. data/closure-library/closure/goog/ui/abstractspellchecker.js +1069 -0
  1122. data/closure-library/closure/goog/ui/activitymonitor.js +286 -0
  1123. data/closure-library/closure/goog/ui/activitymonitor_test.html +44 -0
  1124. data/closure-library/closure/goog/ui/advancedtooltip.js +369 -0
  1125. data/closure-library/closure/goog/ui/advancedtooltip_test.html +274 -0
  1126. data/closure-library/closure/goog/ui/animatedzippy.js +190 -0
  1127. data/closure-library/closure/goog/ui/attachablemenu.js +464 -0
  1128. data/closure-library/closure/goog/ui/autocomplete/arraymatcher.js +156 -0
  1129. data/closure-library/closure/goog/ui/autocomplete/arraymatcher_test.html +130 -0
  1130. data/closure-library/closure/goog/ui/autocomplete/autocomplete.js +627 -0
  1131. data/closure-library/closure/goog/ui/autocomplete/autocomplete_test.html +537 -0
  1132. data/closure-library/closure/goog/ui/autocomplete/basic.js +53 -0
  1133. data/closure-library/closure/goog/ui/autocomplete/basic_test.html +204 -0
  1134. data/closure-library/closure/goog/ui/autocomplete/inputhandler.js +1209 -0
  1135. data/closure-library/closure/goog/ui/autocomplete/inputhandler_test.html +555 -0
  1136. data/closure-library/closure/goog/ui/autocomplete/remote.js +117 -0
  1137. data/closure-library/closure/goog/ui/autocomplete/remotearraymatcher.js +273 -0
  1138. data/closure-library/closure/goog/ui/autocomplete/remotearraymatcher_test.html +73 -0
  1139. data/closure-library/closure/goog/ui/autocomplete/renderer.js +852 -0
  1140. data/closure-library/closure/goog/ui/autocomplete/renderer_test.html +386 -0
  1141. data/closure-library/closure/goog/ui/autocomplete/richinputhandler.js +59 -0
  1142. data/closure-library/closure/goog/ui/autocomplete/richremote.js +108 -0
  1143. data/closure-library/closure/goog/ui/autocomplete/richremotearraymatcher.js +126 -0
  1144. data/closure-library/closure/goog/ui/basicmenu.js +930 -0
  1145. data/closure-library/closure/goog/ui/bidiinput.js +164 -0
  1146. data/closure-library/closure/goog/ui/bubble.js +475 -0
  1147. data/closure-library/closure/goog/ui/button.js +208 -0
  1148. data/closure-library/closure/goog/ui/button_test.html +257 -0
  1149. data/closure-library/closure/goog/ui/buttonrenderer.js +205 -0
  1150. data/closure-library/closure/goog/ui/buttonrenderer_test.html +190 -0
  1151. data/closure-library/closure/goog/ui/buttonside.js +40 -0
  1152. data/closure-library/closure/goog/ui/cccbutton.js +281 -0
  1153. data/closure-library/closure/goog/ui/charcounter.js +200 -0
  1154. data/closure-library/closure/goog/ui/charpicker.js +807 -0
  1155. data/closure-library/closure/goog/ui/checkbox.js +303 -0
  1156. data/closure-library/closure/goog/ui/checkbox_test.html +224 -0
  1157. data/closure-library/closure/goog/ui/checkboxmenuitem.js +53 -0
  1158. data/closure-library/closure/goog/ui/colorbutton.js +58 -0
  1159. data/closure-library/closure/goog/ui/colorbutton_test.html +70 -0
  1160. data/closure-library/closure/goog/ui/colorbuttonrenderer.js +72 -0
  1161. data/closure-library/closure/goog/ui/colormenubutton.js +213 -0
  1162. data/closure-library/closure/goog/ui/colormenubuttonrenderer.js +144 -0
  1163. data/closure-library/closure/goog/ui/colormenubuttonrenderer_test.html +88 -0
  1164. data/closure-library/closure/goog/ui/colorpalette.js +162 -0
  1165. data/closure-library/closure/goog/ui/colorpalette_test.html +169 -0
  1166. data/closure-library/closure/goog/ui/colorpicker.js +344 -0
  1167. data/closure-library/closure/goog/ui/colorsplitbehavior.js +61 -0
  1168. data/closure-library/closure/goog/ui/combobox.js +894 -0
  1169. data/closure-library/closure/goog/ui/combobox_test.html +208 -0
  1170. data/closure-library/closure/goog/ui/component.js +1187 -0
  1171. data/closure-library/closure/goog/ui/component_test.html +723 -0
  1172. data/closure-library/closure/goog/ui/container.js +1296 -0
  1173. data/closure-library/closure/goog/ui/container_test.html +450 -0
  1174. data/closure-library/closure/goog/ui/containerrenderer.js +370 -0
  1175. data/closure-library/closure/goog/ui/containerrenderer_test.html +227 -0
  1176. data/closure-library/closure/goog/ui/containerscroller.js +221 -0
  1177. data/closure-library/closure/goog/ui/containerscroller_test.html +213 -0
  1178. data/closure-library/closure/goog/ui/control.js +1348 -0
  1179. data/closure-library/closure/goog/ui/control_test.html +2128 -0
  1180. data/closure-library/closure/goog/ui/controlcontent.js +28 -0
  1181. data/closure-library/closure/goog/ui/controlrenderer.js +808 -0
  1182. data/closure-library/closure/goog/ui/controlrenderer_test.html +840 -0
  1183. data/closure-library/closure/goog/ui/cookieeditor.js +182 -0
  1184. data/closure-library/closure/goog/ui/cookieeditor_test.html +102 -0
  1185. data/closure-library/closure/goog/ui/css3buttonrenderer.js +147 -0
  1186. data/closure-library/closure/goog/ui/css3menubuttonrenderer.js +144 -0
  1187. data/closure-library/closure/goog/ui/cssnames.js +28 -0
  1188. data/closure-library/closure/goog/ui/custombutton.js +58 -0
  1189. data/closure-library/closure/goog/ui/custombuttonrenderer.js +254 -0
  1190. data/closure-library/closure/goog/ui/customcolorpalette.js +137 -0
  1191. data/closure-library/closure/goog/ui/customcolorpalette_test.html +60 -0
  1192. data/closure-library/closure/goog/ui/datepicker.js +1339 -0
  1193. data/closure-library/closure/goog/ui/datepicker_test.html +190 -0
  1194. data/closure-library/closure/goog/ui/decorate.js +37 -0
  1195. data/closure-library/closure/goog/ui/decorate_test.html +113 -0
  1196. data/closure-library/closure/goog/ui/deprecatedbutton.js +381 -0
  1197. data/closure-library/closure/goog/ui/dialog.js +1776 -0
  1198. data/closure-library/closure/goog/ui/dialog_test.html +493 -0
  1199. data/closure-library/closure/goog/ui/dimensionpicker.js +289 -0
  1200. data/closure-library/closure/goog/ui/dimensionpicker_test.html +128 -0
  1201. data/closure-library/closure/goog/ui/dimensionpickerrenderer.js +387 -0
  1202. data/closure-library/closure/goog/ui/dragdropdetector.js +642 -0
  1203. data/closure-library/closure/goog/ui/drilldownrow.js +494 -0
  1204. data/closure-library/closure/goog/ui/editor/abstractdialog.js +443 -0
  1205. data/closure-library/closure/goog/ui/editor/abstractdialog_test.html +467 -0
  1206. data/closure-library/closure/goog/ui/editor/bubble.js +520 -0
  1207. data/closure-library/closure/goog/ui/editor/bubble_test.html +264 -0
  1208. data/closure-library/closure/goog/ui/editor/defaulttoolbar.js +1062 -0
  1209. data/closure-library/closure/goog/ui/editor/linkdialog.js +833 -0
  1210. data/closure-library/closure/goog/ui/editor/linkdialog_test.html +449 -0
  1211. data/closure-library/closure/goog/ui/editor/messages.js +115 -0
  1212. data/closure-library/closure/goog/ui/editor/tabpane.js +183 -0
  1213. data/closure-library/closure/goog/ui/editor/toolbarcontroller.js +293 -0
  1214. data/closure-library/closure/goog/ui/editor/toolbarfactory.js +437 -0
  1215. data/closure-library/closure/goog/ui/editor/toolbarfactory_test.html +73 -0
  1216. data/closure-library/closure/goog/ui/emoji/emoji.js +72 -0
  1217. data/closure-library/closure/goog/ui/emoji/emojipalette.js +298 -0
  1218. data/closure-library/closure/goog/ui/emoji/emojipaletterenderer.js +206 -0
  1219. data/closure-library/closure/goog/ui/emoji/emojipicker.js +797 -0
  1220. data/closure-library/closure/goog/ui/emoji/emojipicker_test.html +840 -0
  1221. data/closure-library/closure/goog/ui/emoji/fast_nonprogressive_emojipicker_test.html +256 -0
  1222. data/closure-library/closure/goog/ui/emoji/fast_progressive_emojipicker_test.html +256 -0
  1223. data/closure-library/closure/goog/ui/emoji/popupemojipicker.js +410 -0
  1224. data/closure-library/closure/goog/ui/emoji/popupemojipicker_test.html +80 -0
  1225. data/closure-library/closure/goog/ui/emoji/progressiveemojipaletterenderer.js +97 -0
  1226. data/closure-library/closure/goog/ui/emoji/spriteinfo.js +212 -0
  1227. data/closure-library/closure/goog/ui/emoji/spriteinfo_test.html +51 -0
  1228. data/closure-library/closure/goog/ui/filteredmenu.js +562 -0
  1229. data/closure-library/closure/goog/ui/filteredmenu_test.html +299 -0
  1230. data/closure-library/closure/goog/ui/filterobservingmenuitem.js +97 -0
  1231. data/closure-library/closure/goog/ui/filterobservingmenuitemrenderer.js +60 -0
  1232. data/closure-library/closure/goog/ui/flatbuttonrenderer.js +138 -0
  1233. data/closure-library/closure/goog/ui/flatmenubuttonrenderer.js +199 -0
  1234. data/closure-library/closure/goog/ui/formpost.js +109 -0
  1235. data/closure-library/closure/goog/ui/formpost_test.html +109 -0
  1236. data/closure-library/closure/goog/ui/gauge.js +999 -0
  1237. data/closure-library/closure/goog/ui/gaugetheme.js +169 -0
  1238. data/closure-library/closure/goog/ui/hovercard.js +447 -0
  1239. data/closure-library/closure/goog/ui/hovercard_test.html +343 -0
  1240. data/closure-library/closure/goog/ui/hsvapalette.js +311 -0
  1241. data/closure-library/closure/goog/ui/hsvapalette_test.html +152 -0
  1242. data/closure-library/closure/goog/ui/hsvpalette.js +470 -0
  1243. data/closure-library/closure/goog/ui/hsvpalette_test.html +202 -0
  1244. data/closure-library/closure/goog/ui/idgenerator.js +57 -0
  1245. data/closure-library/closure/goog/ui/idletimer.js +299 -0
  1246. data/closure-library/closure/goog/ui/idletimer_test.html +100 -0
  1247. data/closure-library/closure/goog/ui/iframemask.js +256 -0
  1248. data/closure-library/closure/goog/ui/iframemask_test.html +230 -0
  1249. data/closure-library/closure/goog/ui/imagelessbuttonrenderer.js +204 -0
  1250. data/closure-library/closure/goog/ui/imagelessmenubuttonrenderer.js +202 -0
  1251. data/closure-library/closure/goog/ui/imagelessroundedcorner.js +971 -0
  1252. data/closure-library/closure/goog/ui/inputdatepicker.js +306 -0
  1253. data/closure-library/closure/goog/ui/inputdatepicker_test.html +109 -0
  1254. data/closure-library/closure/goog/ui/itemevent.js +50 -0
  1255. data/closure-library/closure/goog/ui/keyboardshortcuthandler.js +981 -0
  1256. data/closure-library/closure/goog/ui/keyboardshortcuthandler_test.html +671 -0
  1257. data/closure-library/closure/goog/ui/labelinput.js +439 -0
  1258. data/closure-library/closure/goog/ui/linkbuttonrenderer.js +67 -0
  1259. data/closure-library/closure/goog/ui/media/flashobject.js +629 -0
  1260. data/closure-library/closure/goog/ui/media/flashobject_test.html +236 -0
  1261. data/closure-library/closure/goog/ui/media/flickr.js +309 -0
  1262. data/closure-library/closure/goog/ui/media/flickr_test.html +90 -0
  1263. data/closure-library/closure/goog/ui/media/media.js +284 -0
  1264. data/closure-library/closure/goog/ui/media/media_test.html +161 -0
  1265. data/closure-library/closure/goog/ui/media/mediamodel.js +840 -0
  1266. data/closure-library/closure/goog/ui/media/mp3.js +225 -0
  1267. data/closure-library/closure/goog/ui/media/mp3_test.html +78 -0
  1268. data/closure-library/closure/goog/ui/media/photo.js +139 -0
  1269. data/closure-library/closure/goog/ui/media/photo_test.html +62 -0
  1270. data/closure-library/closure/goog/ui/media/picasa.js +317 -0
  1271. data/closure-library/closure/goog/ui/media/picasa_test.html +131 -0
  1272. data/closure-library/closure/goog/ui/media/vimeo.js +264 -0
  1273. data/closure-library/closure/goog/ui/media/vimeo_test.html +79 -0
  1274. data/closure-library/closure/goog/ui/media/youtube.js +328 -0
  1275. data/closure-library/closure/goog/ui/media/youtube_test.html +185 -0
  1276. data/closure-library/closure/goog/ui/menu.js +435 -0
  1277. data/closure-library/closure/goog/ui/menu_test.html +129 -0
  1278. data/closure-library/closure/goog/ui/menubase.js +191 -0
  1279. data/closure-library/closure/goog/ui/menubutton.js +809 -0
  1280. data/closure-library/closure/goog/ui/menubutton_test.html +440 -0
  1281. data/closure-library/closure/goog/ui/menubutton_test_frame.html +41 -0
  1282. data/closure-library/closure/goog/ui/menubuttonrenderer.js +226 -0
  1283. data/closure-library/closure/goog/ui/menubuttonrenderer_test.html +161 -0
  1284. data/closure-library/closure/goog/ui/menuheader.js +62 -0
  1285. data/closure-library/closure/goog/ui/menuheaderrenderer.js +55 -0
  1286. data/closure-library/closure/goog/ui/menuitem.js +154 -0
  1287. data/closure-library/closure/goog/ui/menuitem_test.html +506 -0
  1288. data/closure-library/closure/goog/ui/menuitemrenderer.js +353 -0
  1289. data/closure-library/closure/goog/ui/menuitemrenderer_test.html +190 -0
  1290. data/closure-library/closure/goog/ui/menurenderer.js +118 -0
  1291. data/closure-library/closure/goog/ui/menuseparator.js +51 -0
  1292. data/closure-library/closure/goog/ui/menuseparatorrenderer.js +102 -0
  1293. data/closure-library/closure/goog/ui/mockactivitymonitor.js +54 -0
  1294. data/closure-library/closure/goog/ui/nativebuttonrenderer.js +205 -0
  1295. data/closure-library/closure/goog/ui/nativebuttonrenderer_test.html +213 -0
  1296. data/closure-library/closure/goog/ui/offlineinstalldialog.js +1086 -0
  1297. data/closure-library/closure/goog/ui/offlinestatuscard.js +580 -0
  1298. data/closure-library/closure/goog/ui/offlinestatuscomponent.js +545 -0
  1299. data/closure-library/closure/goog/ui/option.js +67 -0
  1300. data/closure-library/closure/goog/ui/palette.js +528 -0
  1301. data/closure-library/closure/goog/ui/paletterenderer.js +318 -0
  1302. data/closure-library/closure/goog/ui/plaintextspellchecker.js +668 -0
  1303. data/closure-library/closure/goog/ui/plaintextspellchecker_test.html +240 -0
  1304. data/closure-library/closure/goog/ui/popup.js +410 -0
  1305. data/closure-library/closure/goog/ui/popup_test.html +137 -0
  1306. data/closure-library/closure/goog/ui/popupbase.js +721 -0
  1307. data/closure-library/closure/goog/ui/popupbase_test.html +186 -0
  1308. data/closure-library/closure/goog/ui/popupcolorpicker.js +441 -0
  1309. data/closure-library/closure/goog/ui/popupcolorpicker_test.html +71 -0
  1310. data/closure-library/closure/goog/ui/popupdatepicker.js +273 -0
  1311. data/closure-library/closure/goog/ui/popupmenu.js +539 -0
  1312. data/closure-library/closure/goog/ui/popupmenu_test.html +197 -0
  1313. data/closure-library/closure/goog/ui/progressbar.js +390 -0
  1314. data/closure-library/closure/goog/ui/prompt.js +307 -0
  1315. data/closure-library/closure/goog/ui/prompt_test.html +65 -0
  1316. data/closure-library/closure/goog/ui/rangemodel.js +301 -0
  1317. data/closure-library/closure/goog/ui/rangemodel_test.html +270 -0
  1318. data/closure-library/closure/goog/ui/ratings.js +441 -0
  1319. data/closure-library/closure/goog/ui/registry.js +166 -0
  1320. data/closure-library/closure/goog/ui/registry_test.html +236 -0
  1321. data/closure-library/closure/goog/ui/richtextspellchecker.js +600 -0
  1322. data/closure-library/closure/goog/ui/richtextspellchecker_test.html +224 -0
  1323. data/closure-library/closure/goog/ui/roundedcorners.js +694 -0
  1324. data/closure-library/closure/goog/ui/roundedpanel.js +609 -0
  1325. data/closure-library/closure/goog/ui/roundedpanel_test.html +57 -0
  1326. data/closure-library/closure/goog/ui/roundedtabrenderer.js +196 -0
  1327. data/closure-library/closure/goog/ui/scrollfloater.js +394 -0
  1328. data/closure-library/closure/goog/ui/scrollfloater_test.html +46 -0
  1329. data/closure-library/closure/goog/ui/select.js +397 -0
  1330. data/closure-library/closure/goog/ui/select_test.html +152 -0
  1331. data/closure-library/closure/goog/ui/selectionmenubutton.js +277 -0
  1332. data/closure-library/closure/goog/ui/selectionmenubutton_test.html +237 -0
  1333. data/closure-library/closure/goog/ui/selectionmodel.js +291 -0
  1334. data/closure-library/closure/goog/ui/separator.js +74 -0
  1335. data/closure-library/closure/goog/ui/serverchart.js +1791 -0
  1336. data/closure-library/closure/goog/ui/serverchart_test.html +598 -0
  1337. data/closure-library/closure/goog/ui/slider.js +125 -0
  1338. data/closure-library/closure/goog/ui/sliderbase.js +1087 -0
  1339. data/closure-library/closure/goog/ui/sliderbase_test.html +198 -0
  1340. data/closure-library/closure/goog/ui/splitbehavior.js +348 -0
  1341. data/closure-library/closure/goog/ui/splitbehavior_test.html +161 -0
  1342. data/closure-library/closure/goog/ui/splitpane.js +844 -0
  1343. data/closure-library/closure/goog/ui/splitpane_test.html +143 -0
  1344. data/closure-library/closure/goog/ui/style/app/buttonrenderer.js +204 -0
  1345. data/closure-library/closure/goog/ui/style/app/buttonrenderer_test.html +155 -0
  1346. data/closure-library/closure/goog/ui/style/app/menubuttonrenderer.js +227 -0
  1347. data/closure-library/closure/goog/ui/style/app/menubuttonrenderer_test.html +167 -0
  1348. data/closure-library/closure/goog/ui/style/app/primaryactionbuttonrenderer.js +88 -0
  1349. data/closure-library/closure/goog/ui/style/app/primaryactionbuttonrenderer_test.html +76 -0
  1350. data/closure-library/closure/goog/ui/submenu.js +660 -0
  1351. data/closure-library/closure/goog/ui/submenu_test.html +446 -0
  1352. data/closure-library/closure/goog/ui/submenurenderer.js +188 -0
  1353. data/closure-library/closure/goog/ui/tab.js +102 -0
  1354. data/closure-library/closure/goog/ui/tab_test.html +61 -0
  1355. data/closure-library/closure/goog/ui/tabbar.js +393 -0
  1356. data/closure-library/closure/goog/ui/tabbar_test.html +611 -0
  1357. data/closure-library/closure/goog/ui/tabbarrenderer.js +173 -0
  1358. data/closure-library/closure/goog/ui/tabbarrenderer_test.html +137 -0
  1359. data/closure-library/closure/goog/ui/tablesorter.js +304 -0
  1360. data/closure-library/closure/goog/ui/tablesorter_test.html +127 -0
  1361. data/closure-library/closure/goog/ui/tabpane.js +674 -0
  1362. data/closure-library/closure/goog/ui/tabpane_test.html +107 -0
  1363. data/closure-library/closure/goog/ui/tabrenderer.js +152 -0
  1364. data/closure-library/closure/goog/ui/tabrenderer_test.html +132 -0
  1365. data/closure-library/closure/goog/ui/textarea.js +573 -0
  1366. data/closure-library/closure/goog/ui/textarea_test.html +305 -0
  1367. data/closure-library/closure/goog/ui/textarearenderer.js +167 -0
  1368. data/closure-library/closure/goog/ui/togglebutton.js +58 -0
  1369. data/closure-library/closure/goog/ui/toolbar.js +45 -0
  1370. data/closure-library/closure/goog/ui/toolbarbutton.js +54 -0
  1371. data/closure-library/closure/goog/ui/toolbarbuttonrenderer.js +55 -0
  1372. data/closure-library/closure/goog/ui/toolbarcolormenubutton.js +57 -0
  1373. data/closure-library/closure/goog/ui/toolbarcolormenubuttonrenderer.js +95 -0
  1374. data/closure-library/closure/goog/ui/toolbarcolormenubuttonrenderer_test.html +66 -0
  1375. data/closure-library/closure/goog/ui/toolbarmenubutton.js +56 -0
  1376. data/closure-library/closure/goog/ui/toolbarmenubuttonrenderer.js +55 -0
  1377. data/closure-library/closure/goog/ui/toolbarrenderer.js +95 -0
  1378. data/closure-library/closure/goog/ui/toolbarselect.js +55 -0
  1379. data/closure-library/closure/goog/ui/toolbarseparator.js +51 -0
  1380. data/closure-library/closure/goog/ui/toolbarseparatorrenderer.js +87 -0
  1381. data/closure-library/closure/goog/ui/toolbartogglebutton.js +53 -0
  1382. data/closure-library/closure/goog/ui/tooltip.js +975 -0
  1383. data/closure-library/closure/goog/ui/tooltip_test.html +351 -0
  1384. data/closure-library/closure/goog/ui/tree/basenode.js +1457 -0
  1385. data/closure-library/closure/goog/ui/tree/basenode_test.html +218 -0
  1386. data/closure-library/closure/goog/ui/tree/treecontrol.js +656 -0
  1387. data/closure-library/closure/goog/ui/tree/treecontrol_test.html +113 -0
  1388. data/closure-library/closure/goog/ui/tree/treenode.js +102 -0
  1389. data/closure-library/closure/goog/ui/tree/typeahead.js +332 -0
  1390. data/closure-library/closure/goog/ui/tree/typeahead_test.html +133 -0
  1391. data/closure-library/closure/goog/ui/tristatemenuitem.js +185 -0
  1392. data/closure-library/closure/goog/ui/tristatemenuitemrenderer.js +86 -0
  1393. data/closure-library/closure/goog/ui/twothumbslider.js +134 -0
  1394. data/closure-library/closure/goog/ui/zippy.js +277 -0
  1395. data/closure-library/closure/goog/ui/zippy_test.html +223 -0
  1396. data/closure-library/closure/goog/uri/uri.js +1595 -0
  1397. data/closure-library/closure/goog/uri/uri_test.html +837 -0
  1398. data/closure-library/closure/goog/uri/utils.js +972 -0
  1399. data/closure-library/closure/goog/uri/utils_test.html +521 -0
  1400. data/closure-library/closure/goog/useragent/adobereader.js +90 -0
  1401. data/closure-library/closure/goog/useragent/adobereader_test.html +34 -0
  1402. data/closure-library/closure/goog/useragent/flash.js +113 -0
  1403. data/closure-library/closure/goog/useragent/flash_test.html +34 -0
  1404. data/closure-library/closure/goog/useragent/iphoto.js +86 -0
  1405. data/closure-library/closure/goog/useragent/jscript.js +94 -0
  1406. data/closure-library/closure/goog/useragent/jscript_test.html +65 -0
  1407. data/closure-library/closure/goog/useragent/picasa.js +111 -0
  1408. data/closure-library/closure/goog/useragent/platform.js +70 -0
  1409. data/closure-library/closure/goog/useragent/platform_test.html +108 -0
  1410. data/closure-library/closure/goog/useragent/product.js +253 -0
  1411. data/closure-library/closure/goog/useragent/product_isversion.js +99 -0
  1412. data/closure-library/closure/goog/useragent/product_test.html +322 -0
  1413. data/closure-library/closure/goog/useragent/useragent.js +464 -0
  1414. data/closure-library/closure/goog/useragent/useragent_test.html +290 -0
  1415. data/closure-library/closure/goog/window/window.js +206 -0
  1416. data/closure-library/closure/goog/window/window_test.html +185 -0
  1417. data/closure-library/third_party/closure/goog/base.js +2 -0
  1418. data/closure-library/third_party/closure/goog/caja/string/html/htmlparser.js +611 -0
  1419. data/closure-library/third_party/closure/goog/caja/string/html/htmlsanitizer.js +605 -0
  1420. data/closure-library/third_party/closure/goog/deps.js +26 -0
  1421. data/closure-library/third_party/closure/goog/dojo/dom/query.js +1532 -0
  1422. data/closure-library/third_party/closure/goog/dojo/dom/query_test.html +63 -0
  1423. data/closure-library/third_party/closure/goog/dojo/dom/query_test.js +160 -0
  1424. data/closure-library/third_party/closure/goog/jpeg_encoder/jpeg_encoder_basic.js +751 -0
  1425. data/closure-library/third_party/closure/goog/loremipsum/text/loremipsum.js +712 -0
  1426. data/closure-library/third_party/closure/goog/loremipsum/text/loremipsum_test.html +61 -0
  1427. data/closure-library/third_party/closure/goog/mochikit/async/deferred.js +530 -0
  1428. data/closure-library/third_party/closure/goog/mochikit/async/deferred_test.html +627 -0
  1429. data/closure-library/third_party/closure/goog/mochikit/async/deferredlist.js +199 -0
  1430. data/closure-library/third_party/closure/goog/mochikit/async/deferredlist_test.html +426 -0
  1431. data/closure-library/third_party/closure/goog/osapi/osapi.js +91 -0
  1432. data/closure-library/third_party/closure/goog/silverlight/AppManifest.xml +6 -0
  1433. data/closure-library/third_party/closure/goog/silverlight/AssemblyInfo.cs +35 -0
  1434. data/closure-library/third_party/closure/goog/silverlight/ClipboardButton.xaml +9 -0
  1435. data/closure-library/third_party/closure/goog/silverlight/ClipboardButton.xaml.cs +74 -0
  1436. data/closure-library/third_party/closure/goog/silverlight/ClipboardButtonApp.xaml +8 -0
  1437. data/closure-library/third_party/closure/goog/silverlight/ClipboardButtonApp.xaml.cs +75 -0
  1438. data/closure-library/third_party/closure/goog/silverlight/ClosureClipboardButton.csproj +108 -0
  1439. data/closure-library/third_party/closure/goog/silverlight/ClosureClipboardButton.csproj.user +29 -0
  1440. data/closure-library/third_party/closure/goog/silverlight/clipboardbutton.js +279 -0
  1441. data/closure-library/third_party/closure/goog/silverlight/silverlight.js +758 -0
  1442. data/closure-library/third_party/closure/goog/silverlight/supporteduseragent.js +138 -0
  1443. data/closure-library/third_party/closure/goog/silverlight/xap_files +0 -0
  1444. data/closure-templates/COPYING +202 -0
  1445. data/closure-templates/README +47 -0
  1446. data/closure-templates/SoyToJsSrcCompiler.jar +0 -0
  1447. data/closure-templates/soyutils.js +880 -0
  1448. data/closure-templates/soyutils_usegoog.js +308 -0
  1449. data/closure.gemspec +20 -0
  1450. data/config.ru +40 -0
  1451. data/java_src/ClosureScript.java +89 -0
  1452. data/java_src/make.rb +19 -0
  1453. data/lib/closure/beanshell.rb +80 -0
  1454. data/lib/closure/compiler.rb +184 -0
  1455. data/lib/closure/file_response.rb +90 -0
  1456. data/lib/closure/goog.rb +143 -0
  1457. data/lib/closure/middleware.rb +43 -0
  1458. data/lib/closure/sass.rb +56 -0
  1459. data/lib/closure/script.rb +139 -0
  1460. data/lib/closure/server.rb +83 -0
  1461. data/lib/closure/sources.rb +310 -0
  1462. data/lib/closure/templates.rb +156 -0
  1463. data/lib/closure/version.rb +20 -0
  1464. data/lib/closure.jar +0 -0
  1465. data/lib/closure.rb +134 -0
  1466. data/scripts/demos/compile.js.erb +8 -0
  1467. data/scripts/demos/compile.out +1 -0
  1468. data/scripts/demos/compiler.haml +17 -0
  1469. data/scripts/demos/compiler.js +12 -0
  1470. data/scripts/demos/deps.js.erb +1 -0
  1471. data/scripts/demos/externs.haml +16 -0
  1472. data/scripts/demos/externs.js.erb +8 -0
  1473. data/scripts/demos/externs.out +1 -0
  1474. data/scripts/demos/externs_jquery.externs +849 -0
  1475. data/scripts/demos/externs_jquery.js +167 -0
  1476. data/scripts/demos/externs_jquerytest.js +11 -0
  1477. data/scripts/demos/helloworld.haml +15 -0
  1478. data/scripts/demos/helloworld.js +58 -0
  1479. data/scripts/demos/helloworld.soy +45 -0
  1480. data/scripts/demos/index.haml +21 -0
  1481. data/scripts/demos/rails_ujs.haml +24 -0
  1482. data/scripts/examples/rails/ujs.js +136 -0
  1483. data/scripts/favicon.ico +0 -0
  1484. data/scripts/fixtures/_partial.haml +2 -0
  1485. data/scripts/fixtures/erb.html.erb +8 -0
  1486. data/scripts/fixtures/haml.haml +6 -0
  1487. data/scripts/fixtures/html.html +9 -0
  1488. data/scripts/fixtures/route_js.js.erb +1 -0
  1489. data/scripts/index.haml +14 -0
  1490. data/test/beanshell_test.rb +22 -0
  1491. data/test/server_test.rb +67 -0
  1492. data/test/sources_test.rb +41 -0
  1493. data/test/test_helper.rb +12 -0
  1494. metadata +1577 -0
@@ -0,0 +1,1776 @@
1
+ // Copyright 2006 The Closure Library Authors. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ /**
16
+ * @fileoverview Class for showing simple modal dialog boxes.
17
+ *
18
+ * TODO(user):
19
+ * * Standardize CSS class names with other components
20
+ * * Add functionality to "host" other components in content area
21
+ * * Abstract out ButtonSet and make it more general
22
+ * @see ../demos/dialog.html
23
+ */
24
+
25
+ goog.provide('goog.ui.Dialog');
26
+ goog.provide('goog.ui.Dialog.ButtonSet');
27
+ goog.provide('goog.ui.Dialog.ButtonSet.DefaultButtons');
28
+ goog.provide('goog.ui.Dialog.DefaultButtonCaptions');
29
+ goog.provide('goog.ui.Dialog.DefaultButtonKeys');
30
+ goog.provide('goog.ui.Dialog.Event');
31
+ goog.provide('goog.ui.Dialog.EventType');
32
+
33
+ goog.require('goog.Timer');
34
+ goog.require('goog.dom');
35
+ goog.require('goog.dom.NodeType');
36
+ goog.require('goog.dom.TagName');
37
+ goog.require('goog.dom.a11y');
38
+ goog.require('goog.dom.classes');
39
+ goog.require('goog.dom.iframe');
40
+ goog.require('goog.events');
41
+ goog.require('goog.events.EventType');
42
+ goog.require('goog.events.FocusHandler');
43
+ goog.require('goog.events.KeyCodes');
44
+ goog.require('goog.fx.Dragger');
45
+ goog.require('goog.math.Rect');
46
+ goog.require('goog.structs');
47
+ goog.require('goog.structs.Map');
48
+ goog.require('goog.style');
49
+ goog.require('goog.ui.Component');
50
+ goog.require('goog.userAgent');
51
+
52
+
53
+
54
+ /**
55
+ * Class for showing simple dialog boxes.
56
+ * The Html structure of the dialog box is:
57
+ * <pre>
58
+ * Element Function Class-name, modal-dialog = default
59
+ * ----------------------------------------------------------------------------
60
+ * - iframe Iframe mask modal-dialog-bg
61
+ * - div Background mask modal-dialog-bg
62
+ * - div Dialog area modal-dialog
63
+ * - div Title bar modal-dialog-title
64
+ * - span modal-dialog-title-text
65
+ * - text Title text N/A
66
+ * - span modal-dialog-title-close
67
+ * - ?? Close box N/A
68
+ * - div Content area modal-dialog-content
69
+ * - ?? User specified content N/A
70
+ * - div Button area modal-dialog-buttons
71
+ * - button N/A
72
+ * - button
73
+ * - ...
74
+ * </pre>
75
+ * @constructor
76
+ * @param {string=} opt_class CSS class name for the dialog element, also used
77
+ * as a class name prefix for related elements; defaults to modal-dialog.
78
+ * @param {boolean=} opt_useIframeMask Work around windowed controls z-index
79
+ * issue by using an iframe instead of a div for bg element.
80
+ * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper; see {@link
81
+ * goog.ui.Component} for semantics.
82
+ * @extends {goog.ui.Component}
83
+ */
84
+ goog.ui.Dialog = function(opt_class, opt_useIframeMask, opt_domHelper) {
85
+ goog.ui.Component.call(this, opt_domHelper);
86
+
87
+ /**
88
+ * CSS class name for the dialog element, also used as a class name prefix for
89
+ * related elements. Defaults to goog.getCssName('modal-dialog').
90
+ * @type {string}
91
+ * @private
92
+ */
93
+ this.class_ = opt_class || goog.getCssName('modal-dialog');
94
+
95
+ this.useIframeMask_ = !!opt_useIframeMask;
96
+
97
+ // Set the default button set to show ok and cancel
98
+ this.buttons_ = goog.ui.Dialog.ButtonSet.createOkCancel();
99
+ };
100
+ goog.inherits(goog.ui.Dialog, goog.ui.Component);
101
+
102
+
103
+ /**
104
+ * Focus handler. It will be initialized in enterDocument.
105
+ * @type {goog.events.FocusHandler}
106
+ * @private
107
+ */
108
+ goog.ui.Dialog.prototype.focusHandler_ = null;
109
+
110
+
111
+ /**
112
+ * Whether the escape key closes this dialog.
113
+ * @type {boolean}
114
+ * @private
115
+ */
116
+ goog.ui.Dialog.prototype.escapeToCancel_ = true;
117
+
118
+
119
+ /**
120
+ * Whether this dialog should include a title close button.
121
+ * @type {boolean}
122
+ * @private
123
+ */
124
+ goog.ui.Dialog.prototype.hasTitleCloseButton_ = true;
125
+
126
+
127
+ /**
128
+ * Whether the dialog should use an iframe as the background element to work
129
+ * around z-order issues. Defaults to false.
130
+ * @type {boolean}
131
+ * @private
132
+ */
133
+ goog.ui.Dialog.prototype.useIframeMask_ = false;
134
+
135
+
136
+ /**
137
+ * Whether the dialog is modal. Defaults to true.
138
+ * @type {boolean}
139
+ * @private
140
+ */
141
+ goog.ui.Dialog.prototype.modal_ = true;
142
+
143
+
144
+ /**
145
+ * Whether the dialog is draggable. Defaults to true.
146
+ * @type {boolean}
147
+ * @private
148
+ */
149
+ goog.ui.Dialog.prototype.draggable_ = true;
150
+
151
+
152
+ /**
153
+ * Opacity for background mask. Defaults to 50%.
154
+ * @type {number}
155
+ * @private
156
+ */
157
+ goog.ui.Dialog.prototype.backgroundElementOpacity_ = 0.50;
158
+
159
+
160
+ /**
161
+ * Dialog's title.
162
+ * @type {string}
163
+ * @private
164
+ */
165
+ goog.ui.Dialog.prototype.title_ = '';
166
+
167
+
168
+ /**
169
+ * Dialog's content (HTML).
170
+ * @type {string}
171
+ * @private
172
+ */
173
+ goog.ui.Dialog.prototype.content_ = '';
174
+
175
+
176
+ /**
177
+ * Button set. Default: Ok/Cancel.
178
+ * @type {goog.ui.Dialog.ButtonSet?}
179
+ * @private
180
+ */
181
+ goog.ui.Dialog.prototype.buttons_ = null;
182
+
183
+
184
+ /**
185
+ * Dragger.
186
+ * @type {?goog.fx.Dragger}
187
+ * @private
188
+ */
189
+ goog.ui.Dialog.prototype.dragger_ = null;
190
+
191
+
192
+ /**
193
+ * Whether dialog is visible.
194
+ * @type {boolean}
195
+ * @private
196
+ */
197
+ goog.ui.Dialog.prototype.visible_ = false;
198
+
199
+
200
+ /**
201
+ * Whether the dialog should be disposed when it is hidden.
202
+ * @type {boolean}
203
+ * @private
204
+ */
205
+ goog.ui.Dialog.prototype.disposeOnHide_ = false;
206
+
207
+
208
+ /**
209
+ * Element for the background which obscures the UI and blocks events.
210
+ * @type {Element}
211
+ * @private
212
+ */
213
+ goog.ui.Dialog.prototype.bgEl_ = null;
214
+
215
+
216
+ /**
217
+ * Iframe element that is only used for IE as a workaround to keep select-type
218
+ * elements from burning through background.
219
+ * @type {Element}
220
+ * @private
221
+ */
222
+ goog.ui.Dialog.prototype.bgIframeEl_ = null;
223
+
224
+
225
+ /**
226
+ * Element for the title bar.
227
+ * @type {Element}
228
+ * @private
229
+ */
230
+ goog.ui.Dialog.prototype.titleEl_ = null;
231
+
232
+
233
+ /**
234
+ * Element for the text area of the title bar.
235
+ * @type {Element}
236
+ * @private
237
+ */
238
+ goog.ui.Dialog.prototype.titleTextEl_ = null;
239
+
240
+
241
+ /**
242
+ * Id of element for the text area of the title bar.
243
+ * @type {?string}
244
+ * @private
245
+ */
246
+ goog.ui.Dialog.prototype.titleId_ = null;
247
+
248
+
249
+ /**
250
+ * Element for the close box area of the title bar.
251
+ * @type {Element}
252
+ * @private
253
+ */
254
+ goog.ui.Dialog.prototype.titleCloseEl_ = null;
255
+
256
+
257
+ /**
258
+ * Element for the content area.
259
+ * @type {Element}
260
+ * @private
261
+ */
262
+ goog.ui.Dialog.prototype.contentEl_ = null;
263
+
264
+
265
+ /**
266
+ * Element for the button bar.
267
+ * @type {Element}
268
+ * @private
269
+ */
270
+ goog.ui.Dialog.prototype.buttonEl_ = null;
271
+
272
+
273
+ /**
274
+ * Sets the title.
275
+ * @param {string} title The title text.
276
+ */
277
+ goog.ui.Dialog.prototype.setTitle = function(title) {
278
+ this.title_ = title;
279
+ if (this.titleTextEl_) {
280
+ goog.dom.setTextContent(this.titleTextEl_, title);
281
+ }
282
+ };
283
+
284
+
285
+ /**
286
+ * Gets the title.
287
+ * @return {string} The title.
288
+ */
289
+ goog.ui.Dialog.prototype.getTitle = function() {
290
+ return this.title_;
291
+ };
292
+
293
+
294
+ /**
295
+ * Allows arbitrary HTML to be set in the content element.
296
+ * @param {string} html Content HTML.
297
+ */
298
+ goog.ui.Dialog.prototype.setContent = function(html) {
299
+ this.content_ = html;
300
+ if (this.contentEl_) {
301
+ this.contentEl_.innerHTML = html;
302
+ }
303
+ };
304
+
305
+
306
+ /**
307
+ * Gets the content HTML of the content element.
308
+ * @return {string} Content HTML.
309
+ */
310
+ goog.ui.Dialog.prototype.getContent = function() {
311
+ return this.content_;
312
+ };
313
+
314
+
315
+ /**
316
+ * Renders if the DOM is not created.
317
+ * @private
318
+ */
319
+ goog.ui.Dialog.prototype.renderIfNoDom_ = function() {
320
+ if (!this.getElement()) {
321
+ // TODO(user): Ideally we'd only create the DOM, but many applications
322
+ // are requiring this behavior. Eventually, it would be best if the
323
+ // element getters could return null if the elements have not been
324
+ // created.
325
+ this.render();
326
+ }
327
+ };
328
+
329
+
330
+ /**
331
+ * Returns the content element so that more complicated things can be done with
332
+ * the content area. Renders if the DOM is not yet created. Overrides
333
+ * {@link goog.ui.Component#getContentElement}.
334
+ * @return {Element} The content element.
335
+ */
336
+ goog.ui.Dialog.prototype.getContentElement = function() {
337
+ this.renderIfNoDom_();
338
+ return this.contentEl_;
339
+ };
340
+
341
+
342
+ /**
343
+ * Returns the title element so that more complicated things can be done with
344
+ * the title. Renders if the DOM is not yet created.
345
+ * @return {Element} The title element.
346
+ */
347
+ goog.ui.Dialog.prototype.getTitleElement = function() {
348
+ this.renderIfNoDom_();
349
+ return this.titleEl_;
350
+ };
351
+
352
+
353
+ /**
354
+ * Returns the title text element so that more complicated things can be done
355
+ * with the text of the title. Renders if the DOM is not yet created.
356
+ * @return {Element} The title text element.
357
+ */
358
+ goog.ui.Dialog.prototype.getTitleTextElement = function() {
359
+ this.renderIfNoDom_();
360
+ return this.titleTextEl_;
361
+ };
362
+
363
+
364
+ /**
365
+ * Returns the title close element so that more complicated things can be done
366
+ * with the close area of the title. Renders if the DOM is not yet created.
367
+ * @return {Element} The close box.
368
+ */
369
+ goog.ui.Dialog.prototype.getTitleCloseElement = function() {
370
+ this.renderIfNoDom_();
371
+ return this.titleCloseEl_;
372
+ };
373
+
374
+
375
+ /**
376
+ * Returns the button element so that more complicated things can be done with
377
+ * the button area. Renders if the DOM is not yet created.
378
+ * @return {Element} The button container element.
379
+ */
380
+ goog.ui.Dialog.prototype.getButtonElement = function() {
381
+ this.renderIfNoDom_();
382
+ return this.buttonEl_;
383
+ };
384
+
385
+
386
+ /**
387
+ * Returns the dialog element so that more complicated things can be done with
388
+ * the dialog box. Renders if the DOM is not yet created.
389
+ * @return {Element} The dialog element.
390
+ */
391
+ goog.ui.Dialog.prototype.getDialogElement = function() {
392
+ this.renderIfNoDom_();
393
+ return this.getElement();
394
+ };
395
+
396
+
397
+ /**
398
+ * Returns the background mask element so that more complicated things can be
399
+ * done with the background region. Renders if the DOM is not yet created.
400
+ * @return {Element} The background mask element.
401
+ */
402
+ goog.ui.Dialog.prototype.getBackgroundElement = function() {
403
+ this.renderIfNoDom_();
404
+ return this.bgEl_;
405
+ };
406
+
407
+
408
+ /**
409
+ * Gets the opacity of the background mask.
410
+ * @return {number} Background mask opacity.
411
+ */
412
+ goog.ui.Dialog.prototype.getBackgroundElementOpacity = function() {
413
+ return this.backgroundElementOpacity_;
414
+ };
415
+
416
+
417
+ /**
418
+ * Sets the opacity of the background mask.
419
+ * @param {number} opacity Background mask opacity.
420
+ */
421
+ goog.ui.Dialog.prototype.setBackgroundElementOpacity = function(opacity) {
422
+ this.backgroundElementOpacity_ = opacity;
423
+
424
+ if (this.bgEl_) {
425
+ goog.style.setOpacity(this.bgEl_, this.backgroundElementOpacity_);
426
+ }
427
+ };
428
+
429
+
430
+ /**
431
+ * Sets the modal property of the dialog. In case the dialog is already
432
+ * inDocument, renders the modal background elements according to the specified
433
+ * modal parameter.
434
+ *
435
+ * Note that non-modal dialogs cannot use an iframe mask.
436
+ *
437
+ * @param {boolean} modal Whether the dialog is modal.
438
+ */
439
+ goog.ui.Dialog.prototype.setModal = function(modal) {
440
+ this.modal_ = modal;
441
+ this.manageBackgroundDom_();
442
+ var dom = this.getDomHelper();
443
+ if (this.isInDocument() && modal && this.isVisible()) {
444
+ // Insert the bg elements before the dialog so that they don't block
445
+ // the dialog itself.
446
+ if (this.bgIframeEl_) {
447
+ dom.insertSiblingBefore(this.bgIframeEl_, this.getElement());
448
+ }
449
+ if (this.bgEl_) {
450
+ dom.insertSiblingBefore(this.bgEl_, this.getElement());
451
+ }
452
+ this.resizeBackground_();
453
+ }
454
+ };
455
+
456
+
457
+ /**
458
+ * @return {boolean} modal Whether the dialog is modal.
459
+ */
460
+ goog.ui.Dialog.prototype.getModal = function() {
461
+ return this.modal_;
462
+ };
463
+
464
+
465
+ /**
466
+ * @return {string} The CSS class name for the dialog element.
467
+ */
468
+ goog.ui.Dialog.prototype.getClass = function() {
469
+ return this.class_;
470
+ };
471
+
472
+
473
+ /**
474
+ * Sets whether the dialog can be dragged.
475
+ * @param {boolean} draggable Whether the dialog can be dragged.
476
+ */
477
+ goog.ui.Dialog.prototype.setDraggable = function(draggable) {
478
+ this.draggable_ = draggable;
479
+
480
+ // this will add the dragger if we've already rendered, and gone through
481
+ // the enterDocument routine, but now want to dynamically add draggability
482
+ if (this.draggable_ && !this.dragger_ && this.getElement()) {
483
+ this.dragger_ = this.createDraggableTitleDom_();
484
+
485
+ } else if (!this.draggable_ && this.dragger_) {
486
+ // removes draggable classname post-render
487
+ if (this.getElement()) {
488
+ goog.dom.classes.remove(this.titleEl_,
489
+ goog.getCssName(this.class_, 'title-draggable'));
490
+ }
491
+ this.dragger_.dispose();
492
+ this.dragger_ = null;
493
+ }
494
+ };
495
+
496
+
497
+ /**
498
+ * Creates a dragger on the title element and adds a classname for
499
+ * cursor:move targeting.
500
+ * @return {goog.fx.Dragger} The created dragger instance.
501
+ * @private
502
+ */
503
+ goog.ui.Dialog.prototype.createDraggableTitleDom_ = function() {
504
+ var dragger = new goog.fx.Dragger(this.getElement(), this.titleEl_);
505
+ goog.dom.classes.add(this.titleEl_,
506
+ goog.getCssName(this.class_, 'title-draggable'));
507
+ return dragger;
508
+ };
509
+
510
+
511
+ /**
512
+ * @return {boolean} Whether the dialog is draggable.
513
+ */
514
+ goog.ui.Dialog.prototype.getDraggable = function() {
515
+ return this.draggable_;
516
+ };
517
+
518
+
519
+ /**
520
+ * Creates the initial DOM representation for the dialog. Overrides {@link
521
+ * goog.ui.Component#createDom}.
522
+ */
523
+ goog.ui.Dialog.prototype.createDom = function() {
524
+ // Manages the DOM for background mask elements.
525
+ this.manageBackgroundDom_();
526
+
527
+ // Create the dialog element, and make sure it's hidden.
528
+ var dom = this.getDomHelper();
529
+ this.setElementInternal(dom.createDom('div',
530
+ {'className': this.class_, 'tabIndex': 0},
531
+ this.titleEl_ = dom.createDom('div',
532
+ {'className': goog.getCssName(this.class_, 'title'),
533
+ 'id': this.getId()},
534
+ this.titleTextEl_ = dom.createDom('span',
535
+ goog.getCssName(this.class_, 'title-text'), this.title_),
536
+ this.titleCloseEl_ = dom.createDom('span',
537
+ goog.getCssName(this.class_, 'title-close'))),
538
+ this.contentEl_ = dom.createDom('div',
539
+ goog.getCssName(this.class_, 'content')),
540
+ this.buttonEl_ = dom.createDom('div',
541
+ goog.getCssName(this.class_, 'buttons')),
542
+ this.tabCatcherEl_ = dom.createDom('span', {'tabIndex': 0})));
543
+ this.titleId_ = this.titleEl_.id;
544
+ goog.dom.a11y.setRole(this.getElement(), 'dialog');
545
+ goog.dom.a11y.setState(this.getElement(), 'labelledby', this.titleId_ || '');
546
+ // If setContent() was called before createDom(), make sure the inner HTML of
547
+ // the content element is initialized.
548
+ if (this.content_) {
549
+ this.contentEl_.innerHTML = this.content_;
550
+ }
551
+ goog.style.showElement(this.titleCloseEl_, this.hasTitleCloseButton_);
552
+ goog.style.showElement(this.getElement(), false);
553
+
554
+ // Render the buttons.
555
+ if (this.buttons_) {
556
+ this.buttons_.attachToElement(this.buttonEl_);
557
+ }
558
+ };
559
+
560
+
561
+ /**
562
+ * Creates and disposes of the DOM for background mask elements.
563
+ * @private
564
+ */
565
+ goog.ui.Dialog.prototype.manageBackgroundDom_ = function() {
566
+ if (this.useIframeMask_ && this.modal_ && !this.bgIframeEl_) {
567
+ // IE renders the iframe on top of the select elements while still
568
+ // respecting the z-index of the other elements on the page. See
569
+ // http://support.microsoft.com/kb/177378 for more information.
570
+ // Flash and other controls behave in similar ways for other browsers
571
+ this.bgIframeEl_ = goog.dom.iframe.createBlank(this.getDomHelper());
572
+ this.bgIframeEl_.className = goog.getCssName(this.class_, 'bg');
573
+ goog.style.showElement(this.bgIframeEl_, false);
574
+ goog.style.setOpacity(this.bgIframeEl_, 0);
575
+
576
+ // Removes the iframe mask if it exists and we don't want it to
577
+ } else if ((!this.useIframeMask_ || !this.modal_) && this.bgIframeEl_) {
578
+ goog.dom.removeNode(this.bgIframeEl_);
579
+ this.bgIframeEl_ = null;
580
+ }
581
+
582
+ // Create the backgound mask, initialize its opacity, and make sure it's
583
+ // hidden.
584
+ if (this.modal_ && !this.bgEl_) {
585
+ this.bgEl_ = this.getDomHelper().createDom('div',
586
+ goog.getCssName(this.class_, 'bg'));
587
+ goog.style.setOpacity(this.bgEl_, this.backgroundElementOpacity_);
588
+ goog.style.showElement(this.bgEl_, false);
589
+
590
+ // Removes the background mask if it exists and we don't want it to
591
+ } else if (!this.modal_ && this.bgEl_) {
592
+ goog.dom.removeNode(this.bgEl_);
593
+ this.bgEl_ = null;
594
+ }
595
+ };
596
+
597
+
598
+ /**
599
+ * Renders the component. Overrides {@link goog.ui.Component#render}. Accepts
600
+ * an {@code opt_parent} argument for compatibility with the superclass method,
601
+ * but rendering a dialog into anything other than a body element will likely
602
+ * have unexpected results. The parent element defaults to the current document
603
+ * body if unspecified, which is almost always what you want.
604
+ *
605
+ * @param {Element=} opt_parent Element into which the component is to be
606
+ * rendered; defaults to the current document's body element if unspecified.
607
+ * @throws {goog.ui.Component.Error.ALREADY_RENDERED} If the component is
608
+ * already rendered.
609
+ */
610
+ goog.ui.Dialog.prototype.render = function(opt_parent) {
611
+ // We have to replicate some of the logic from goog.ui.Component#render here,
612
+ // since dialogs are made up of three elements (the bacground mask, the dialog
613
+ // itself, and the optional iframe mask on IE), and all of them must be
614
+ // appended to the parent element before enterDocument is called.
615
+ if (this.isInDocument()) {
616
+ throw Error(goog.ui.Component.Error.ALREADY_RENDERED);
617
+ }
618
+
619
+ if (!this.getElement()) {
620
+ // This creates both (or, on IE, possibly all three) elements.
621
+ this.createDom();
622
+ }
623
+
624
+ // First, render the background mask...
625
+ var parent = opt_parent || this.getDomHelper().getDocument().body;
626
+ this.renderBackground_(parent);
627
+
628
+ // ...then call the superclass method to attach the dialog element and call
629
+ // enterDocument().
630
+ goog.ui.Dialog.superClass_.render.call(this, parent);
631
+ };
632
+
633
+
634
+ /**
635
+ * Renders the background mask.
636
+ * @param {Element} parent Parent element; typically the document body.
637
+ * @private
638
+ */
639
+ goog.ui.Dialog.prototype.renderBackground_ = function(parent) {
640
+ if (this.bgIframeEl_) {
641
+ parent.appendChild(this.bgIframeEl_);
642
+ }
643
+ if (this.bgEl_) {
644
+ parent.appendChild(this.bgEl_);
645
+ }
646
+ };
647
+
648
+
649
+ /**
650
+ * Overrides {@link goog.ui.Component#renderBefore} to throw a NOT_SUPPORTED
651
+ * error, since dialogs don't support being rendered before another DOM element.
652
+ * TODO(user): Figure out how to do this cleanly between Component and this.
653
+ *
654
+ * @param {Element} sibling Element before which the component is to be
655
+ * rendered (ignored).
656
+ */
657
+ goog.ui.Dialog.prototype.renderBefore = function(sibling) {
658
+ throw Error(goog.ui.Component.Error.NOT_SUPPORTED);
659
+ };
660
+
661
+
662
+ /**
663
+ * Determines if the given element can be decorated by this dialog component.
664
+ * Overrides {@link goog.ui.Component#canDecorate}.
665
+ * @param {Element} element Element to decorate.
666
+ * @return {*} True-ish if the element can be decorated, false-ish otherwise.
667
+ */
668
+ goog.ui.Dialog.prototype.canDecorate = function(element) {
669
+ // Assume we can decorate any DIV.
670
+ return element && element.tagName && element.tagName == 'DIV' &&
671
+ goog.ui.Dialog.superClass_.canDecorate.call(this, element);
672
+ };
673
+
674
+
675
+ /**
676
+ * Decorates the given element as a dialog. Overrides {@link
677
+ * goog.ui.Component#decorateInternal}. Considered protected.
678
+ * @param {Element} element Element to decorate.
679
+ * @protected
680
+ */
681
+ goog.ui.Dialog.prototype.decorateInternal = function(element) {
682
+ // Decorate the dialog area element.
683
+ goog.ui.Dialog.superClass_.decorateInternal.call(this, element);
684
+ goog.dom.classes.add(this.getElement(), this.class_);
685
+
686
+ // Decorate or create the content element.
687
+ var contentClass = goog.getCssName(this.class_, 'content');
688
+ this.contentEl_ = goog.dom.getElementsByTagNameAndClass(
689
+ null, contentClass, this.getElement())[0];
690
+ if (this.contentEl_) {
691
+ this.content_ = this.contentEl_.innerHTML;
692
+ } else {
693
+ this.contentEl_ = this.getDomHelper().createDom('div', contentClass);
694
+ if (this.content_) {
695
+ this.contentEl_.innerHTML = this.content_;
696
+ }
697
+ this.getElement().appendChild(this.contentEl_);
698
+ }
699
+
700
+ // Decorate or create the title bar element.
701
+ var titleClass = goog.getCssName(this.class_, 'title');
702
+ var titleTextClass = goog.getCssName(this.class_, 'title-text');
703
+ var titleCloseClass = goog.getCssName(this.class_, 'title-close');
704
+ this.titleEl_ = goog.dom.getElementsByTagNameAndClass(
705
+ null, titleClass, this.getElement())[0];
706
+ if (this.titleEl_) {
707
+ // Only look for title text & title close elements if a title bar element
708
+ // was found. Otherwise assume that the entire title bar has to be
709
+ // created from scratch.
710
+ this.titleTextEl_ = goog.dom.getElementsByTagNameAndClass(
711
+ null, titleTextClass, this.titleEl_)[0];
712
+ this.titleCloseEl_ = goog.dom.getElementsByTagNameAndClass(
713
+ null, titleCloseClass, this.titleEl_)[0];
714
+ } else {
715
+ // Create the title bar element and insert it before the content area.
716
+ // This is useful if the element to decorate only includes a content area.
717
+ this.titleEl_ = this.getDomHelper().createDom('div', titleClass);
718
+ this.getElement().insertBefore(this.titleEl_, this.contentEl_);
719
+ }
720
+
721
+ // Decorate or create the title text element.
722
+ if (this.titleTextEl_) {
723
+ this.title_ = goog.dom.getTextContent(this.titleTextEl_);
724
+ } else {
725
+ this.titleTextEl_ = this.getDomHelper().createDom('span', titleTextClass,
726
+ this.title_);
727
+ this.titleEl_.appendChild(this.titleTextEl_);
728
+ }
729
+ goog.dom.a11y.setState(this.getElement(), 'labelledby', this.titleId_ || '');
730
+ // Decorate or create the title close element.
731
+ if (!this.titleCloseEl_) {
732
+ this.titleCloseEl_ = this.getDomHelper().createDom('span', titleCloseClass);
733
+ this.titleEl_.appendChild(this.titleCloseEl_);
734
+ }
735
+ goog.style.showElement(this.titleCloseEl_, this.hasTitleCloseButton_);
736
+
737
+ // Decorate or create the button container element.
738
+ var buttonsClass = goog.getCssName(this.class_, 'buttons');
739
+ this.buttonEl_ = goog.dom.getElementsByTagNameAndClass(
740
+ null, buttonsClass, this.getElement())[0];
741
+ if (this.buttonEl_) {
742
+ // Button container element found. Create empty button set and use it to
743
+ // decorate the button container.
744
+ this.buttons_ = new goog.ui.Dialog.ButtonSet(this.getDomHelper());
745
+ this.buttons_.decorate(this.buttonEl_);
746
+ } else {
747
+ // Create new button container element, and render a button set into it.
748
+ this.buttonEl_ = this.getDomHelper().createDom('div', buttonsClass);
749
+ this.getElement().appendChild(this.buttonEl_);
750
+ if (this.buttons_) {
751
+ this.buttons_.attachToElement(this.buttonEl_);
752
+ }
753
+ }
754
+
755
+ // Create the background mask...
756
+ this.manageBackgroundDom_();
757
+
758
+ // ...and render it.
759
+ this.renderBackground_(goog.dom.getOwnerDocument(this.getElement()).body);
760
+
761
+ // Make sure the decorated dialog is hidden.
762
+ goog.style.showElement(this.getElement(), false);
763
+ };
764
+
765
+
766
+ /**
767
+ * Initializes the component just after its DOM has been rendered into the
768
+ * document. Overrides {@link goog.ui.Component#enterDocument}.
769
+ */
770
+ goog.ui.Dialog.prototype.enterDocument = function() {
771
+ goog.ui.Dialog.superClass_.enterDocument.call(this);
772
+
773
+ this.focusHandler_ = new goog.events.FocusHandler(
774
+ this.getDomHelper().getDocument());
775
+
776
+ // Add drag support.
777
+ if (this.draggable_ && !this.dragger_) {
778
+ this.dragger_ = this.createDraggableTitleDom_();
779
+ }
780
+
781
+ // Add event listeners to the close box and the button container.
782
+ this.getHandler().
783
+ listen(this.titleCloseEl_, goog.events.EventType.CLICK,
784
+ this.onTitleCloseClick_).
785
+
786
+ // We need to watch the entire document so that we can detect when the
787
+ // focus is moved out of this dialog.
788
+ listen(this.focusHandler_, goog.events.FocusHandler.EventType.FOCUSIN,
789
+ this.onFocus_);
790
+
791
+ goog.dom.a11y.setRole(this.getElement(), 'dialog');
792
+ if (this.titleTextEl_.id !== '') {
793
+ goog.dom.a11y.setState(
794
+ this.getElement(), 'labelledby', this.titleTextEl_.id);
795
+ }
796
+ };
797
+
798
+
799
+ /**
800
+ * Cleans up the dialog component just before it is disposed of. Overrides
801
+ * {@link goog.ui.Component#exitDocument}.
802
+ */
803
+ goog.ui.Dialog.prototype.exitDocument = function() {
804
+ if (this.isVisible()) {
805
+ this.setVisible(false);
806
+ }
807
+
808
+ this.focusHandler_.dispose();
809
+ this.focusHandler_ = null;
810
+
811
+ // Remove drag support.
812
+ if (this.dragger_) {
813
+ this.dragger_.dispose();
814
+ this.dragger_ = null;
815
+ }
816
+
817
+ goog.ui.Dialog.superClass_.exitDocument.call(this);
818
+ };
819
+
820
+
821
+ /**
822
+ * Sets the visibility of the dialog box and moves focus to the default button.
823
+ * Lazily renders the component if needed.
824
+ * @param {boolean} visible Whether the dialog should be visible.
825
+ */
826
+ goog.ui.Dialog.prototype.setVisible = function(visible) {
827
+ if (visible == this.visible_) {
828
+ return;
829
+ }
830
+
831
+ // TODO(user): Add utility methods to Component to get window & document?
832
+ var doc = this.getDomHelper().getDocument();
833
+
834
+ // Older versions of Safari did not know how to get a window for a given
835
+ // document, so just fall up to the window we're running in.
836
+ var win = goog.dom.getWindow(doc) || window;
837
+
838
+ // If the dialog hasn't been rendered yet, render it now.
839
+ if (!this.isInDocument()) {
840
+ this.render(doc.body);
841
+ }
842
+
843
+ if (visible) {
844
+ this.resizeBackground_();
845
+ this.reposition();
846
+ // Listen for keyboard and resize events while the dialog is visible.
847
+ this.getHandler().
848
+ listen(this.getElement(), goog.events.EventType.KEYDOWN, this.onKey_).
849
+ listen(this.getElement(), goog.events.EventType.KEYPRESS, this.onKey_).
850
+ listen(win, goog.events.EventType.RESIZE, this.onResize_);
851
+ } else {
852
+ // Stop listening for keyboard and resize events while the dialog is hidden.
853
+ this.getHandler().
854
+ unlisten(this.getElement(), goog.events.EventType.KEYDOWN, this.onKey_).
855
+ unlisten(this.getElement(), goog.events.EventType.KEYPRESS,
856
+ this.onKey_).
857
+ unlisten(win, goog.events.EventType.RESIZE, this.onResize_);
858
+ }
859
+
860
+ // Show/hide the iframe mask (on IE), the background mask, and the dialog.
861
+ if (this.bgIframeEl_) {
862
+ goog.style.showElement(this.bgIframeEl_, visible);
863
+ }
864
+ if (this.bgEl_) {
865
+ goog.style.showElement(this.bgEl_, visible);
866
+ }
867
+ goog.style.showElement(this.getElement(), visible);
868
+
869
+ if (visible) {
870
+ this.focus();
871
+ }
872
+
873
+ this.visible_ = visible;
874
+
875
+ if (!visible) {
876
+ this.getHandler().unlisten(this.buttonEl_,
877
+ goog.events.EventType.CLICK, this.onButtonClick_);
878
+ this.dispatchEvent(goog.ui.Dialog.EventType.AFTER_HIDE);
879
+ if (this.disposeOnHide_) {
880
+ this.dispose();
881
+ }
882
+ } else {
883
+ // NOTE: see bug 1163154 for an example of an edge case where making the
884
+ // dialog visible in response to a KEYDOWN will result in a CLICK event
885
+ // firing on the default button (immediately closing the dialog) if the key
886
+ // that fired the KEYDOWN is also normally used to activate controls
887
+ // (i.e. SPACE/ENTER).
888
+ //
889
+ // This could be worked around by attaching the onButtonClick_ handler in a
890
+ // setTimeout, but that was deemed undesirable.
891
+ this.getHandler().listen(this.buttonEl_,
892
+ goog.events.EventType.CLICK, this.onButtonClick_);
893
+ }
894
+ };
895
+
896
+
897
+ /**
898
+ * @return {boolean} Whether the dialog box is visible.
899
+ */
900
+ goog.ui.Dialog.prototype.isVisible = function() {
901
+ return this.visible_;
902
+ };
903
+
904
+
905
+ /**
906
+ * Focuses the dialog contents and the default dialog button if there is one.
907
+ */
908
+ goog.ui.Dialog.prototype.focus = function() {
909
+ // Start with the focus on the dialog itself. In FF, if we focus on a
910
+ // sub-element first, then hitting tab moves the focus outside of the
911
+ // dialog, which we don't want. In addition, there may not be a default
912
+ // button, but we certainly want focus to remain within the dialog.
913
+ try {
914
+ this.getElement().focus();
915
+ } catch (e) {
916
+ // Swallow this. IE can throw an error if the element can not be focused.
917
+ }
918
+ // Move focus to the default button (if any).
919
+ if (this.getButtonSet()) {
920
+ var defaultButton = this.getButtonSet().getDefault();
921
+ if (defaultButton) {
922
+ var doc = this.getDomHelper().getDocument();
923
+ var buttons = this.buttonEl_.getElementsByTagName('button');
924
+ for (var i = 0, button; button = buttons[i]; i++) {
925
+ if (button.name == defaultButton) {
926
+ try {
927
+ // Reopening a dialog can cause focusing the button to fail in
928
+ // WebKit and Opera. Shift the focus to a temporary <input>
929
+ // element to make refocusing the button possible.
930
+ if (goog.userAgent.WEBKIT || goog.userAgent.OPERA) {
931
+ var temp = doc.createElement('input');
932
+ temp.style.cssText =
933
+ 'position:fixed;width:0;height:0;left:0;top:0;';
934
+ this.getElement().appendChild(temp);
935
+ temp.focus();
936
+ this.getElement().removeChild(temp);
937
+ }
938
+ button.focus();
939
+ } catch (e) {
940
+ // Swallow this. Could be the button is disabled
941
+ // and IE6 wishes to throw an error.
942
+ }
943
+ break;
944
+ }
945
+ }
946
+ }
947
+ }
948
+ };
949
+
950
+
951
+ /**
952
+ * Make the background element the size of the document.
953
+ *
954
+ * NOTE(user): We must hide the background element before measuring the
955
+ * document, otherwise the size of the background will stop the document from
956
+ * shrinking to fit a smaller window. This does cause a slight flicker in Linux
957
+ * browsers, but should not be a common scenario.
958
+ * @private
959
+ */
960
+ goog.ui.Dialog.prototype.resizeBackground_ = function() {
961
+ if (this.bgIframeEl_) {
962
+ goog.style.showElement(this.bgIframeEl_, false);
963
+ }
964
+ if (this.bgEl_) {
965
+ goog.style.showElement(this.bgEl_, false);
966
+ }
967
+
968
+ var doc = this.getDomHelper().getDocument();
969
+ var win = goog.dom.getWindow(doc) || window;
970
+
971
+ // Take the max of scroll height and view height for cases in which document
972
+ // does not fill screen.
973
+ var viewSize = goog.dom.getViewportSize(win);
974
+ var w = Math.max(doc.body.scrollWidth, viewSize.width);
975
+ var h = Math.max(doc.body.scrollHeight, viewSize.height);
976
+
977
+ if (this.bgIframeEl_) {
978
+ goog.style.showElement(this.bgIframeEl_, true);
979
+ goog.style.setSize(this.bgIframeEl_, w, h);
980
+ }
981
+ if (this.bgEl_) {
982
+ goog.style.showElement(this.bgEl_, true);
983
+ goog.style.setSize(this.bgEl_, w, h);
984
+ }
985
+
986
+ if (this.draggable_) {
987
+ var dialogSize = goog.style.getSize(this.getElement());
988
+ this.dragger_.limits =
989
+ new goog.math.Rect(0, 0, w - dialogSize.width, h - dialogSize.height);
990
+ }
991
+ };
992
+
993
+
994
+ /**
995
+ * Centers the dialog in the viewport, taking scrolling into account.
996
+ */
997
+ goog.ui.Dialog.prototype.reposition = function() {
998
+ // Get the current viewport to obtain the scroll offset.
999
+ var doc = this.getDomHelper().getDocument();
1000
+ var win = goog.dom.getWindow(doc) || window;
1001
+ if (goog.style.getComputedPosition(this.getElement()) == 'fixed') {
1002
+ var x = 0;
1003
+ var y = 0;
1004
+ } else {
1005
+ var scroll = this.getDomHelper().getDocumentScroll();
1006
+ var x = scroll.x;
1007
+ var y = scroll.y;
1008
+ }
1009
+
1010
+ var dialogSize = goog.style.getSize(this.getElement());
1011
+ var viewSize = goog.dom.getViewportSize(win);
1012
+
1013
+ // Make sure left and top are non-negatives.
1014
+ var left = Math.max(x + viewSize.width / 2 - dialogSize.width / 2, 0);
1015
+ var top = Math.max(y + viewSize.height / 2 - dialogSize.height / 2, 0);
1016
+
1017
+ goog.style.setPosition(this.getElement(), left, top);
1018
+ };
1019
+
1020
+
1021
+ /**
1022
+ * Handles a click on the title close area.
1023
+ * @param {goog.events.BrowserEvent} e Browser's event object.
1024
+ * @private
1025
+ */
1026
+ goog.ui.Dialog.prototype.onTitleCloseClick_ = function(e) {
1027
+ if (!this.hasTitleCloseButton_) {
1028
+ return;
1029
+ }
1030
+
1031
+ var bs = this.getButtonSet();
1032
+ var key = bs && bs.getCancel();
1033
+ // Only if there is a valid cancel button is an event dispatched.
1034
+ if (key) {
1035
+ var caption = /** @type {Element|string} */(bs.get(key));
1036
+ if (this.dispatchEvent(new goog.ui.Dialog.Event(key, caption))) {
1037
+ this.setVisible(false);
1038
+ }
1039
+ } else {
1040
+ this.setVisible(false);
1041
+ }
1042
+ };
1043
+
1044
+
1045
+ /**
1046
+ * @return {boolean} Whether this dialog has a title close button.
1047
+ */
1048
+ goog.ui.Dialog.prototype.getHasTitleCloseButton = function() {
1049
+ return this.hasTitleCloseButton_;
1050
+ };
1051
+
1052
+
1053
+ /**
1054
+ * Sets whether the dialog should have a close button in the title bar. There
1055
+ * will always be an element for the title close button, but setting this
1056
+ * parameter to false will cause it to be hidden and have no active listener.
1057
+ * @param {boolean} b Whether this dialog should have a title close button.
1058
+ */
1059
+ goog.ui.Dialog.prototype.setHasTitleCloseButton = function(b) {
1060
+ this.hasTitleCloseButton_ = b;
1061
+ if (this.titleCloseEl_) {
1062
+ goog.style.showElement(this.titleCloseEl_, this.hasTitleCloseButton_);
1063
+ }
1064
+ };
1065
+
1066
+
1067
+ /**
1068
+ * @return {boolean} Whether the escape key should close this dialog.
1069
+ */
1070
+ goog.ui.Dialog.prototype.isEscapeToCancel = function() {
1071
+ return this.escapeToCancel_;
1072
+ };
1073
+
1074
+
1075
+ /**
1076
+ * @param {boolean} b Whether the escape key should close this dialog.
1077
+ */
1078
+ goog.ui.Dialog.prototype.setEscapeToCancel = function(b) {
1079
+ this.escapeToCancel_ = b;
1080
+ };
1081
+
1082
+
1083
+ /**
1084
+ * Sets whether the dialog should be disposed when it is hidden. By default
1085
+ * dialogs are not disposed when they are hidden.
1086
+ * @param {boolean} b Whether the dialog should get disposed when it gets
1087
+ * hidden.
1088
+ */
1089
+ goog.ui.Dialog.prototype.setDisposeOnHide = function(b) {
1090
+ this.disposeOnHide_ = b;
1091
+ };
1092
+
1093
+
1094
+ /**
1095
+ * @return {boolean} Whether the dialog should be disposed when it is hidden.
1096
+ */
1097
+ goog.ui.Dialog.prototype.getDisposeOnHide = function() {
1098
+ return this.disposeOnHide_;
1099
+ };
1100
+
1101
+
1102
+ /** @inheritDoc */
1103
+ goog.ui.Dialog.prototype.disposeInternal = function() {
1104
+ // The superclass method calls exitDocument, which in turn calls
1105
+ // setVisible(false). Between them they clean up all event handlers.
1106
+ goog.ui.Dialog.superClass_.disposeInternal.call(this);
1107
+
1108
+ // The superclass method disposes of the element and its children,
1109
+ // unless the dialog was decorated. We only have to worry about
1110
+ // background mask elements.
1111
+ if (this.bgEl_) {
1112
+ goog.dom.removeNode(this.bgEl_);
1113
+ this.bgEl_ = null;
1114
+ }
1115
+ if (this.bgIframeEl_) {
1116
+ goog.dom.removeNode(this.bgIframeEl_);
1117
+ this.bgIframeEl_ = null;
1118
+ }
1119
+
1120
+ this.titleCloseEl_ = null;
1121
+ this.buttonEl_ = null;
1122
+ this.tabCatcherEl_ = null;
1123
+ };
1124
+
1125
+
1126
+ /**
1127
+ * Sets the button set to use.
1128
+ * Note: Passing in null will cause no button set to be rendered.
1129
+ * @param {goog.ui.Dialog.ButtonSet?} buttons The button set to use.
1130
+ */
1131
+ goog.ui.Dialog.prototype.setButtonSet = function(buttons) {
1132
+ this.buttons_ = buttons;
1133
+ if (this.buttonEl_) {
1134
+ if (this.buttons_) {
1135
+ this.buttons_.attachToElement(this.buttonEl_);
1136
+ } else {
1137
+ this.buttonEl_.innerHTML = '';
1138
+ }
1139
+ }
1140
+ };
1141
+
1142
+
1143
+ /**
1144
+ * Returns the button set being used.
1145
+ * @return {goog.ui.Dialog.ButtonSet?} The button set being used.
1146
+ */
1147
+ goog.ui.Dialog.prototype.getButtonSet = function() {
1148
+ return this.buttons_;
1149
+ };
1150
+
1151
+
1152
+ /**
1153
+ * Handles a click on the button container.
1154
+ * @param {goog.events.BrowserEvent} e Browser's event object.
1155
+ * @private
1156
+ */
1157
+ goog.ui.Dialog.prototype.onButtonClick_ = function(e) {
1158
+ var button = this.findParentButton_(/** @type {Element} */ (e.target));
1159
+ if (button && !button.disabled) {
1160
+ var key = button.name;
1161
+ var caption = /** @type {Element|string} */(
1162
+ this.getButtonSet().get(key));
1163
+ if (this.dispatchEvent(new goog.ui.Dialog.Event(key, caption))) {
1164
+ this.setVisible(false);
1165
+ }
1166
+ }
1167
+ };
1168
+
1169
+
1170
+ /**
1171
+ * Finds the parent button of an element (or null if there was no button
1172
+ * parent).
1173
+ * @param {Element} element The element that was clicked on.
1174
+ * @return {Element} Returns the parent button or null if not found.
1175
+ * @private
1176
+ */
1177
+ goog.ui.Dialog.prototype.findParentButton_ = function(element) {
1178
+ var el = element;
1179
+ while (el != null && el != this.buttonEl_) {
1180
+ if (el.tagName == 'BUTTON') {
1181
+ return /** @type {Element} */(el);
1182
+ }
1183
+ el = el.parentNode;
1184
+ }
1185
+ return null;
1186
+ };
1187
+
1188
+
1189
+ /**
1190
+ * Handles keydown and keypress events, and dismisses the popup if cancel is
1191
+ * pressed. If there is a cancel action in the ButtonSet, than that will be
1192
+ * fired. Also prevents tabbing out of the dialog.
1193
+ * @param {goog.events.BrowserEvent} e Browser's event object.
1194
+ * @private
1195
+ */
1196
+ goog.ui.Dialog.prototype.onKey_ = function(e) {
1197
+ var close = false;
1198
+ var hasHandler = false;
1199
+ var buttonSet = this.getButtonSet();
1200
+ var target = e.target;
1201
+
1202
+ if (e.type == goog.events.EventType.KEYDOWN) {
1203
+ // Escape and tab can only properly be handled in keydown handlers.
1204
+ if (this.escapeToCancel_ && e.keyCode == goog.events.KeyCodes.ESC) {
1205
+ // Only if there is a valid cancel button is an event dispatched.
1206
+ var cancel = buttonSet && buttonSet.getCancel();
1207
+
1208
+ // Users may expect to hit escape on a SELECT element.
1209
+ var isSpecialFormElement =
1210
+ target.tagName == 'SELECT' && !target.disabled;
1211
+
1212
+ if (cancel && !isSpecialFormElement) {
1213
+ hasHandler = true;
1214
+
1215
+ var caption = buttonSet.get(cancel);
1216
+ close = this.dispatchEvent(
1217
+ new goog.ui.Dialog.Event(cancel,
1218
+ /** @type {Element|null|string} */(caption)));
1219
+ } else if (!isSpecialFormElement) {
1220
+ close = true;
1221
+ }
1222
+ } else if (e.keyCode == goog.events.KeyCodes.TAB && e.shiftKey &&
1223
+ target == this.getElement()) {
1224
+ // Prevent the user from shift-tabbing backwards out of the dialog box.
1225
+ // TODO(user): Instead, we should move the focus to the last tabbable
1226
+ // element inside the dialog.
1227
+ hasHandler = true;
1228
+ }
1229
+ } else if (e.keyCode == goog.events.KeyCodes.ENTER) {
1230
+ // Only handle ENTER in keypress events, in case the action opens a
1231
+ // popup window.
1232
+ var key;
1233
+ if (target.tagName == 'BUTTON') {
1234
+ // If focus was on a button, it must have been enabled, so we can fire
1235
+ // that button's handler.
1236
+ key = target.name;
1237
+ } else if (buttonSet) {
1238
+ // Try to fire the default button's handler (if one exists), but only if
1239
+ // the button is enabled.
1240
+ var defaultKey = buttonSet.getDefault();
1241
+ var defaultButton = defaultKey && buttonSet.getButton(defaultKey);
1242
+
1243
+ // Users may expect to hit enter on a TEXTAREA or a SELECT element.
1244
+ var isSpecialFormElement =
1245
+ (target.tagName == 'TEXTAREA' || target.tagName == 'SELECT') &&
1246
+ !target.disabled;
1247
+
1248
+ if (defaultButton && !defaultButton.disabled && !isSpecialFormElement) {
1249
+ key = defaultKey;
1250
+ }
1251
+ }
1252
+ if (key) {
1253
+ hasHandler = true;
1254
+ close = this.dispatchEvent(
1255
+ new goog.ui.Dialog.Event(key, String(buttonSet.get(key))));
1256
+ }
1257
+ }
1258
+
1259
+ if (close || hasHandler) {
1260
+ e.stopPropagation();
1261
+ e.preventDefault();
1262
+ }
1263
+
1264
+ if (close) {
1265
+ this.setVisible(false);
1266
+ }
1267
+ };
1268
+
1269
+
1270
+ /**
1271
+ * Handles window resize events.
1272
+ * @param {goog.events.BrowserEvent} e Browser's event object.
1273
+ * @private
1274
+ */
1275
+ goog.ui.Dialog.prototype.onResize_ = function(e) {
1276
+ this.resizeBackground_();
1277
+ };
1278
+
1279
+
1280
+ /**
1281
+ * Handles focus events. Makes sure that if the user tabs past the
1282
+ * elements in the dialog, the focus wraps back to the beginning.
1283
+ * @param {goog.events.BrowserEvent} e Browser's event object.
1284
+ * @private
1285
+ */
1286
+ goog.ui.Dialog.prototype.onFocus_ = function(e) {
1287
+ if (this.tabCatcherEl_ == e.target) {
1288
+ goog.Timer.callOnce(this.focusElement_, 0, this);
1289
+ }
1290
+ };
1291
+
1292
+
1293
+ /**
1294
+ * Moves the focus to the dialog.
1295
+ * @private
1296
+ */
1297
+ goog.ui.Dialog.prototype.focusElement_ = function() {
1298
+ if (goog.userAgent.IE) {
1299
+ // In IE, we must first focus on the body or else focussing on a
1300
+ // sub-element will not work.
1301
+ this.getDomHelper().getDocument().body.focus();
1302
+ }
1303
+ this.getElement().focus();
1304
+ };
1305
+
1306
+
1307
+
1308
+ /**
1309
+ * Dialog event class.
1310
+ * @param {string} key Key identifier for the button.
1311
+ * @param {string|Element} caption Caption on the button (might be i18nlized).
1312
+ * @constructor
1313
+ * @extends {goog.events.Event}
1314
+ */
1315
+ goog.ui.Dialog.Event = function(key, caption) {
1316
+ this.type = goog.ui.Dialog.EventType.SELECT;
1317
+ this.key = key;
1318
+ this.caption = caption;
1319
+ };
1320
+ goog.inherits(goog.ui.Dialog.Event, goog.events.Event);
1321
+
1322
+
1323
+ /**
1324
+ * Event type constant for dialog events.
1325
+ * TODO(user): Change this to goog.ui.Dialog.EventType.SELECT.
1326
+ * @type {string}
1327
+ * @deprecated Use goog.ui.Dialog.EventType.SELECT.
1328
+ */
1329
+ goog.ui.Dialog.SELECT_EVENT = 'dialogselect';
1330
+
1331
+
1332
+ /**
1333
+ * Events dispatched by dialogs.
1334
+ * @enum {string}
1335
+ */
1336
+ goog.ui.Dialog.EventType = {
1337
+ /**
1338
+ * Dispatched when the user closes the dialog.
1339
+ * The dispatched event will always be of type {@link goog.ui.Dialog.Event}.
1340
+ * Canceling the event will prevent the dialog from closing.
1341
+ */
1342
+ SELECT: 'dialogselect',
1343
+
1344
+ /**
1345
+ * Dispatched after the dialog is closed. Not cancelable.
1346
+ */
1347
+ AFTER_HIDE: 'afterhide'
1348
+ };
1349
+
1350
+
1351
+
1352
+ /**
1353
+ * A button set defines the behaviour of a set of buttons that the dialog can
1354
+ * show. Uses the {@link goog.structs.Map} interface.
1355
+ * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper; see {@link
1356
+ * goog.ui.Component} for semantics.
1357
+ * @constructor
1358
+ * @extends {goog.structs.Map}
1359
+ */
1360
+ goog.ui.Dialog.ButtonSet = function(opt_domHelper) {
1361
+ // TODO(user): Refactor ButtonSet to extend goog.ui.Component?
1362
+ this.dom_ = opt_domHelper || goog.dom.getDomHelper();
1363
+ goog.structs.Map.call(this);
1364
+ };
1365
+ goog.inherits(goog.ui.Dialog.ButtonSet, goog.structs.Map);
1366
+
1367
+
1368
+ /**
1369
+ * A CSS className for this component.
1370
+ * @type {string}
1371
+ * @private
1372
+ */
1373
+ goog.ui.Dialog.ButtonSet.prototype.class_ = goog.getCssName('goog-buttonset');
1374
+
1375
+
1376
+ /**
1377
+ * The button that has default focus (references key in buttons_ map).
1378
+ * @type {?string}
1379
+ * @private
1380
+ */
1381
+ goog.ui.Dialog.ButtonSet.prototype.defaultButton_ = null;
1382
+
1383
+
1384
+ /**
1385
+ * Optional container the button set should be rendered into.
1386
+ * @type {Element}
1387
+ * @private
1388
+ */
1389
+ goog.ui.Dialog.ButtonSet.prototype.element_ = null;
1390
+
1391
+
1392
+ /**
1393
+ * The button whose action is associated with the escape key and the X button
1394
+ * on the dialog.
1395
+ * @type {?string}
1396
+ * @private
1397
+ */
1398
+ goog.ui.Dialog.ButtonSet.prototype.cancelButton_ = null;
1399
+
1400
+
1401
+ /**
1402
+ * Adds a button to the button set. Buttons will be displayed in the order they
1403
+ * are added.
1404
+ *
1405
+ * @param {string} key Key used to identify the button in events.
1406
+ * @param {string|Element} caption A string caption or a DOM node that can be
1407
+ * appended to a button element.
1408
+ * @param {boolean=} opt_isDefault Whether this button is the default button,
1409
+ * Dialog will dispatch for this button if enter is pressed.
1410
+ * @param {boolean=} opt_isCancel Whether this button has the same behaviour as
1411
+ * cancel. If escape is pressed this button will fire.
1412
+ * @return {!goog.ui.Dialog.ButtonSet} The button set, to make it easy to chain
1413
+ * "set" calls and build new ButtonSets.
1414
+ */
1415
+ goog.ui.Dialog.ButtonSet.prototype.set = function(key, caption,
1416
+ opt_isDefault, opt_isCancel) {
1417
+ goog.structs.Map.prototype.set.call(this, key, caption);
1418
+
1419
+ if (opt_isDefault) {
1420
+ this.defaultButton_ = key;
1421
+ }
1422
+ if (opt_isCancel) {
1423
+ this.cancelButton_ = key;
1424
+ }
1425
+
1426
+ return this;
1427
+ };
1428
+
1429
+
1430
+ /**
1431
+ * Adds a button (an object with a key and caption) to this button set. Buttons
1432
+ * will be displayed in the order they are added.
1433
+ * @see goog.ui.Dialog.DefaultButtons
1434
+ * @param {!{key: string, caption: string}} button The button key and caption.
1435
+ * @param {boolean=} opt_isDefault Whether this button is the default button.
1436
+ * Dialog will dispatch for this button if enter is pressed.
1437
+ * @param {boolean=} opt_isCancel Whether this button has the same behavior as
1438
+ * cancel. If escape is pressed this button will fire.
1439
+ * @return {!goog.ui.Dialog.ButtonSet} The button set, to make it easy to chain
1440
+ * "addButton" calls and build new ButtonSets.
1441
+ */
1442
+ goog.ui.Dialog.ButtonSet.prototype.addButton = function(button, opt_isDefault,
1443
+ opt_isCancel) {
1444
+ return this.set(button.key, button.caption, opt_isDefault, opt_isCancel);
1445
+ };
1446
+
1447
+
1448
+ /**
1449
+ * Attaches the button set to an element, rendering it inside.
1450
+ * @param {Element} el Container.
1451
+ */
1452
+ goog.ui.Dialog.ButtonSet.prototype.attachToElement = function(el) {
1453
+ this.element_ = el;
1454
+ this.render();
1455
+ };
1456
+
1457
+
1458
+ /**
1459
+ * Renders the button set inside its container element.
1460
+ */
1461
+ goog.ui.Dialog.ButtonSet.prototype.render = function() {
1462
+ if (this.element_) {
1463
+ this.element_.innerHTML = '';
1464
+ var domHelper = goog.dom.getDomHelper(this.element_);
1465
+ goog.structs.forEach(this, function(caption, key) {
1466
+ var button = domHelper.createDom('button', {'name': key}, caption);
1467
+ if (key == this.defaultButton_) {
1468
+ button.className = goog.getCssName(this.class_, 'default');
1469
+ }
1470
+ this.element_.appendChild(button);
1471
+ }, this);
1472
+ }
1473
+ };
1474
+
1475
+
1476
+ /**
1477
+ * Decorates the given element by adding any {@code button} elements found
1478
+ * among its descendants to the button set. The first button found is assumed
1479
+ * to be the default and will receive focus when the button set is rendered.
1480
+ * If a button with a name of {@link goog.ui.Dialog.DefaultButtonKeys.CANCEL}
1481
+ * is found, it is assumed to have "Cancel" semantics.
1482
+ * TODO(user): ButtonSet should be a goog.ui.Component. Really.
1483
+ * @param {Element} element The element to decorate; should contain buttons.
1484
+ */
1485
+ goog.ui.Dialog.ButtonSet.prototype.decorate = function(element) {
1486
+ if (!element || element.nodeType != goog.dom.NodeType.ELEMENT) {
1487
+ return;
1488
+ }
1489
+
1490
+ this.element_ = element;
1491
+ var buttons = this.element_.getElementsByTagName('button');
1492
+ for (var i = 0, button, key, caption; button = buttons[i]; i++) {
1493
+ // Buttons should have a "name" attribute and have their caption defined by
1494
+ // their innerHTML, but not everyone knows this, and we should play nice.
1495
+ key = button.name || button.id;
1496
+ caption = goog.dom.getTextContent(button) || button.value;
1497
+ if (key) {
1498
+ var isDefault = i == 0;
1499
+ var isCancel = button.name == goog.ui.Dialog.DefaultButtonKeys.CANCEL;
1500
+ this.set(key, caption, isDefault, isCancel);
1501
+ if (isDefault) {
1502
+ goog.dom.classes.add(button, goog.getCssName(this.class_,
1503
+ 'default'));
1504
+ }
1505
+ }
1506
+ }
1507
+ };
1508
+
1509
+
1510
+ /**
1511
+ * Sets the default button.
1512
+ * @param {?string} key The default button.
1513
+ */
1514
+ goog.ui.Dialog.ButtonSet.prototype.setDefault = function(key) {
1515
+ this.defaultButton_ = key;
1516
+ };
1517
+
1518
+
1519
+ /**
1520
+ * Returns the default button.
1521
+ * @return {?string} The default button.
1522
+ */
1523
+ goog.ui.Dialog.ButtonSet.prototype.getDefault = function() {
1524
+ return this.defaultButton_;
1525
+ };
1526
+
1527
+
1528
+ /**
1529
+ * Sets the cancel button.
1530
+ * @param {?string} key The cancel button.
1531
+ */
1532
+ goog.ui.Dialog.ButtonSet.prototype.setCancel = function(key) {
1533
+ this.cancelButton_ = key;
1534
+ };
1535
+
1536
+
1537
+ /**
1538
+ * Returns the cancel button.
1539
+ * @return {?string} The cancel button.
1540
+ */
1541
+ goog.ui.Dialog.ButtonSet.prototype.getCancel = function() {
1542
+ return this.cancelButton_;
1543
+ };
1544
+
1545
+
1546
+ /**
1547
+ * Returns the HTML Button element.
1548
+ * @param {string} key The button to return.
1549
+ * @return {Element} The button, if found else null.
1550
+ */
1551
+ goog.ui.Dialog.ButtonSet.prototype.getButton = function(key) {
1552
+ var buttons = this.getAllButtons();
1553
+ for (var i = 0, nextButton; nextButton = buttons[i]; i++) {
1554
+ if (nextButton.name == key || nextButton.id == key) {
1555
+ return nextButton;
1556
+ }
1557
+ }
1558
+ return null;
1559
+ };
1560
+
1561
+
1562
+ /**
1563
+ * Returns all the HTML Button elements in the button set container.
1564
+ * @return {NodeList} A live NodeList of the buttons.
1565
+ */
1566
+ goog.ui.Dialog.ButtonSet.prototype.getAllButtons = function() {
1567
+ return this.element_.getElementsByTagName(goog.dom.TagName.BUTTON);
1568
+ };
1569
+
1570
+
1571
+ /**
1572
+ * Enables or disables a button in this set by key. If the button is not found,
1573
+ * does nothing.
1574
+ * @param {string} key The button to enable or disable.
1575
+ * @param {boolean} enabled True to enable; false to disable.
1576
+ */
1577
+ goog.ui.Dialog.ButtonSet.prototype.setButtonEnabled = function(key, enabled) {
1578
+ var button = this.getButton(key);
1579
+ if (button) {
1580
+ button.disabled = !enabled;
1581
+ }
1582
+ };
1583
+
1584
+
1585
+ /**
1586
+ * Enables or disables all of the buttons in this set.
1587
+ * @param {boolean} enabled True to enable; false to disable.
1588
+ */
1589
+ goog.ui.Dialog.ButtonSet.prototype.setAllButtonsEnabled = function(enabled) {
1590
+ var allButtons = this.getAllButtons();
1591
+ for (var i = 0, button; button = allButtons[i]; i++) {
1592
+ button.disabled = !enabled;
1593
+ }
1594
+ };
1595
+
1596
+
1597
+ /**
1598
+ * The keys used to identify standard buttons in events.
1599
+ * @enum {string}
1600
+ */
1601
+ goog.ui.Dialog.DefaultButtonKeys = {
1602
+ OK: 'ok',
1603
+ CANCEL: 'cancel',
1604
+ YES: 'yes',
1605
+ NO: 'no',
1606
+ SAVE: 'save',
1607
+ CONTINUE: 'continue'
1608
+ };
1609
+
1610
+
1611
+ /**
1612
+ * @desc Standard caption for the dialog 'OK' button.
1613
+ * @private
1614
+ */
1615
+ goog.ui.Dialog.MSG_DIALOG_OK_ = goog.getMsg('OK');
1616
+
1617
+
1618
+ /**
1619
+ * @desc Standard caption for the dialog 'Cancel' button.
1620
+ * @private
1621
+ */
1622
+ goog.ui.Dialog.MSG_DIALOG_CANCEL_ = goog.getMsg('Cancel');
1623
+
1624
+
1625
+ /**
1626
+ * @desc Standard caption for the dialog 'Yes' button.
1627
+ * @private
1628
+ */
1629
+ goog.ui.Dialog.MSG_DIALOG_YES_ = goog.getMsg('Yes');
1630
+
1631
+
1632
+ /**
1633
+ * @desc Standard caption for the dialog 'No' button.
1634
+ * @private
1635
+ */
1636
+ goog.ui.Dialog.MSG_DIALOG_NO_ = goog.getMsg('No');
1637
+
1638
+
1639
+ /**
1640
+ * @desc Standard caption for the dialog 'Save' button.
1641
+ * @private
1642
+ */
1643
+ goog.ui.Dialog.MSG_DIALOG_SAVE_ = goog.getMsg('Save');
1644
+
1645
+
1646
+ /**
1647
+ * @desc Standard caption for the dialog 'Continue' button.
1648
+ * @private
1649
+ */
1650
+ goog.ui.Dialog.MSG_DIALOG_CONTINUE_ = goog.getMsg('Continue');
1651
+
1652
+
1653
+ /**
1654
+ * The default captions for the default buttons.
1655
+ * @enum {string}
1656
+ */
1657
+ goog.ui.Dialog.DefaultButtonCaptions = {
1658
+ OK: goog.ui.Dialog.MSG_DIALOG_OK_,
1659
+ CANCEL: goog.ui.Dialog.MSG_DIALOG_CANCEL_,
1660
+ YES: goog.ui.Dialog.MSG_DIALOG_YES_,
1661
+ NO: goog.ui.Dialog.MSG_DIALOG_NO_,
1662
+ SAVE: goog.ui.Dialog.MSG_DIALOG_SAVE_,
1663
+ CONTINUE: goog.ui.Dialog.MSG_DIALOG_CONTINUE_
1664
+ };
1665
+
1666
+
1667
+ /**
1668
+ * The standard buttons (keys associated with captions).
1669
+ * @enum {!{key: string, caption: string}}
1670
+ */
1671
+ goog.ui.Dialog.ButtonSet.DefaultButtons = {
1672
+ OK: {
1673
+ key: goog.ui.Dialog.DefaultButtonKeys.OK,
1674
+ caption: goog.ui.Dialog.DefaultButtonCaptions.OK
1675
+ },
1676
+ CANCEL: {
1677
+ key: goog.ui.Dialog.DefaultButtonKeys.CANCEL,
1678
+ caption: goog.ui.Dialog.DefaultButtonCaptions.CANCEL
1679
+ },
1680
+ YES: {
1681
+ key: goog.ui.Dialog.DefaultButtonKeys.YES,
1682
+ caption: goog.ui.Dialog.DefaultButtonCaptions.YES
1683
+ },
1684
+ NO: {
1685
+ key: goog.ui.Dialog.DefaultButtonKeys.NO,
1686
+ caption: goog.ui.Dialog.DefaultButtonCaptions.NO
1687
+ },
1688
+ SAVE: {
1689
+ key: goog.ui.Dialog.DefaultButtonKeys.SAVE,
1690
+ caption: goog.ui.Dialog.DefaultButtonCaptions.SAVE
1691
+ },
1692
+ CONTINUE: {
1693
+ key: goog.ui.Dialog.DefaultButtonKeys.CONTINUE,
1694
+ caption: goog.ui.Dialog.DefaultButtonCaptions.CONTINUE
1695
+ }
1696
+ };
1697
+
1698
+
1699
+ /**
1700
+ * Creates a new ButtonSet with a single 'OK' button, which is also set with
1701
+ * cancel button semantics so that pressing escape will close the dialog.
1702
+ * @return {!goog.ui.Dialog.ButtonSet} The created ButtonSet.
1703
+ */
1704
+ goog.ui.Dialog.ButtonSet.createOk = function() {
1705
+ return new goog.ui.Dialog.ButtonSet().
1706
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.OK, true, true);
1707
+ };
1708
+
1709
+
1710
+ /**
1711
+ * Creates a new ButtonSet with 'OK' (default) and 'Cancel' buttons.
1712
+ * @return {!goog.ui.Dialog.ButtonSet} The created ButtonSet.
1713
+ */
1714
+ goog.ui.Dialog.ButtonSet.createOkCancel = function() {
1715
+ return new goog.ui.Dialog.ButtonSet().
1716
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.OK, true).
1717
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.CANCEL, false, true);
1718
+ };
1719
+
1720
+
1721
+ /**
1722
+ * Creates a new ButtonSet with 'Yes' (default) and 'No' buttons.
1723
+ * @return {!goog.ui.Dialog.ButtonSet} The created ButtonSet.
1724
+ */
1725
+ goog.ui.Dialog.ButtonSet.createYesNo = function() {
1726
+ return new goog.ui.Dialog.ButtonSet().
1727
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.YES, true).
1728
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.NO, false, true);
1729
+ };
1730
+
1731
+
1732
+ /**
1733
+ * Creates a new ButtonSet with 'Yes', 'No' (default), and 'Cancel' buttons.
1734
+ * @return {!goog.ui.Dialog.ButtonSet} The created ButtonSet.
1735
+ */
1736
+ goog.ui.Dialog.ButtonSet.createYesNoCancel = function() {
1737
+ return new goog.ui.Dialog.ButtonSet().
1738
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.YES).
1739
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.NO, true).
1740
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.CANCEL, false, true);
1741
+ };
1742
+
1743
+
1744
+ /**
1745
+ * Creates a new ButtonSet with 'Continue', 'Save', and 'Cancel' (default)
1746
+ * buttons.
1747
+ * @return {!goog.ui.Dialog.ButtonSet} The created ButtonSet.
1748
+ */
1749
+ goog.ui.Dialog.ButtonSet.createContinueSaveCancel = function() {
1750
+ return new goog.ui.Dialog.ButtonSet().
1751
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.CONTINUE).
1752
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.SAVE).
1753
+ addButton(goog.ui.Dialog.ButtonSet.DefaultButtons.CANCEL, true, true);
1754
+ };
1755
+
1756
+
1757
+ // TODO(user): These shared instances should be phased out.
1758
+ (function() {
1759
+ /** @deprecated Use goog.ui.Dialog.ButtonSet#createOk. */
1760
+ goog.ui.Dialog.ButtonSet.OK = goog.ui.Dialog.ButtonSet.createOk();
1761
+
1762
+ /** @deprecated Use goog.ui.Dialog.ButtonSet#createOkCancel. */
1763
+ goog.ui.Dialog.ButtonSet.OK_CANCEL =
1764
+ goog.ui.Dialog.ButtonSet.createOkCancel();
1765
+
1766
+ /** @deprecated Use goog.ui.Dialog.ButtonSet#createYesNo. */
1767
+ goog.ui.Dialog.ButtonSet.YES_NO = goog.ui.Dialog.ButtonSet.createYesNo();
1768
+
1769
+ /** @deprecated Use goog.ui.Dialog.ButtonSet#createYesNoCancel. */
1770
+ goog.ui.Dialog.ButtonSet.YES_NO_CANCEL =
1771
+ goog.ui.Dialog.ButtonSet.createYesNoCancel();
1772
+
1773
+ /** @deprecated Use goog.ui.Dialog.ButtonSet#createContinueSaveCancel. */
1774
+ goog.ui.Dialog.ButtonSet.CONTINUE_SAVE_CANCEL =
1775
+ goog.ui.Dialog.ButtonSet.createContinueSaveCancel();
1776
+ })();