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,979 @@
1
+ // Copyright 2007 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 Browser history stack management class.
17
+ *
18
+ * The goog.History object allows a page to create history state without leaving
19
+ * the current document. This allows users to, for example, hit the browser's
20
+ * back button without leaving the current page.
21
+ *
22
+ * The history object can be instantiated in one of two modes. In user visible
23
+ * mode, the current history state is shown in the browser address bar as a
24
+ * document location fragment (the portion of the URL after the '#'). These
25
+ * addresses can be bookmarked, copied and pasted into another browser, and
26
+ * modified directly by the user like any other URL.
27
+ *
28
+ * If the history object is created in invisible mode, the user can still
29
+ * affect the state using the browser forward and back buttons, but the current
30
+ * state is not displayed in the browser address bar. These states are not
31
+ * bookmarkable or editable.
32
+ *
33
+ * It is possible to use both types of history object on the same page, but not
34
+ * currently recommended due to browser deficiencies.
35
+ *
36
+ * Tested to work in:
37
+ * <ul>
38
+ * <li>Firefox 1.0-3.6</li>
39
+ * <li>Internet Explorer 5.5-8.0</li>
40
+ * <li>Opera 9</li>
41
+ * <li>Safari 1.3-2.0, but not very well.</li>
42
+ * </ul>
43
+ *
44
+ * Shipping versions of Safari are incapable of creating and then reading
45
+ * history states due to a browser bug. The bugs have been fixed in Webkit
46
+ * nightly builds (tested on version 420+.) Older Safaris still fire the same
47
+ * navigation events as other browsers while browsing forward, but creates dead
48
+ * history states for going backward. Unfortunately, replacing the location
49
+ * does not seem to help, the history states are created anyway.
50
+ *
51
+ * @see ../demos/history1.html
52
+ * @see ../demos/history2.html
53
+ */
54
+
55
+
56
+ /* Some browser specific implementation notes:
57
+ *
58
+ * Firefox (through version 2.0.0.1):
59
+ *
60
+ * Ideally, navigating inside the hidden iframe could be done using
61
+ * about:blank#state instead of a real page on the server. Setting the hash on
62
+ * about:blank creates history entries, but the hash is not recorded and is lost
63
+ * when the user hits the back button. This is true in Opera as well. A blank
64
+ * HTML page must be provided for invisible states to be recorded in the iframe
65
+ * hash.
66
+ *
67
+ * After leaving the page with the History object and returning to it (by
68
+ * hitting the back button from another site), the last state of the iframe is
69
+ * overwritten. The most recent state is saved in a hidden input field so the
70
+ * previous state can be restored.
71
+ *
72
+ * Firefox does not store the previous value of dynamically generated input
73
+ * elements. To save the state, the hidden element must be in the HTML document,
74
+ * either in the original source or added with document.write. If a reference
75
+ * to the input element is not provided as a constructor argument, then the
76
+ * history object creates one using document.write, in which case the history
77
+ * object must be created from a script in the body element of the page.
78
+ *
79
+ * Manually editing the address field to a different hash link prevents further
80
+ * updates to the address bar. The page continues to work as normal, but the
81
+ * address shown will be incorrect until the page is reloaded.
82
+ *
83
+ * NOTE(user): It should be noted that Firefox will URL encode any non-regular
84
+ * ascii character, along with |space|, ", <, and >, when added to the fragment.
85
+ * If you expect these characters in your tokens you should consider that
86
+ * setToken('<b>') would result in the history fragment "%3Cb%3E", and
87
+ * "esp&eacute;re" would show "esp%E8re". (IE allows unicode characters in the
88
+ * fragment)
89
+ *
90
+ * TODO(user): Should we encapsualte this escaping into the API for visible
91
+ * history and encode all characters that aren't supported by Firefox? It also
92
+ * needs to be optional so apps can elect to handle the escaping themselves.
93
+ *
94
+ *
95
+ * Internet Explorer (through version 7.0):
96
+ *
97
+ * IE does not modify the history stack when the document fragment is changed.
98
+ * We create history entries instead by using document.open and document.write
99
+ * into a hidden iframe.
100
+ *
101
+ * IE destroys the history stack when navigating from /foo.html#someFragment to
102
+ * /foo.html. The workaround is to always append the # to the URL. This is
103
+ * somewhat unfortunate when loading the page without any # specified, because
104
+ * a second "click" sound will play on load as the fragment is automatically
105
+ * appended. If the hash is always present, this can be avoided.
106
+ *
107
+ * Manually editing the hash in the address bar in IE6 and then hitting the back
108
+ * button can replace the page with a blank page. This is a Bad User Experience,
109
+ * but probably not preventable.
110
+ *
111
+ * Internet Explorer 8.0, Webkit 532.1 and Gecko 1.9.2:
112
+ *
113
+ * IE8 has introduced the support to the HTML5 onhashchange event, which means
114
+ * we don't have to do any polling to detect fragment changes. Chrome and
115
+ * Firefox have added it on their newer builds, wekbit 532.1 and gecko 1.9.2.
116
+ * http://www.w3.org/TR/html5/history.html
117
+ * NOTE(goto): it is important to note that the document needs to have the
118
+ * <!DOCTYPE html> tag to enable the IE8 HTML5 mode. If the tag is not present,
119
+ * IE8 will enter IE7 compatibility mode (which can also be enabled manually).
120
+ *
121
+ * Opera (through version 9.02):
122
+ *
123
+ * Navigating through pages at a rate faster than some threshhold causes Opera
124
+ * to cancel all outstanding timeouts and intervals, including the location
125
+ * polling loop. Since this condition cannot be detected, common input events
126
+ * are captured to cause the loop to restart.
127
+ *
128
+ * location.replace is adding a history entry inside setHash_, despite
129
+ * documentation that suggests it should not.
130
+ *
131
+ *
132
+ * Safari (through version 2.0.4):
133
+ *
134
+ * After hitting the back button, the location.hash property is no longer
135
+ * readable from JavaScript. This is fixed in later WebKit builds, but not in
136
+ * currently shipping Safari. For now, the only recourse is to disable history
137
+ * states in Safari. Pages are still navigable via the History object, but the
138
+ * back button cannot restore previous states.
139
+ *
140
+ * Safari sets history states on navigation to a hashlink, but doesn't allow
141
+ * polling of the hash, so following actual anchor links in the page will create
142
+ * useless history entries. Using location.replace does not seem to prevent
143
+ * this. Not a terribly good user experience, but fixed in later Webkits.
144
+ *
145
+ *
146
+ * WebKit (nightly version 420+):
147
+ *
148
+ * This almost works. Returning to a page with an invisible history object does
149
+ * not restore the old state, however, and there is no pageshow event that fires
150
+ * in this browser. Holding off on finding a solution for now.
151
+ *
152
+ *
153
+ * Safari (version 3 and later)
154
+ * TODO(brenneman): Investigate Safari 3. It almost works, but the forward
155
+ * button seems to fail.
156
+ */
157
+
158
+
159
+ goog.provide('goog.History');
160
+ goog.provide('goog.History.Event');
161
+ goog.provide('goog.History.EventType');
162
+
163
+ goog.require('goog.Timer');
164
+ goog.require('goog.dom');
165
+ goog.require('goog.events');
166
+ goog.require('goog.events.BrowserEvent');
167
+ goog.require('goog.events.Event');
168
+ goog.require('goog.events.EventHandler');
169
+ goog.require('goog.events.EventTarget');
170
+ goog.require('goog.events.EventType');
171
+ goog.require('goog.history.Event');
172
+ goog.require('goog.history.EventType');
173
+ goog.require('goog.string');
174
+ goog.require('goog.userAgent');
175
+
176
+
177
+
178
+ /**
179
+ * A history management object. Can be instantiated in user-visible mode (uses
180
+ * the address fragment to manage state) or in hidden mode. This object should
181
+ * be created from a script in the document body before the document has
182
+ * finished loading.
183
+ *
184
+ * To store the hidden states in browsers other than IE, a hidden iframe is
185
+ * used. It must point to a valid html page on the same domain (which can and
186
+ * probably should be blank.)
187
+ *
188
+ * Sample instantiation and usage:
189
+ *
190
+ * <pre>
191
+ * // Instantiate history to use the address bar for state.
192
+ * var h = new goog.History();
193
+ * goog.events.listen(h, goog.history.EventType.NAVIGATE, navCallback);
194
+ * h.setEnabled(true);
195
+ *
196
+ * // Any changes to the location hash will call the following function.
197
+ * function navCallback(e) {
198
+ * alert('Navigated to state "' + e.token + '"');
199
+ * }
200
+ *
201
+ * // The history token can also be set from code directly.
202
+ * h.setToken('foo');
203
+ * </pre>
204
+ *
205
+ * @param {boolean=} opt_invisible True to use hidden history states instead of
206
+ * the user-visible location hash.
207
+ * @param {string=} opt_blankPageUrl A URL to a blank page on the same server.
208
+ * Required if opt_invisible is true. This URL is also used as the src
209
+ * for the iframe used to track history state in IE (if not specified the
210
+ * iframe is not given a src attribute). Access is Denied error may
211
+ * occur in IE7 if the window's URL's scheme is https, and this URL is
212
+ * not specified.
213
+ * @param {HTMLInputElement=} opt_input The hidden input element to be used to
214
+ * store the history token. If not provided, a hidden input element will
215
+ * be created using document.write.
216
+ * @param {HTMLIFrameElement=} opt_iframe The hidden iframe that will be used by
217
+ * IE for pushing history state changes, or by all browsers if opt_invisible
218
+ * is true. If not provided, a hidden iframe element will be created using
219
+ * document.write.
220
+ * @constructor
221
+ * @extends {goog.events.EventTarget}
222
+ */
223
+ goog.History = function(opt_invisible, opt_blankPageUrl, opt_input,
224
+ opt_iframe) {
225
+ goog.events.EventTarget.call(this);
226
+
227
+ if (opt_invisible && !opt_blankPageUrl) {
228
+ throw Error('Can\'t use invisible history without providing a blank page.');
229
+ }
230
+
231
+ var input;
232
+ if (opt_input) {
233
+ input = opt_input;
234
+ } else {
235
+ var inputId = 'history_state' + goog.History.historyCount_;
236
+ document.write(goog.string.subs(goog.History.INPUT_TEMPLATE_,
237
+ inputId, inputId));
238
+ input = goog.dom.getElement(inputId);
239
+ }
240
+
241
+ /**
242
+ * An input element that stores the current iframe state. Used to restore
243
+ * the state when returning to the page on non-IE browsers.
244
+ * @type {HTMLInputElement}
245
+ * @private
246
+ */
247
+ this.hiddenInput_ = (/** @type {HTMLInputElement} */ input);
248
+
249
+ /**
250
+ * The window whose location contains the history token fragment. This is
251
+ * the window that contains the hidden input. It's typically the top window.
252
+ * It is not necessarily the same window that the js code is loaded in.
253
+ * @type {Window}
254
+ * @private
255
+ */
256
+ this.window_ = opt_input ?
257
+ goog.dom.getWindow(goog.dom.getOwnerDocument(opt_input)) : window;
258
+
259
+ /**
260
+ * The initial page location with an empty hash component. If the page uses
261
+ * a BASE element, setting location.hash directly will navigate away from the
262
+ * current document. To prevent this, the full path is always specified. The #
263
+ * character is appended to the base URL, since removing the hash entirely
264
+ * once it has been set reloads the entire page.
265
+ * @type {string}
266
+ * @private
267
+ */
268
+ this.baseUrl_ = this.window_.location.href.split('#')[0] + '#';
269
+
270
+ /**
271
+ * The base URL for the hidden iframe. Must refer to a document in the
272
+ * same domain as the main page.
273
+ * @type {string|undefined}
274
+ * @private
275
+ */
276
+ this.iframeSrc_ = opt_blankPageUrl;
277
+
278
+ if (goog.userAgent.IE && !opt_blankPageUrl) {
279
+ this.iframeSrc_ = window.location.protocol == 'https' ? 'https:///' :
280
+ 'javascript:""';
281
+ }
282
+
283
+ /**
284
+ * A timer for polling the current history state for changes.
285
+ * @type {goog.Timer}
286
+ * @private
287
+ */
288
+ this.timer_ = new goog.Timer(goog.History.PollingType.NORMAL);
289
+
290
+ /**
291
+ * True if the state tokens are displayed in the address bar, false for hidden
292
+ * history states.
293
+ * @type {boolean}
294
+ * @private
295
+ */
296
+ this.userVisible_ = !opt_invisible;
297
+
298
+ /**
299
+ * An object to keep track of the history event listeners.
300
+ * @type {goog.events.EventHandler}
301
+ * @private
302
+ */
303
+ this.eventHandler_ = new goog.events.EventHandler(this);
304
+
305
+ if (opt_invisible || goog.userAgent.IE && !goog.History.HAS_ONHASHCHANGE) {
306
+ var iframe;
307
+ if (opt_iframe) {
308
+ iframe = opt_iframe;
309
+ } else {
310
+ var iframeId = 'history_iframe' + goog.History.historyCount_;
311
+ var srcAttribute = this.iframeSrc_ ?
312
+ 'src="' + goog.string.htmlEscape(this.iframeSrc_) + '"' :
313
+ '';
314
+ document.write(goog.string.subs(goog.History.IFRAME_TEMPLATE_,
315
+ iframeId,
316
+ srcAttribute));
317
+ iframe = goog.dom.getElement(iframeId);
318
+ }
319
+
320
+ /**
321
+ * Internet Explorer uses a hidden iframe for all history changes. Other
322
+ * browsers use the iframe only for pushing invisible states.
323
+ * @type {HTMLIFrameElement}
324
+ * @private
325
+ */
326
+ this.iframe_ = (/** @type {HTMLIFrameElement} */ iframe);
327
+
328
+ /**
329
+ * Whether the hidden iframe has had a document written to it yet in this
330
+ * session.
331
+ * @type {boolean}
332
+ * @private
333
+ */
334
+ this.unsetIframe_ = true;
335
+ }
336
+
337
+ if (goog.userAgent.IE && !goog.History.HAS_ONHASHCHANGE) {
338
+ // IE relies on the hidden input to restore the history state from previous
339
+ // sessions, but input values are only restored after window.onload. Set up
340
+ // a callback to poll the value after the onload event.
341
+ this.eventHandler_.listen(this.window_,
342
+ goog.events.EventType.LOAD,
343
+ this.onDocumentLoaded);
344
+
345
+ /**
346
+ * IE-only variable for determining if the document has loaded.
347
+ * @type {boolean}
348
+ * @protected
349
+ */
350
+ this.documentLoaded = false;
351
+
352
+ /**
353
+ * IE-only variable for storing whether the history object should be enabled
354
+ * once the document finishes loading.
355
+ * @type {boolean}
356
+ * @private
357
+ */
358
+ this.shouldEnable_ = false;
359
+ }
360
+
361
+ // Set the initial history state.
362
+ if (this.userVisible_) {
363
+ this.setHash_(this.getToken(), true);
364
+ } else {
365
+ this.setIframeToken_(this.hiddenInput_.value);
366
+ }
367
+
368
+ goog.History.historyCount_++;
369
+ };
370
+ goog.inherits(goog.History, goog.events.EventTarget);
371
+
372
+
373
+ /**
374
+ * Status of when the object is active and dispatching events.
375
+ * @type {boolean}
376
+ * @private
377
+ */
378
+ goog.History.prototype.enabled_ = false;
379
+
380
+
381
+ /**
382
+ * Whether the object is performing polling with longer intervals. This can
383
+ * occur for instance when setting the location of the iframe when in invisible
384
+ * mode and the server that is hosting the blank html page is down. In FF, this
385
+ * will cause the location of the iframe to no longer be accessible, with
386
+ * permision denied exceptions being thrown on every access of the history
387
+ * token. When this occurs, the polling interval is elongated. This causes
388
+ * exceptions to be thrown at a lesser rate while allowing for the history
389
+ * object to resurrect itself when the html page becomes accessible.
390
+ * @type {boolean}
391
+ * @private
392
+ */
393
+ goog.History.prototype.longerPolling_ = false;
394
+
395
+
396
+ /**
397
+ * The last token set by the history object, used to poll for changes.
398
+ * @type {?string}
399
+ * @private
400
+ */
401
+ goog.History.prototype.lastToken_ = null;
402
+
403
+
404
+ /**
405
+ * Whether the browser supports HTML5 history management.
406
+ * {@link http://www.w3.org/TR/html5/history.html}.
407
+ * @type {boolean}
408
+ */
409
+ goog.History.HAS_ONHASHCHANGE =
410
+ goog.userAgent.IE && document.documentMode >= 8 ||
411
+ goog.userAgent.GECKO && goog.userAgent.isVersion('1.9.2') ||
412
+ goog.userAgent.WEBKIT && goog.userAgent.isVersion('532.1');
413
+
414
+
415
+ /**
416
+ * If not null, polling in the user invisible mode will be disabled until this
417
+ * token is seen. This is used to prevent a race condition where the iframe
418
+ * hangs temporarily while the location is changed.
419
+ * @type {?string}
420
+ * @private
421
+ */
422
+ goog.History.prototype.lockedToken_ = null;
423
+
424
+
425
+ /**
426
+ * Disposes of the object.
427
+ */
428
+ goog.History.prototype.disposeInternal = function() {
429
+ goog.History.superClass_.disposeInternal.call(this);
430
+ this.eventHandler_.dispose();
431
+ this.setEnabled(false);
432
+ };
433
+
434
+
435
+ /**
436
+ * Starts or stops the History polling loop. When enabled, the History object
437
+ * will immediately fire an event for the current location. The caller can set
438
+ * up event listeners between the call to the constructor and the call to
439
+ * setEnabled.
440
+ *
441
+ * On IE, actual startup may be delayed until the iframe and hidden input
442
+ * element have been loaded and can be polled. This behavior is transparent to
443
+ * the caller.
444
+ *
445
+ * @param {boolean} enable Whether to enable the history polling loop.
446
+ */
447
+ goog.History.prototype.setEnabled = function(enable) {
448
+
449
+ if (enable == this.enabled_) {
450
+ return;
451
+ }
452
+
453
+ if (goog.userAgent.IE && !goog.History.HAS_ONHASHCHANGE &&
454
+ !this.documentLoaded) {
455
+ // Wait until the document has actually loaded before enabling the
456
+ // object or any saved state from a previous session will be lost.
457
+ this.shouldEnable_ = enable;
458
+ return;
459
+ }
460
+
461
+ if (enable) {
462
+ if (goog.userAgent.OPERA) {
463
+ // Capture events for common user input so we can restart the timer in
464
+ // Opera if it fails. Yes, this is distasteful. See operaDefibrillator_.
465
+ this.eventHandler_.listen(this.window_.document,
466
+ goog.History.INPUT_EVENTS_,
467
+ this.operaDefibrillator_);
468
+ } else if (goog.userAgent.GECKO) {
469
+ // Firefox will not restore the correct state after navigating away from
470
+ // and then back to the page with the history object. This can be fixed
471
+ // by restarting the history object on the pageshow event.
472
+ this.eventHandler_.listen(this.window_, 'pageshow', this.onShow_);
473
+ }
474
+
475
+ // TODO(user): make HTML5 and invisible history work by listening to the
476
+ // iframe # changes instead of the window.
477
+ if (goog.History.HAS_ONHASHCHANGE && this.userVisible_) {
478
+ this.eventHandler_.listen(
479
+ this.window_, goog.events.EventType.HASHCHANGE, this.onHashChange_);
480
+ this.enabled_ = true;
481
+ this.dispatchEvent(new goog.history.Event(this.getToken(), false));
482
+ } else if (!goog.userAgent.IE || this.documentLoaded) {
483
+ // Start dispatching history events if all necessary loading has
484
+ // completed (always true for browsers other than IE.)
485
+ this.eventHandler_.listen(this.timer_, goog.Timer.TICK,
486
+ goog.bind(this.check_, this, true));
487
+
488
+ this.enabled_ = true;
489
+
490
+ // Prevent the timer from dispatching an extraneous navigate event.
491
+ // However this causes the hash to get replaced with a null token in IE.
492
+ if (!goog.userAgent.IE) {
493
+ this.lastToken_ = this.getToken();
494
+ }
495
+
496
+ this.timer_.start();
497
+ this.dispatchEvent(new goog.history.Event(this.getToken(), false));
498
+ }
499
+
500
+ } else {
501
+ this.enabled_ = false;
502
+ this.eventHandler_.removeAll();
503
+ this.timer_.stop();
504
+ }
505
+ };
506
+
507
+
508
+ /**
509
+ * Callback for the window onload event in IE. This is necessary to read the
510
+ * value of the hidden input after restoring a history session. The value of
511
+ * input elements is not viewable until after window onload for some reason (the
512
+ * iframe state is similarly unavailable during the loading phase.) If
513
+ * setEnabled is called before the iframe has completed loading, the history
514
+ * object will actually be enabled at this point.
515
+ * @protected
516
+ */
517
+ goog.History.prototype.onDocumentLoaded = function() {
518
+ this.documentLoaded = true;
519
+
520
+ if (this.hiddenInput_.value) {
521
+ // Any saved value in the hidden input can only be read after the document
522
+ // has been loaded due to an IE limitation. Restore the previous state if
523
+ // it has been set.
524
+ this.setIframeToken_(this.hiddenInput_.value, true);
525
+ }
526
+
527
+ this.setEnabled(this.shouldEnable_);
528
+ };
529
+
530
+
531
+ /**
532
+ * Handler for the Gecko pageshow event. Restarts the history object so that the
533
+ * correct state can be restored in the hash or iframe.
534
+ * @param {goog.events.BrowserEvent} e The browser event.
535
+ * @private
536
+ */
537
+ goog.History.prototype.onShow_ = function(e) {
538
+ // NOTE(user): persisted is a property passed in the pageshow event that
539
+ // indicates whether the page is being persisted from the cache or is being
540
+ // loaded for the first time.
541
+ if (e.getBrowserEvent()['persisted']) {
542
+ this.setEnabled(false);
543
+ this.setEnabled(true);
544
+ }
545
+ };
546
+
547
+
548
+ /**
549
+ * Handles HTML5 onhashchange events on browsers where it is supported.
550
+ * This is very similar to {@link #check_}, except that it is not executed
551
+ * continuously. It is only used when {@code goog.History.HAS_ONHASHCHANGE} is
552
+ * true.
553
+ * @param {goog.events.BrowserEvent} e The browser event.
554
+ * @private
555
+ */
556
+ goog.History.prototype.onHashChange_ = function(e) {
557
+ var hash = this.getLocationFragment_(this.window_);
558
+ if (hash != this.lastToken_) {
559
+ this.update_(hash, true);
560
+ }
561
+ };
562
+
563
+
564
+ /**
565
+ * @return {string} The current token.
566
+ */
567
+ goog.History.prototype.getToken = function() {
568
+ if (this.lockedToken_ != null) {
569
+ return this.lockedToken_;
570
+ } else if (this.userVisible_) {
571
+ return this.getLocationFragment_(this.window_);
572
+ } else {
573
+ return this.getIframeToken_() || '';
574
+ }
575
+ };
576
+
577
+
578
+ /**
579
+ * Sets the history state. When user visible states are used, the URL fragment
580
+ * will be set to the provided token. Sometimes it is necessary to set the
581
+ * history token before the document title has changed, in this case IE's
582
+ * history drop down can be out of sync with the token. To get around this
583
+ * problem, the app can pass in a title to use with the hidden iframe.
584
+ * @param {string} token The history state identifier.
585
+ * @param {string=} opt_title Optional title used when setting the hidden iframe
586
+ * title in IE.
587
+ */
588
+ goog.History.prototype.setToken = function(token, opt_title) {
589
+ this.setHistoryState_(token, false, opt_title);
590
+ };
591
+
592
+
593
+ /**
594
+ * Replaces the current history state without affecting the rest of the history
595
+ * stack.
596
+ * @param {string} token The history state identifier.
597
+ * @param {string=} opt_title Optional title used when setting the hidden iframe
598
+ * title in IE.
599
+ */
600
+ goog.History.prototype.replaceToken = function(token, opt_title) {
601
+ this.setHistoryState_(token, true, opt_title);
602
+ };
603
+
604
+
605
+ /**
606
+ * Gets the location fragment for the current URL. We don't use location.hash
607
+ * directly as the browser helpfully urlDecodes the string for us which can
608
+ * corrupt the tokens. For example, if we want to store: label/%2Froot it would
609
+ * be returned as label//root.
610
+ * @param {Window} win The window object to use.
611
+ * @return {string} The fragment.
612
+ * @private
613
+ */
614
+ goog.History.prototype.getLocationFragment_ = function(win) {
615
+ var loc = win.location.href;
616
+ var index = loc.indexOf('#');
617
+ return index < 0 ? '' : loc.substring(index + 1);
618
+ };
619
+
620
+
621
+ /**
622
+ * Sets the history state. When user visible states are used, the URL fragment
623
+ * will be set to the provided token. Setting opt_replace to true will cause the
624
+ * navigation to occur, but will replace the current history entry without
625
+ * affecting the length of the stack.
626
+ *
627
+ * @param {string} token The history state identifier.
628
+ * @param {boolean} replace Set to replace the current history entry instead of
629
+ * appending a new history state.
630
+ * @param {string=} opt_title Optional title used when setting the hidden iframe
631
+ * title in IE.
632
+ * @private
633
+ */
634
+ goog.History.prototype.setHistoryState_ = function(token, replace, opt_title) {
635
+ if (this.getToken() != token) {
636
+ if (this.userVisible_) {
637
+ this.setHash_(token, replace);
638
+
639
+ if (!goog.History.HAS_ONHASHCHANGE) {
640
+ if (goog.userAgent.IE) {
641
+ // IE must save state using the iframe.
642
+ this.setIframeToken_(token, replace, opt_title);
643
+ }
644
+ }
645
+
646
+ // This condition needs to be called even if
647
+ // goog.History.HAS_ONHASHCHANGE is true so the NAVIGATE event fires
648
+ // sychronously.
649
+ if (this.enabled_) {
650
+ this.check_(false);
651
+ }
652
+ } else {
653
+ // Fire the event immediately so that setting history is synchronous, but
654
+ // set a suspendToken so that polling doesn't trigger a 'back'.
655
+ this.setIframeToken_(token, replace);
656
+ this.lockedToken_ = this.lastToken_ = this.hiddenInput_.value = token;
657
+ this.dispatchEvent(new goog.history.Event(token, false));
658
+ }
659
+ }
660
+ };
661
+
662
+
663
+ /**
664
+ * Sets or replaces the URL fragment. The token does not need to be URL encoded
665
+ * according to the URL specification, though certain characters (like newline)
666
+ * are automatically stripped.
667
+ *
668
+ * If opt_replace is not set, non-IE browsers will append a new entry to the
669
+ * history list. Setting the hash does not affect the history stack in IE
670
+ * (unless there is a pre-existing named anchor for that hash.)
671
+ *
672
+ * Older versions of Webkit cannot query the location hash, but it still can be
673
+ * set. If we detect one of these versions, always replace instead of creating
674
+ * new history entries.
675
+ *
676
+ * window.location.replace replaces the current state from the history stack.
677
+ * http://www.whatwg.org/specs/web-apps/current-work/#dom-location-replace
678
+ * http://www.whatwg.org/specs/web-apps/current-work/#replacement-enabled
679
+ *
680
+ * @param {string} hash The new string to set.
681
+ * @param {boolean=} opt_replace Set to true to replace the current token
682
+ * without appending a history entry.
683
+ * @private
684
+ */
685
+ goog.History.prototype.setHash_ = function(hash, opt_replace) {
686
+ // The page is reloaded if the hash is removed, so the '#' must always be
687
+ // appended to the base URL, even if setting an empty token.
688
+ var url = this.baseUrl_ + (hash || '');
689
+
690
+ var loc = this.window_.location;
691
+ if (url != loc.href) {
692
+ if (opt_replace) {
693
+ loc.replace(url);
694
+ } else {
695
+ loc.href = url;
696
+ }
697
+ }
698
+ };
699
+
700
+
701
+ /**
702
+ * Sets the hidden iframe state. On IE, this is accomplished by writing a new
703
+ * document into the iframe. In Firefox, the iframe's URL fragment stores the
704
+ * state instead.
705
+ *
706
+ * Older versions of webkit cannot set the iframe, so ignore those browsers.
707
+ *
708
+ * @param {string} token The new string to set.
709
+ * @param {boolean=} opt_replace Set to true to replace the current iframe state
710
+ * without appending a new history entry.
711
+ * @param {string=} opt_title Optional title used when setting the hidden iframe
712
+ * title in IE.
713
+ * @private
714
+ */
715
+ goog.History.prototype.setIframeToken_ = function(token,
716
+ opt_replace,
717
+ opt_title) {
718
+ if (this.unsetIframe_ || token != this.getIframeToken_()) {
719
+
720
+ this.unsetIframe_ = false;
721
+ token = goog.string.urlEncode(token);
722
+
723
+ if (goog.userAgent.IE) {
724
+ // Caching the iframe document results in document permission errors after
725
+ // leaving the page and returning. Access it anew each time instead.
726
+ var doc = goog.dom.getFrameContentDocument(this.iframe_);
727
+
728
+ doc.open('text/html', opt_replace ? 'replace' : undefined);
729
+ doc.write(goog.string.subs(
730
+ goog.History.IFRAME_SOURCE_TEMPLATE_,
731
+ goog.string.htmlEscape(
732
+ /** @type {string} */ (opt_title || this.window_.document.title)),
733
+ token));
734
+ doc.close();
735
+ } else {
736
+ var url = this.iframeSrc_ + '#' + token;
737
+
738
+ // In Safari, it is possible for the contentWindow of the iframe to not
739
+ // be present when the page is loading after a reload.
740
+ var contentWindow = this.iframe_.contentWindow;
741
+ if (contentWindow) {
742
+ if (opt_replace) {
743
+ contentWindow.location.replace(url);
744
+ } else {
745
+ contentWindow.location.href = url;
746
+ }
747
+ }
748
+ }
749
+ }
750
+ };
751
+
752
+
753
+ /**
754
+ * Return the current state string from the hidden iframe. On internet explorer,
755
+ * this is stored as a string in the document body. Other browsers use the
756
+ * location hash of the hidden iframe.
757
+ *
758
+ * Older versions of webkit cannot access the iframe location, so always return
759
+ * null in that case.
760
+ *
761
+ * @return {?string} The state token saved in the iframe (possibly null if the
762
+ * iframe has never loaded.).
763
+ * @private
764
+ */
765
+ goog.History.prototype.getIframeToken_ = function() {
766
+ if (goog.userAgent.IE) {
767
+ var doc = goog.dom.getFrameContentDocument(this.iframe_);
768
+ return doc.body ? goog.string.urlDecode(doc.body.innerHTML) : null;
769
+ } else {
770
+ // In Safari, it is possible for the contentWindow of the iframe to not
771
+ // be present when the page is loading after a reload.
772
+ var contentWindow = this.iframe_.contentWindow;
773
+ if (contentWindow) {
774
+ var hash;
775
+ /** @preserveTry */
776
+ try {
777
+ // Iframe tokens are urlEncoded
778
+ hash = goog.string.urlDecode(this.getLocationFragment_(contentWindow));
779
+ } catch (e) {
780
+ // An exception will be thrown if the location of the iframe can not be
781
+ // accessed (permission denied). This can occur in FF if the the server
782
+ // that is hosting the blank html page goes down and then a new history
783
+ // token is set. The iframe will navigate to an error page, and the
784
+ // location of the iframe can no longer be accessed. Due to the polling,
785
+ // this will cause constant exceptions to be thrown. In this case,
786
+ // we enable longer polling. We do not have to attempt to reset the
787
+ // iframe token because (a) we already fired the NAVIGATE event when
788
+ // setting the token, (b) we can rely on the locked token for current
789
+ // state, and (c) the token is still in the history and
790
+ // accesible on forward/back.
791
+ if (!this.longerPolling_) {
792
+ this.setLongerPolling_(true);
793
+ }
794
+
795
+ return null;
796
+ }
797
+
798
+ // There was no exception when getting the hash so turn off longer polling
799
+ // if it is on.
800
+ if (this.longerPolling_) {
801
+ this.setLongerPolling_(false);
802
+ }
803
+
804
+ return hash || null;
805
+ } else {
806
+ return null;
807
+ }
808
+ }
809
+ };
810
+
811
+
812
+ /**
813
+ * Checks the state of the document fragment and the iframe title to detect
814
+ * navigation changes. If {@code goog.History.HAS_ONHASHCHANGE} is
815
+ * {@code false}, then this runs approximately twenty times per second.
816
+ * @param {boolean} isNavigation True if the event was initiated by a browser
817
+ * action, false if it was caused by a setToken call. See
818
+ * {@link goog.history.Event}.
819
+ * @private
820
+ */
821
+ goog.History.prototype.check_ = function(isNavigation) {
822
+ if (this.userVisible_) {
823
+ var hash = this.getLocationFragment_(this.window_);
824
+ if (hash != this.lastToken_) {
825
+ this.update_(hash, isNavigation);
826
+ }
827
+ }
828
+
829
+ // IE uses the iframe for state for both the visible and non-visible version.
830
+ if (!this.userVisible_ || goog.userAgent.IE &&
831
+ !goog.History.HAS_ONHASHCHANGE) {
832
+ var token = this.getIframeToken_() || '';
833
+ if (this.lockedToken_ == null || token == this.lockedToken_) {
834
+ this.lockedToken_ = null;
835
+ if (token != this.lastToken_) {
836
+ this.update_(token, isNavigation);
837
+ }
838
+ }
839
+ }
840
+ };
841
+
842
+
843
+ /**
844
+ * Updates the current history state with a given token. Called after a change
845
+ * to the location or the iframe state is detected by poll_.
846
+ *
847
+ * @param {string} token The new history state.
848
+ * @param {boolean} isNavigation True if the event was initiated by a browser
849
+ * action, false if it was caused by a setToken call. See
850
+ * {@link goog.history.Event}.
851
+ * @private
852
+ */
853
+ goog.History.prototype.update_ = function(token, isNavigation) {
854
+ this.lastToken_ = this.hiddenInput_.value = token;
855
+
856
+ if (this.userVisible_) {
857
+ if (goog.userAgent.IE && !goog.History.HAS_ONHASHCHANGE) {
858
+ this.setIframeToken_(token);
859
+ }
860
+
861
+ this.setHash_(token);
862
+ } else {
863
+ this.setIframeToken_(token);
864
+ }
865
+
866
+ this.dispatchEvent(new goog.history.Event(this.getToken(), isNavigation));
867
+ };
868
+
869
+
870
+ /**
871
+ * Sets if the history oject should use longer intervals when polling.
872
+ *
873
+ * @param {boolean} longerPolling Whether to enable longer polling.
874
+ * @private
875
+ */
876
+ goog.History.prototype.setLongerPolling_ = function(longerPolling) {
877
+ if (this.longerPolling_ != longerPolling) {
878
+ this.timer_.setInterval(longerPolling ?
879
+ goog.History.PollingType.LONG : goog.History.PollingType.NORMAL);
880
+ }
881
+ this.longerPolling_ = longerPolling;
882
+ };
883
+
884
+
885
+ /**
886
+ * Opera cancels all outstanding timeouts and intervals after any rapid
887
+ * succession of navigation events, including the interval used to detect
888
+ * navigation events. This function restarts the interval so that navigation can
889
+ * continue. Ideally, only events which would be likely to cause a navigation
890
+ * change (mousedown and keydown) would be bound to this function. Since Opera
891
+ * seems to ignore keydown events while the alt key is pressed (such as
892
+ * alt-left or right arrow), this function is also bound to the much more
893
+ * frequent mousemove event. This way, when the update loop freezes, it will
894
+ * unstick itself as the user wiggles the mouse in frustration.
895
+ * @private
896
+ */
897
+ goog.History.prototype.operaDefibrillator_ = function() {
898
+ this.timer_.stop();
899
+ this.timer_.start();
900
+ };
901
+
902
+
903
+ /**
904
+ * List of user input event types registered in Opera to restart the history
905
+ * timer (@see goog.History#operaDefibrillator_).
906
+ * @type {Array.<string>}
907
+ * @private
908
+ */
909
+ goog.History.INPUT_EVENTS_ = [
910
+ goog.events.EventType.MOUSEDOWN,
911
+ goog.events.EventType.KEYDOWN,
912
+ goog.events.EventType.MOUSEMOVE
913
+ ];
914
+
915
+
916
+ /**
917
+ * Minimal HTML page used to populate the iframe in Internet Explorer. The title
918
+ * is visible in the history dropdown menu, the iframe state is stored as the
919
+ * body innerHTML.
920
+ * @type {string}
921
+ * @private
922
+ */
923
+ goog.History.IFRAME_SOURCE_TEMPLATE_ = '<title>%s</title><body>%s</body>';
924
+
925
+
926
+ /**
927
+ * HTML template for an invisible iframe.
928
+ * @type {string}
929
+ * @private
930
+ */
931
+ goog.History.IFRAME_TEMPLATE_ =
932
+ '<iframe id="%s" style="display:none" %s></iframe>';
933
+
934
+
935
+ /**
936
+ * HTML template for an invisible named input element.
937
+ * @type {string}
938
+ * @private
939
+ */
940
+ goog.History.INPUT_TEMPLATE_ =
941
+ '<input type="text" name="%s" id="%s" style="display:none" />';
942
+
943
+
944
+ /**
945
+ * Counter for the number of goog.History objects that have been instantiated.
946
+ * Used to create unique IDs.
947
+ * @type {number}
948
+ * @private
949
+ */
950
+ goog.History.historyCount_ = 0;
951
+
952
+
953
+ /**
954
+ * Types of polling. The values are in ms of the polling interval.
955
+ * @enum {number}
956
+ */
957
+ goog.History.PollingType = {
958
+ NORMAL: 150,
959
+ LONG: 10000
960
+ };
961
+
962
+
963
+ /**
964
+ * Constant for the history change event type.
965
+ * @enum {string}
966
+ * @deprecated Use goog.history.EventType.
967
+ */
968
+ goog.History.EventType = goog.history.EventType;
969
+
970
+
971
+
972
+ /**
973
+ * Constant for the history change event type.
974
+ * @param {string} token The string identifying the new history state.
975
+ * @extends {goog.events.Event}
976
+ * @constructor
977
+ * @deprecated Use goog.history.Event.
978
+ */
979
+ goog.History.Event = goog.history.Event;