Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

[ui] Convert Hue to jQuery

* Updated Beeswax
* Upgraded jQuery to 1.7
* Styled filechooser
* Added fileuploader
* Initial support for table creation
* Initial import for Shell app
* Improved Filebrowser and JobDesigner, WIP
* Improved usability and look'n'feel
* Added sign out link and fixed login page
* Updated colors, fixed bugs on filebrowser
* Update H1 consistency on Beeswax
* Updated H1 consistency in JobBrowser
* Sample material for Babel i18n
* Implementation of common header and footer on Desktop
  • Loading branch information...
commit 5239e04e9653140d1b5b2b9e8d71f67525644fed 1 parent 2c3ee3d
@enricoberti enricoberti authored bc Wong committed
Showing with 9,385 additions and 4,845 deletions.
  1. +4 −0 .gitignore
  2. +21 −18 apps/about/src/about/templates/index.mako
  3. +76 −19 apps/beeswax/src/beeswax/templates/beeswax_components.mako
  4. +97 −76 apps/beeswax/src/beeswax/templates/choose_delimiter.mako
  5. +124 −57 apps/beeswax/src/beeswax/templates/choose_file.mako
  6. +23 −7 apps/beeswax/src/beeswax/templates/configuration.mako
  7. +14 −7 apps/beeswax/src/beeswax/templates/confirm.html
  8. +8 −3 apps/beeswax/src/beeswax/templates/create_table_index.mako
  9. +526 −282 apps/beeswax/src/beeswax/templates/create_table_manually.mako
  10. +80 −77 apps/beeswax/src/beeswax/templates/define_columns.mako
  11. +12 −6 apps/beeswax/src/beeswax/templates/describe_partitions.mako
  12. +177 −101 apps/beeswax/src/beeswax/templates/describe_table.mako
  13. +345 −224 apps/beeswax/src/beeswax/templates/execute.mako
  14. +29 −23 apps/beeswax/src/beeswax/templates/explain.mako
  15. +0 −70 apps/beeswax/src/beeswax/templates/header_footer.mako
  16. +44 −0 apps/beeswax/src/beeswax/templates/layout.mako
  17. +68 −29 apps/beeswax/src/beeswax/templates/list_designs.mako
  18. +65 −45 apps/beeswax/src/beeswax/templates/list_history.mako
  19. +9 −3 apps/beeswax/src/beeswax/templates/load_table.mako
  20. +175 −131 apps/beeswax/src/beeswax/templates/my_queries.mako
  21. +9 −3 apps/beeswax/src/beeswax/templates/parameterization.mako
  22. +9 −4 apps/beeswax/src/beeswax/templates/report_gen.mako
  23. +9 −4 apps/beeswax/src/beeswax/templates/save_results.mako
  24. +71 −24 apps/beeswax/src/beeswax/templates/show_tables.mako
  25. +4 −5 apps/beeswax/src/beeswax/templates/util.mako
  26. +115 −104 apps/beeswax/src/beeswax/templates/watch_results.mako
  27. +58 −53 apps/beeswax/src/beeswax/templates/watch_wait.mako
  28. +0 −1,183 apps/beeswax/static/css/beeswax.css
  29. +0 −90 apps/filebrowser/src/filebrowser/plugin/toolbar.py
  30. +1,249 −0 apps/filebrowser/src/filebrowser/static/fileuploader.js
  31. +45 −46 apps/filebrowser/src/filebrowser/templates/chmod.mako
  32. +3 −9 apps/filebrowser/src/filebrowser/templates/chooser.mako
  33. +32 −30 apps/filebrowser/src/filebrowser/templates/chown.mako
  34. +66 −51 apps/filebrowser/src/filebrowser/templates/display.mako
  35. +78 −23 apps/filebrowser/src/filebrowser/templates/edit.mako
  36. +19 −11 apps/filebrowser/src/filebrowser/templates/editor_components.mako
  37. +15 −9 apps/filebrowser/src/filebrowser/templates/fileop.mako
  38. +121 −0 apps/filebrowser/src/filebrowser/templates/header_footer.mako
  39. +16 −6 apps/filebrowser/src/filebrowser/templates/listdir.mako
  40. +383 −45 apps/filebrowser/src/filebrowser/templates/listdir_components.mako
  41. +14 −14 apps/filebrowser/src/filebrowser/templates/mkdir.mako
  42. +19 −18 apps/filebrowser/src/filebrowser/templates/move.mako
  43. +14 −14 apps/filebrowser/src/filebrowser/templates/rename.mako
  44. +41 −14 apps/filebrowser/src/filebrowser/templates/upload.mako
  45. +3 −5 apps/filebrowser/src/filebrowser/templates/upload_done.mako
  46. +727 −658 apps/filebrowser/src/filebrowser/views.py
  47. +8 −13 apps/{useradmin/src/useradmin/templates/header_footer.mako → hello/src/hello/templates/hello.mako}
  48. +2 −2 apps/hello/src/hello/views.py
  49. +19 −22 apps/help/src/help/templates/display.mako
  50. +8 −4 apps/jobbrowser/src/jobbrowser/templates/attempt.mako
  51. +224 −145 apps/jobbrowser/src/jobbrowser/templates/job.mako
  52. +43 −63 apps/jobbrowser/src/jobbrowser/templates/jobbrowser_components.mako
  53. +113 −94 apps/jobbrowser/src/jobbrowser/templates/jobs.mako
  54. +160 −112 apps/jobbrowser/src/jobbrowser/templates/task.mako
  55. +87 −97 apps/jobbrowser/src/jobbrowser/templates/tasks.mako
  56. +42 −36 apps/jobbrowser/src/jobbrowser/templates/tasktracker.mako
  57. +51 −35 apps/jobbrowser/src/jobbrowser/templates/tasktrackers.mako
  58. +5 −0 apps/jobsub/babel.cfg
  59. +23 −0 apps/jobsub/src/jobsub/locale/django.pot
  60. BIN  apps/jobsub/src/jobsub/locale/en_US/LC_MESSAGES/django.mo
  61. +23 −0 apps/jobsub/src/jobsub/locale/en_US/LC_MESSAGES/django.po
  62. BIN  apps/jobsub/src/jobsub/locale/it/LC_MESSAGES/django.mo
  63. +23 −0 apps/jobsub/src/jobsub/locale/it/LC_MESSAGES/django.po
  64. +4 −3 apps/jobsub/src/jobsub/templates/confirm.html
  65. +55 −47 apps/jobsub/src/jobsub/templates/edit.html
  66. +19 −18 apps/jobsub/src/jobsub/templates/forms/basic_parameterization.html
  67. +29 −27 apps/jobsub/src/jobsub/templates/forms/jar.html
  68. +213 −183 apps/jobsub/src/jobsub/templates/forms/streaming.html
  69. +76 −11 apps/jobsub/src/jobsub/templates/layout.html
  70. +101 −54 apps/jobsub/src/jobsub/templates/list.html
  71. +25 −23 apps/jobsub/src/jobsub/templates/parameterize.html
  72. +27 −25 apps/jobsub/src/jobsub/templates/scripteditor.html
  73. +2 −2 apps/jobsub/src/jobsub/templates/types.html
  74. +58 −32 apps/jobsub/src/jobsub/templates/watch.html
  75. +25 −18 apps/jobsub/src/jobsub/templates/watch_submission.html
  76. +31 −17 apps/shell/src/shell/templates/failed_to_create.mako
  77. +239 −22 apps/shell/src/shell/templates/index.mako
  78. +26 −14 apps/shell/src/shell/templates/no_such_user.mako
  79. +24 −13 apps/shell/src/shell/templates/not_running_spawning.mako
  80. +0 −49 apps/shell/src/shell/templates/shared_components.mako
  81. +2 −0  apps/useradmin/babel.cfg
  82. +39 −0 apps/useradmin/src/useradmin/locale/django.pot
  83. +39 −0 apps/useradmin/src/useradmin/locale/en_US/LC_MESSAGES/django.po
  84. +40 −0 apps/useradmin/src/useradmin/locale/it/LC_MESSAGES/django.po
  85. +12 −8 apps/useradmin/src/useradmin/templates/confirm.mako
  86. +38 −35 apps/useradmin/src/useradmin/templates/edit_user.mako
  87. +92 −18 apps/useradmin/src/useradmin/templates/list_users.mako
  88. +10 −2 apps/useradmin/static/css/useradmin.css
  89. +28 −0 desktop/core/ext-py/Babel-0.9.6/COPYING
  90. +181 −0 desktop/core/ext-py/Babel-0.9.6/ChangeLog
  91. +39 −0 desktop/core/ext-py/Babel-0.9.6/INSTALL.txt
  92. +4 −0 desktop/core/ext-py/Babel-0.9.6/MANIFEST.in
  93. +18 −0 desktop/core/ext-py/Babel-0.9.6/PKG-INFO
  94. +12 −0 desktop/core/ext-py/Babel-0.9.6/README.txt
  95. +39 −0 desktop/core/ext-py/Babel-0.9.6/babel/__init__.py
  96. +790 −0 desktop/core/ext-py/Babel-0.9.6/babel/core.py
  97. +991 −0 desktop/core/ext-py/Babel-0.9.6/babel/dates.py
  98. BIN  desktop/core/ext-py/Babel-0.9.6/babel/global.dat
  99. +209 −0 desktop/core/ext-py/Babel-0.9.6/babel/localedata.py
  100. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/aa.dat
  101. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/aa_DJ.dat
  102. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/aa_ER.dat
  103. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/aa_ER_SAAHO.dat
  104. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/aa_ET.dat
  105. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/af.dat
  106. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/af_NA.dat
  107. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/af_ZA.dat
  108. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ak.dat
  109. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ak_GH.dat
  110. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/am.dat
  111. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/am_ET.dat
  112. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar.dat
  113. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_AE.dat
  114. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_BH.dat
  115. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_DZ.dat
  116. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_EG.dat
  117. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_IQ.dat
  118. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_JO.dat
  119. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_KW.dat
  120. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_LB.dat
  121. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_LY.dat
  122. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_MA.dat
  123. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_OM.dat
  124. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_QA.dat
  125. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_SA.dat
  126. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_SD.dat
  127. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_SY.dat
  128. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_TN.dat
  129. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ar_YE.dat
  130. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/as.dat
  131. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/as_IN.dat
  132. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/az.dat
  133. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/az_AZ.dat
  134. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/az_Cyrl.dat
  135. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/az_Cyrl_AZ.dat
  136. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/az_Latn.dat
  137. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/az_Latn_AZ.dat
  138. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/be.dat
  139. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/be_BY.dat
  140. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/bg.dat
  141. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/bg_BG.dat
  142. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/bn.dat
  143. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/bn_BD.dat
  144. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/bn_IN.dat
  145. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/bs.dat
  146. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/bs_BA.dat
  147. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/byn.dat
  148. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/byn_ER.dat
  149. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ca.dat
  150. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ca_ES.dat
  151. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/cch.dat
  152. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/cch_NG.dat
  153. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/cop.dat
  154. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/cs.dat
  155. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/cs_CZ.dat
  156. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/cy.dat
  157. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/cy_GB.dat
  158. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/da.dat
  159. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/da_DK.dat
  160. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/de.dat
  161. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/de_AT.dat
  162. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/de_BE.dat
  163. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/de_CH.dat
  164. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/de_DE.dat
  165. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/de_LI.dat
  166. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/de_LU.dat
  167. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/dv.dat
  168. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/dv_MV.dat
  169. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/dz.dat
  170. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/dz_BT.dat
  171. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ee.dat
  172. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ee_GH.dat
  173. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ee_TG.dat
  174. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/el.dat
  175. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/el_CY.dat
  176. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/el_GR.dat
  177. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/el_POLYTON.dat
  178. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en.dat
  179. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_AS.dat
  180. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_AU.dat
  181. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_BE.dat
  182. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_BW.dat
  183. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_BZ.dat
  184. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_CA.dat
  185. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_Dsrt.dat
  186. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_Dsrt_US.dat
  187. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_GB.dat
  188. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_GU.dat
  189. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_HK.dat
  190. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_IE.dat
  191. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_IN.dat
  192. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_JM.dat
  193. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_MH.dat
  194. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_MP.dat
  195. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_MT.dat
  196. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_NA.dat
  197. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_NZ.dat
  198. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_PH.dat
  199. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_PK.dat
  200. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_SG.dat
  201. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_Shaw.dat
  202. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_TT.dat
  203. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_UM.dat
  204. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_US.dat
  205. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_US_POSIX.dat
  206. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_VI.dat
  207. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_ZA.dat
  208. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/en_ZW.dat
  209. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/eo.dat
  210. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es.dat
  211. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_AR.dat
  212. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_BO.dat
  213. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_CL.dat
  214. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_CO.dat
  215. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_CR.dat
  216. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_DO.dat
  217. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_EC.dat
  218. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_ES.dat
  219. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_GT.dat
  220. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_HN.dat
  221. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_MX.dat
  222. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_NI.dat
  223. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_PA.dat
  224. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_PE.dat
  225. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_PR.dat
  226. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_PY.dat
  227. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_SV.dat
  228. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_US.dat
  229. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_UY.dat
  230. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/es_VE.dat
  231. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/et.dat
  232. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/et_EE.dat
  233. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/eu.dat
  234. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/eu_ES.dat
  235. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fa.dat
  236. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fa_AF.dat
  237. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fa_IR.dat
  238. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fi.dat
  239. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fi_FI.dat
  240. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fil.dat
  241. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fil_PH.dat
  242. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fo.dat
  243. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fo_FO.dat
  244. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fr.dat
  245. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fr_BE.dat
  246. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fr_CA.dat
  247. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fr_CH.dat
  248. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fr_FR.dat
  249. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fr_LU.dat
  250. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fr_MC.dat
  251. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fr_SN.dat
  252. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fur.dat
  253. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/fur_IT.dat
  254. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ga.dat
  255. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ga_IE.dat
  256. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gaa.dat
  257. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gaa_GH.dat
  258. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gez.dat
  259. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gez_ER.dat
  260. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gez_ET.dat
  261. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gl.dat
  262. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gl_ES.dat
  263. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gu.dat
  264. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gu_IN.dat
  265. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gv.dat
  266. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/gv_GB.dat
  267. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha.dat
  268. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_Arab.dat
  269. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_Arab_NG.dat
  270. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_Arab_SD.dat
  271. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_GH.dat
  272. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_Latn.dat
  273. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_Latn_GH.dat
  274. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_Latn_NE.dat
  275. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_Latn_NG.dat
  276. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_NE.dat
  277. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_NG.dat
  278. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ha_SD.dat
  279. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/haw.dat
  280. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/haw_US.dat
  281. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/he.dat
  282. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/he_IL.dat
  283. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hi.dat
  284. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hi_IN.dat
  285. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hr.dat
  286. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hr_HR.dat
  287. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hu.dat
  288. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hu_HU.dat
  289. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hy.dat
  290. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hy_AM.dat
  291. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/hy_AM_REVISED.dat
  292. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ia.dat
  293. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/id.dat
  294. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/id_ID.dat
  295. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ig.dat
  296. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ig_NG.dat
  297. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ii.dat
  298. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/ii_CN.dat
  299. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/in.dat
  300. BIN  desktop/core/ext-py/Babel-0.9.6/babel/localedata/is.dat
Sorry, we could not display the entire diff because too many files (683) changed.
View
4 .gitignore
@@ -1,10 +1,14 @@
# OS X nonsense
.DS_Store
+._*
# Python compiled files
*.pyc
*.pyo
+# Language compiled files
+*.mo
+
# vim tmp files
.*.swp
.*.swo
View
39 apps/about/src/about/templates/index.mako
@@ -13,24 +13,27 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-<!DOCTYPE html>
+<%!
+from desktop.views import commonheader, commonfooter
+%>
+${commonheader("About jHue", "about", "100px")}
+ <div class="menubar">
+ <div class="menubar-inner">
+ <div class="container-fluid">
+ <ul class="nav">
+ <li><a href="${url("desktop.views.dump_config")}">Configuration</a></li>
+ <li><a href="${url("desktop.views.check_config")}">Check for misconfiguration</a></li>
+ <li><a href="${url("desktop.views.log_view")}">Server Logs</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div class="container-fluid">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title>About - Hue</title>
-</head>
-
-<body>
- <center>
<img src="/static/art/help/logo.png" />
- <p>Hue</p>
- <p>${version}</p>
- <p>&nbsp;</p>
- <p><a target="_blank" href="${url("desktop.views.dump_config")}">Configuration</a></p>
- <p><a target="_blank" href="${url("desktop.views.check_config")}">Check for Misconfiguration</a></p>
- <p><a target="_blank" href="${url("desktop.views.log_view")}">Server Logs</a></p>
- </center>
-</body>
+ <p>Hue ${version}</p>
+
+ </div>
-</html>
+${commonfooter()}
View
95 apps/beeswax/src/beeswax/templates/beeswax_components.mako
@@ -16,6 +16,66 @@
<%!
from desktop.lib.django_util import extract_field_data
%>
+<%def name="fieldName(field)">
+
+</%def>
+
+<%def name="label(
+ field,
+ render_default=False,
+ data_filters=None,
+ hidden=False,
+ notitle=False,
+ tag='input',
+ klass=None,
+ attrs=None,
+ value=None,
+ help=False,
+ help_attrs=None,
+ dd_attrs=None,
+ dt_attrs=None,
+ title_klass=None,
+ button_text=False
+ )">
+<%
+ if value is None:
+ value = extract_field_data(field)
+
+ def make_attr_str(attributes):
+ if attributes is None:
+ attributes = {}
+ ret_str = ""
+ for key, value in attributes.iteritems():
+ if key == "klass":
+ key = "class"
+ ret_str += "%s='%s'" % (key.replace("_", "-"), unicode(value))
+ return ret_str
+
+ if not attrs:
+ attrs = {}
+ if not render_default:
+ attrs.setdefault('type', 'text')
+
+ if data_filters:
+ attrs.data_filters = data_filters
+
+ classes = []
+ if klass:
+ classes.append(klass)
+ if hidden:
+ classes.append("jframe-hidden")
+ cls = ' '.join(classes)
+
+ title_classes = []
+ if title_klass:
+ title_classes.append(title_klass)
+ if notitle or hidden:
+ title_classes.append("jframe-hidden")
+ titlecls = ' '.join(title_classes)
+%>
+ ${field.label_tag() | n}
+</%def>
+
<%def name="field(
field,
@@ -73,8 +133,6 @@
% if field.is_hidden:
${unicode(field) | n}
% else:
- <dt class="${titlecls}" ${make_attr_str(dt_attrs) | n}>${field.label_tag() | n}</dt>
- <dd class="${cls}" ${make_attr_str(dd_attrs) | n}>
% if render_default:
${unicode(field) | n}
% else:
@@ -83,20 +141,20 @@
% elif tag == 'button':
<button name="${field.html_name | n}" ${make_attr_str(attrs) | n} value="${value}"/>${button_text or field.name or ''}</button>
% elif tag == 'checkbox':
- <input type="checkbox" name="${field.html_name | n}" ${make_attr_str(attrs) | n} ${value and "CHECKED" or ""}/>${button_text or field.name or ''}</input>
+ % if help:
+ <input type="checkbox" name="${field.html_name | n}" ${make_attr_str(attrs) | n} ${value and "CHECKED" or ""}/ /> <span rel="popover" data-content="${help}" >${button_text or field.name or ''}</span>
+ % else:
+ <input type="checkbox" name="${field.html_name | n}" ${make_attr_str(attrs) | n} ${value and "CHECKED" or ""}/> <span>${button_text or field.name or ''}</span>
+ % endif
% else:
<${tag} name="${field.html_name | n}" value="${extract_field_data(field) or ''}" ${make_attr_str(attrs) | n} />
% endif
+
% endif
- % if help:
- <p class="jframe-inline" data-filters="HelpTip" ${make_attr_str(help_attrs) | n}>${help}</p>
- % endif
- </dd>
% if len(field.errors):
- <dd class="beeswax_error jframe-error">
${unicode(field.errors) | n}
- </dd>
% endif
+
% endif
</%def>
@@ -121,14 +179,13 @@
${pageref(page.num_pages())}
</%def>
<%def name="pagination(page)">
- <div class="toolbar bw-designs_toolbar bw-navigation">
- <p class="bw-showing_msg">Showing ${page.start_index()} to ${page.end_index()} of ${page.total_count()} items</p>
- <div class="bw-nav_links">
- <a title="Beginning of List" ${toppage(page)} class="bw-firstBlock">Beginning of List</a>
- <a title="Previous Page" ${prevpage(page)} class="bw-prevBlock">Previous Page</a>
- <p>page ${page.number} of ${page.num_pages()}</p>
- <a title="Next page" ${nextpage(page)} class="bw-nextBlock">Next Page</a>
- <a title="End of List" ${bottompage(page)} class="bw-lastBlock">End of List</a>
- </div>
- </div>
+ <p>Showing ${page.start_index()} to ${page.end_index()} of ${page.total_count()} items, page ${page.number} of ${page.num_pages()}</p>
+ <div class="pagination">
+ <ul>
+ <li class="prev"><a title="Beginning of List" ${toppage(page)} class="bw-firstBlock">&larr; Beginning of List</a></li>
+ <li><a title="Previous Page" ${prevpage(page)} class="bw-prevBlock">Previous Page</a></li>
+ <li><a title="Next page" ${nextpage(page)} class="bw-nextBlock">Next Page</a></li>
+ <li class="next"><a title="End of List" ${bottompage(page)} class="bw-lastBlock">End of List &rarr;</a></li>
+ </ul>
+ </div>
</%def>
View
173 apps/beeswax/src/beeswax/templates/choose_delimiter.mako
@@ -13,83 +13,104 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-<%namespace name="wrappers" file="header_footer.mako" />
+<%!
+from desktop.views import commonheader, commonfooter
+%>
+<%namespace name="layout" file="layout.mako" />
<%namespace name="comps" file="beeswax_components.mako" />
<%namespace name="util" file="util.mako" />
-${wrappers.head('Choose a Delimiter')}
-<div class="toolbar">
- <ul data-filters="Breadcrumb" class="clearfix">
- ## TODO(marcus) These links should be part of the form, and do POST
- <li><a href="${ url('beeswax.create_table.import_wizard') }">Choose File</a></li>
- <li class="tabSelected"><a href="${ url('beeswax.create_table.import_wizard') }">Choose Delimiter</a></li>
- <li><a href="${ url('beeswax.create_table.import_wizard') }">Define Columns</a></li>
- </ul>
-</div>
-<div class="view" id="choose-delimiter">
- <div class="bw-choose-delimiter">
- <div class="hue-bc-section">
- <form action ="${action}" method="POST">
- <div class="jframe-hidden">
- ${util.render_form(file_form)}
- ${comps.field(delim_form['file_type'])}
- </div>
- <a name="step2"></a>
- <dt>Step 2: Choose A Delimiter</dt>
- <dd>
- <dl class="clearfix">
- <dt>
- % if initial:
- <div class="bw-confirm_delim" style="display: none">
- <p class="delimiter_confirmation">Beeswax has determined that this file is delimited by ${delim_readable}. Is this correct?</p>
- <label>
- Yes
- ## TODO(marcus) The YES button does nothing
- <input type="submit" name="submit_delim" value="Select this Delimiter" class="jframe-hidden"/>
- </label>
- <label>
- No
- ## TODO(marcus) The NO + preview jump out of jframe
- <input type="button" name="No" class="jframe-hidden"/>
- </label>
- </div>
- % endif
- <div class="bw-select_delim" class="jframe-hidden">
- <dl>
- ${comps.field(delim_form["delimiter"], render_default=True, help=r'Enter the column delimiter. Must be a single character. Use syntax like "\001" or "\t" for special characters.', dd_attrs=dict(data_filters='SelectWithOther'))}
- </dl>
- <input class="jframe-hidden" type="submit" value="Preview" name="submit_preview"/>
- <input class="jframe-hidden" type="submit" value="Select this Delimiter" name="submit_delim"/>
- </div>
- <div class="delimiter_preview_holder">
- <table class="delimiter_preview">
- <thead>
- <tr>
- % for i in range(n_cols):
- <th>col_${i+1}</th>
- % endfor
- </tr>
- </thead>
- <tbody>
- % for row in fields_list:
- <tr>
- % for val in row:
- <td>${val}</td>
- % endfor
- </tr>
- % endfor
- </tbody>
- </table>
- </div>
- </dt>
- </dl>
- <a class="jframe-submit_form jframe-visible hue-multipart-next" data-extra-data="{'submit_delim': 'Step 3: Define Your Columns'}">
- Step 3: Define Your Columns&raquo;
- </a>
- <input type="submit" name="submit_delim" value="Step 3: Define Your Columns" class="jframe-hidden"/>
- </dd>
- </dl>
- </form>
- </div>
+${commonheader("Beeswax: Create table from file", "beeswax", "100px")}
+${layout.menubar(section='tables')}
+<div class="container-fluid">
+<div class="sidebar">
+ <div class="well">
+ <h6>Actions</h6>
+ <ul>
+ <li><a href="${ url('beeswax.create_table.import_wizard')}">Create a new table from file</a></li>
+ <li><a href="${ url('beeswax.create_table.create_table')}">Create a new table manually</a></li>
+ </ul>
</div>
</div>
-${wrappers.foot()}
+
+
+<div class="content">
+ <h1>Create a new table from file</h1>
+ <ul class="pills">
+ <li><a href="${ url('beeswax.create_table.import_wizard') }">Step 1: Choose File</a></li>
+ <li class="active"><a href="#">Step 2: Choose Delimiter</a></li>
+ <li><a href="#">Step 3: Define Columns</a></li>
+ </ul>
+ <br/>
+ <form id="delimiterForm" action="${action}" method="POST">
+ <div class="hidden">
+ ${util.render_form(file_form)}
+ ${comps.field(delim_form['file_type'])}
+ </div>
+ <fieldset>
+ <legend>Choose A Delimiter</legend>
+ <div class="clearfix">
+ ${comps.label(delim_form["delimiter"])}
+ <div class="input">
+ ${comps.field(delim_form["delimiter"], render_default=True, attrs=dict(
+ klass=""
+ ))}
+ % if initial:
+ <span class="help-inline">
+ Beeswax has determined that this file is delimited by ${delim_readable}.
+ </span>
+ % endif
+ <span class="help-block">
+ Enter the column delimiter. Must be a single character. Use syntax like "\001" or "\t" for special characters.
+ </span>
+ </div>
+ </div>
+ </fieldset>
+ <div class="actions">
+ <input id="submit_preview" class="btn" type="submit" value="Preview" name="submit_preview"/>
+ <input class="btn primary" type="submit" name="submit_delim" value="Select this delimiter" />
+ </div>
+ </form>
+ <br/>
+ <ul class="tabs">
+ <li class="active"><a href="#tablePreview">Table preview</a></li>
+ </ul>
+ <div class="tab-content">
+ <div class="active tab-pane" id="tablePreview">
+ <table>
+ <thead>
+ <tr>
+ % for i in range(n_cols):
+ <th>col_${i+1}</th>
+ % endfor
+ </tr>
+ </thead>
+ <tbody>
+ % for row in fields_list:
+ <tr>
+ % for val in row:
+ <td>${val}</td>
+ % endfor
+ </tr>
+ % endfor
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+</div>
+<script type="text/javascript" charset="utf-8">
+ $(document).ready(function(){
+ $("#id_delimiter_1").css("margin-left","4px").attr("placeholder","Please write here your delimiter").hide();
+ $("#id_delimiter_0").change(function(){
+ if ($(this).val() == "__other__"){
+ $("#id_delimiter_1").show();
+ }
+ else {
+ $("#id_delimiter_1").hide();
+ $("#submit_preview").click();
+ }
+ });
+ });
+</script>
+
+${commonfooter()}
View
181 apps/beeswax/src/beeswax/templates/choose_file.mako
@@ -13,64 +13,131 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-<%namespace name="wrappers" file="header_footer.mako" />
+<%!
+from desktop.views import commonheader, commonfooter
+%>
+<%namespace name="layout" file="layout.mako" />
<%namespace name="comps" file="beeswax_components.mako" />
-${wrappers.head('Choose a File')}
-<div class="toolbar">
- <ul class="clearfix" data-filters="Breadcrumb">
- <li class="tabSelected"><a href="${ url('beeswax.create_table.import_wizard') }">Choose File</a></li>
- <li><a>Choose Delimiter</a></li>
- <li><a>Define Columns</a></li>
- </ul>
+${commonheader("Beeswax: Create table from file", "beeswax", "100px")}
+${layout.menubar(section='tables')}
+
+<div class="container-fluid">
+<div class="sidebar">
+ <div class="well">
+ <h6>Actions</h6>
+ <ul>
+ <li><a href="${ url('beeswax.create_table.import_wizard')}">Create a new table from file</a></li>
+ <li><a href="${ url('beeswax.create_table.create_table')}">Create a new table manually</a></li>
+ </ul>
+ </div>
</div>
-<div class="view" id="choose-file">
- <div class="bw-choose-file">
- <div class="hue-bc-section">
- <a name="step1"></a>
- <form action="${action}" method="POST">
- <dt>Step 1: Name Your Table and Choose A File</dt>
- <dd>
- <p>Enter the name of your new table and a file (compressed files are okay) to base this new table definition on.</p>
- <dl class="clearfix">
- ${comps.field(file_form["name"], attrs=dict(
- klass='required bw-validate-name',
- data_filters="OverText",
- alt='table_name',
- ),
- help="Name of the new table. Table names must be globally unique. Table names tend to correspond as well to the directory where the data will be stored.",
- help_attrs=dict(
- data_help_direction='1'
- )
- )}
- ${comps.field(file_form["comment"], attrs=dict(
- klass='bw-table-comment',
- data_filters="OverText",
- alt='Optional'
- ),
- help="Use a table comment to describe your table. For example, you might mention the data's provenance, and any caveats users of this table should expect.")}
- ${comps.field(file_form["path"], attrs=dict(
- klass='required bw-validate-file',
- data_filters="OverText",
- alt="/user/user_name/data_dir",
- ),
- help="The HDFS path to the file that you would like to base this new table definition on. It can be compressed (gzip) or not.")}
- <a class="hue-choose_file" data-filters="ArtButton" data-icon-styles="{'width': 16, 'height' : 16, 'top' : 3, 'left' : 6 }" data-chooseFor="path">Choose File</a>
- <div class="bw-import_data">
- ${comps.field(file_form["do_import"],
- render_default=True,
- help="Check this box if you want to import the data in this file after creating the table definition. Leave it unchecked if you just want to define an empty table."
- )}
- </div>
- ## TODO(marcus): Button style?
- <a class="hue-multipart-next jframe-submit_form jframe-visible" style="display:none" data-extra-data="{'submit_file' : 'Step 2: Choose Your Delimiter'}">
- Step 2: Choose Your Delimiter&raquo;
- </a>
- <input type="submit" name="submit_file" value="Step 2: Choose Your Delimiter" class="jframe-hidden jframe-submit_form hue-multipart-next jframe-visible"/>
- </dl>
- </form>
- </dd>
- </div>
- </div>
+
+<div class="content">
+ <h1>Create a new table from file</h1>
+ <ul class="pills">
+ <li class="active"><a href="${ url('beeswax.create_table.import_wizard') }">Step 1: Choose File</a></li>
+ <li><a href="#">Step 2: Choose Delimiter</a></li>
+ <li><a href="#">Step 3: Define Columns</a></li>
+ </ul>
+ <br/>
+ <form action="${action}" method="POST">
+ <fieldset>
+ <legend>Name Your Table and Choose A File</legend>
+ <div class="clearfix">
+ ${comps.label(file_form["name"])}
+ <div class="input">
+ ${comps.field(file_form["name"], attrs=dict(
+ placeholder="table_name",
+ klass=""
+ ))}
+ <span class="help-block">
+ Name of the new table. Table names must be globally unique. Table names tend to correspond as well to the directory where the data will be stored.
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(file_form["comment"])}
+ <div class="input">
+ ${comps.field(file_form["comment"], attrs=dict(
+ placeholder="Optional",
+ klass=""
+ ))}
+ <span class="help-block">
+ Use a table comment to describe your table. For example, you might mention the data's provenance, and any caveats users of this table should expect.
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(file_form["path"])}
+ <div class="input">
+ ${comps.field(file_form["path"], attrs=dict(
+ placeholder="/user/user_name/data_dir",
+ klass=""
+ ))}
+ <span class="help-inline"><a id="pathChooser" href="#" data-filechooser-destination="path">Choose File</a></span>
+ <span class="help-block">
+ The HDFS path to the file that you would like to base this new table definition on. It can be compressed (gzip) or not.
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(file_form["do_import"])}
+ <div class="input">
+ ${comps.field(file_form["do_import"], render_default=True, attrs=dict(
+ klass=""
+ ))}
+ <span class="help-block">
+ Check this box if you want to import the data in this file after creating the table definition. Leave it unchecked if you just want to define an empty table.
+ </span>
+ </div>
+ </div>
+ </fieldset>
+ <div class="actions">
+ <input type="submit" class="btn primary" name="submit_file" value="Choose a delimiter" />
+ </div>
+ </form>
+
+</div>
+<div id="chooseFile" class="modal hide fade">
+ <div class="modal-header">
+ <a href="#" class="close">&times;</a>
+ <h3>Choose a file</h3>
+ </div>
+ <div class="modal-body">
+ <div id="filechooser">
+ </div>
+ </div>
+ <div class="modal-footer">
+ </div>
+</div>
</div>
-${wrappers.foot()}
+<style>
+ #filechooser {
+ min-height:100px;
+ overflow-y:scroll;
+ }
+</style>
+
+
+<script type="text/javascript" charset="utf-8">
+ $(document).ready(function(){
+ $("#pathChooser").click(function(){
+ var _destination = $(this).attr("data-filechooser-destination");
+ $("#filechooser").jHueFileChooser({
+ onFileChoose: function(filePath){
+ $("input[name='"+_destination+"']").val(filePath);
+ $("#chooseFile").modal("hide");
+ }
+ });
+ $("#chooseFile").modal("show");
+ });
+
+ $("#chooseFile").modal({
+ keyboard: true,
+ backdrop: true
+ })
+ });
+</script>
+
+${commonfooter()}
View
30 apps/beeswax/src/beeswax/templates/configuration.mako
@@ -13,18 +13,23 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-<%namespace name="wrappers" file="header_footer.mako" />
+<%!
+from desktop.views import commonheader, commonfooter
+%>
+<%namespace name="layout" file="layout.mako" />
<%namespace name="util" file="util.mako" />
-${wrappers.head('Hive Configuration Variables', section='hive configuration')}
-<h1 class="jframe-hidden">Hive Configuration Variables</h1>
+${commonheader("Hive Configuration Variables", "beeswax", "100px")}
+${layout.menubar(section='hive configuration')}
+<div class="container-fluid">
+<h1>Hive Configuration Variables</h1>
<div class="toolbar">
<div class="bw-input-filter">
- <input type="text" class="jframe-hidden" data-filters="OverText, ArtInput, FilterInput" data-art-input-type="search"
+ <!--input type="text" class="jframe-hidden" data-filters="OverText, ArtInput, FilterInput" data-art-input-type="search"
title="Filter by Name"
- data-filter-elements="tbody tr" value=""/>
+ data-filter-elements="tbody tr" value=""/-->
</div>
</div>
-<table class="sortable" data-filters="HtmlTable" cellpadding="0" cellspacing="0">
+<table class="datatables">
<thead>
<tr>
<th>Key</th>
@@ -40,4 +45,15 @@ ${wrappers.head('Hive Configuration Variables', section='hive configuration')}
% endfor
</tbody>
</table>
-${wrappers.foot()}
+</div>
+<script type="text/javascript" charset="utf-8">
+ $(document).ready(function(){
+ $(".datatables").dataTable({
+ "bPaginate": false,
+ "bLengthChange": false,
+ "bFilter": false,
+ "bInfo": false,
+ });
+ });
+</script>
+${commonfooter()}
View
21 apps/beeswax/src/beeswax/templates/confirm.html
@@ -15,13 +15,20 @@
See the License for the specific language governing permissions and
limitations under the License.
{% endcomment %}
-{% block title %}{{ title }}{% endblock %}
{% block content %}
-<div class="prompt_popup">
- <h1 class="jframe-hidden">Are you sure?</h1>
- <form action="{{ url }}" method="POST">
- {{title}}
- <input type="submit" value="Yes" class="jframe-hidden">
- </form>
+<form action="{{ url }}" method="POST">>
+<div class="modal-header">
+ <a href="#" class="close">&times;</a>
+ <h3>Confirm action</h3>
</div>
+<div class="modal-body">
+ <div class="alert-message block-message warning">
+ {{title}}
+ </div>
+</div>
+<div class="modal-footer">
+ <input type="submit" class="btn primary" value="Yes"/>
+ <a href="#" class="btn secondary hideModal">No</a>
+</div>
+</form>
{% endblock %}
View
11 apps/beeswax/src/beeswax/templates/create_table_index.mako
@@ -13,8 +13,12 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-<%namespace name="wrappers" file="header_footer.mako" />
-${wrappers.head("Beeswax: Create Table")}
+<%!
+from desktop.views import commonheader, commonfooter
+%>
+<%namespace name="layout" file="layout.mako" />
+${commonheader("Beeswax: Create Table", "beeswax", "100px")}
+<div class="container-fluid">
<div class="toolbar">
</div>
@@ -27,4 +31,5 @@ ${wrappers.head("Beeswax: Create Table")}
</ul>
</div>
</div>
-${wrappers.foot()}
+</div>
+${commonfooter()}
View
808 apps/beeswax/src/beeswax/templates/create_table_manually.mako
@@ -13,295 +13,539 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
+<%!
+from desktop.views import commonheader, commonfooter
+%>
<%namespace name="comps" file="beeswax_components.mako" />
-<%namespace name="wrappers" file="header_footer.mako" />
-${wrappers.head('Create a Table', toolbar=has_tables, section='new table')}
-<div class="toolbar">
- <ul class="clearfix" data-filters="Breadcrumb, BreadcrumbForm" data-bc-sections=".hue-bc-section" data-bc-form="form">
- <li><a href="#step1">Name</a></li>
- <li><a href="#step2">Record Format</a></li>
- <li><a href="#step3">Serialization</a></li>
- <li><a href="#step4">File Format</a></li>
- <li><a href="#step5">Location</a></li>
- <li><a href="#step6">Columns</a></li>
- </ul>
+<%namespace name="layout" file="layout.mako" />
+${commonheader("Beeswax: Create table manually", "beeswax", "100px")}
+${layout.menubar(section='tables')}
+<div class="container-fluid">
+<div class="sidebar">
+ <div class="well">
+ <h6>Actions</h6>
+ <ul>
+ <li><a href="${ url('beeswax.create_table.import_wizard')}">Create a new table from file</a></li>
+ <li><a href="${ url('beeswax.create_table.create_table')}">Create a new table manually</a></li>
+ </ul>
+ </div>
</div>
-<div id="table-setup" class="view">
- <form action="#" method="POST" class="jframe_padded" data-filters="FormValidator">
- <dl class="bw-table-setup">
-
- <div class="hue-bc-section">
- <a name="step1"></a>
- <dt>Step 1: Create Your Table</dt>
- <dd>
- <p>Let's start with a name and description for where we'll store your data.</p>
- <dl class="clearfix">
- ${comps.field(table_form["name"], attrs=dict(
- klass='required bw-validate-name',
- data_filters="OverText",
- alt='table_name',
- ),
- help="Name of the new table. Table names must be globally unique. Table names tend to correspond as well to the directory where the data will be stored.",
- help_attrs=dict(
- data_help_direction='1'
- )
- )}
- ${comps.field(table_form["comment"], attrs=dict(
- klass='bw-table-comment',
- data_filters="OverText",
- alt='Optional'
- ),
- help="Use a table comment to describe your table. For example, you might mention the data's provenance, and any caveats users of this table should expect.")}
- </dl>
- <a href="#step2" class="hue-multipart-next">Step 2: Choose Your Record Format &raquo;</a>
- </dd>
- </div>
- <div class="hue-bc-section">
- <a name="step2"></a>
- <dt>Step 2: Choose Your Record Format</dt>
- <dd>
- <p>Individual records are broken up into columns
- either with delimiters (e.g., CSV or TSV) or using
- a specific serialization / deserialization (SerDe) implementation.
- (One common specialized SerDe is for parsing out columns with a regular
- expression.)
- </p>
- <dl class="bw-format clearfix">
- <%
- selected = table_form["row_format"].data or table_form["row_format"].field.initial
- %>
- <dt class="bw-format-delimited relays" data-filters="DataGroupToggle" data-group-toggle="{'group': '.bw-config-data li', 'show':'.bw-delim-options'}">
- <label>
- Delimited
- <input type="radio" name="table-row_format" value="Delimited" class="validate-one-required:'.bw-format'" title="Please choose one of these record formats." data-error-container=''
- % if selected == "Delimited":
- checked
- % endif
- >
- </label>
- <div class="jframe-errors"></div>
- </dt>
- <dd>Data files use delimiters, like commas (CSV) or tabs.</dd>
- <dt class="bw-format-SerDe relays" data-filters="DataGroupToggle" data-group-toggle="{'group': '.bw-config-data li', 'show':'.bw-serde-options'}">
- <label>
- SerDe
- <input type="radio" name="table-row_format" value="SerDe"
- % if selected == "SerDe":
- checked
- % endif
- >
- </label>
- </dt>
- <dd>Enter a specialized serialization implementation.</dd>
- </dl>
- <a href="#step3" class="hue-multipart-next">Step 3: Configure Record Serialization &raquo;</a>
- </dd>
- </div>
- <div class="hue-bc-section">
- <a name="step3"></a>
- <dt>Step 3: Configure Record Serialization</dt>
- <dd>
- <ul class="bw-config-data">
- <li class="bw-delim-options">
- <p class="jframe-hidden">If your records are delimited, please configure these fields:</p>
- Hive only supports single-character delimiters.
- <dl>
- ${comps.field(table_form["field_terminator"], render_default=True, help=r'Enter the column delimiter. Must be a single character. Use syntax like "\001" or "\t" for special characters.', dd_attrs=dict(data_filters="SelectWithOther"))}
- ${comps.field(table_form["collection_terminator"], render_default=True, help="Use for array types.", dd_attrs=dict(data_filters="SelectWithOther"))}
- ${comps.field(table_form["map_key_terminator"], render_default=True, help="Use for map types.", dd_attrs=dict(data_filters="SelectWithOther"))}
- </dl>
- </li>
- <li class="bw-serde-options">
- <p class="jframe-hidden">If you're using SerDe data, please configure these fields:</p>
- <dl>
- ${comps.field(table_form["serde_name"],
- help="Enter the Java Classname of your SerDe. <em>e.g.</em>, org.apache.hadoop.hive.contrib.serde2.RegexSerDe",
- attrs=dict(
- klass='required',
- data_filters="OverText",
- alt='com.acme.hive.SerDe',
- )
- )}
- <%!
- help=r'Properties to pass to the (de)serialization mechanism. <em>e.g.,</em>, "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"'
- %>
+<div class="content">
+ <h1>Create a new table manually</h1>
+ <ul class="pills">
+ <li class="active"><a href="#step1" class="step">Step 1: Name</a></li>
+ <li><a href="#step2" class="step">Step 2: Record Format</a></li>
+ <li><a href="#step3" class="step">Step 3: Serialization</a></li>
+ <li><a href="#step4" class="step">Step 4: File Format</a></li>
+ <li><a href="#step5" class="step">Step 5: Location</a></li>
+ <li><a href="#step6" class="step">Step 6: Columns</a></li>
+ </ul>
+ <br/>
+ <form action="#" method="POST" id="mainForm">
+ <div id="step1" class="stepDetails">
+ <fieldset>
+ <legend>Create your table</legend>
+ <div class="clearfix">
+ <div class="input">
+ <span>Let's start with a name and description for where we'll store your data.</span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(table_form["name"])}
+ <div class="input">
+ ${comps.field(table_form["name"], attrs=dict(
+ placeholder='table_name',
+ )
+ )}
+ <span class="help-block">
+ Name of the new table. Table names must be globally unique. Table names tend to correspond as well to the directory where the data will be stored.
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(table_form["comment"])}
+ <div class="input">
+ ${comps.field(table_form["comment"], attrs=dict(
+ placeholder='Optional',
+ )
+ )}
+ <span class="help-block">
+ Use a table comment to describe your table. For example, you might mention the data's provenance, and any caveats users of this table should expect.
+ </span>
+ </div>
+ </div>
+ </fieldset>
+ </div>
+ <div id="step2" class="stepDetails hidden">
+ <fieldset>
+ <legend>Choose Your Record Format</legend>
+ <div class="clearfix">
+ <div class="input">
+ <span>Individual records are broken up into columns
+ either with delimiters (e.g., CSV or TSV) or using
+ a specific serialization / deserialization (SerDe) implementation.
+ (One common specialized SerDe is for parsing out columns with a regular
+ expression.)</span>
+ </div>
+ </div>
+ <%
+ selected = table_form["row_format"].data or table_form["row_format"].field.initial
+ %>
+ <div class="clearfix">
+ <label id="formatRadio">Record format</label>
+ <div class="input">
+ <ul class="inputs-list">
+ <li>
+ <label>
+ <input type="radio" name="table-row_format" value="Delimited"
+ % if selected == "Delimited":
+ checked
+ % endif
+ >
+ <span>Delimited</span>
+ </label>
+ <span class="help-block">
+ Data files use delimiters, like commas (CSV) or tabs.
+ </span>
+ </li>
+ <li>
+ <label>
+ <input type="radio" name="table-row_format" value="SerDe"
+ % if selected == "SerDe":
+ checked
+ % endif
+ >
+ <span>SerDe</span>
+ </label>
+ <span class="help-block">
+ Enter a specialized serialization implementation.
+ </span>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </fieldset>
+ </div>
+ <div id="step3" class="stepDetails hidden">
+ <fieldset>
+ <legend>Configure Record Serialization</legend>
+ <div id="step3Delimited" class="stepDetailsInner">
+ <div class="clearfix">
+ <div class="input">
+ <span>Hive only supports single-character delimiters. </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(table_form["field_terminator"])}
+ <div class="input">
+ ${comps.field(table_form["field_terminator"], render_default=True)}
+ <span class="help-block">
+ Enter the column delimiter. Must be a single character. Use syntax like "\001" or "\t" for special characters.
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(table_form["collection_terminator"])}
+ <div class="input">
+ ${comps.field(table_form["collection_terminator"], render_default=True)}
+ <span class="help-block">
+ Use for array types.
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(table_form["map_key_terminator"])}
+ <div class="input">
+ ${comps.field(table_form["map_key_terminator"], render_default=True)}
+ <span class="help-block">
+ Use for map types.
+ </span>
+ </div>
+ </div>
+ </div>
+ <div id="step3SerDe" class="hidden stepDetailsInner">
+ <div class="clearfix">
+ ${comps.label(table_form["serde_name"])}
+ <div class="input">
+ ${comps.field(table_form["serde_name"], attrs=dict(
+ placeholder='com.acme.hive.SerDe',
+ )
+ )}
+ <span class="help-block">
+ Enter the Java Classname of your SerDe. <em>e.g.</em>, org.apache.hadoop.hive.contrib.serde2.RegexSerDe
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(table_form["serde_properties"])}
+ <div class="input">
+ ${comps.field(table_form["serde_properties"], attrs=dict(
+ placeholder='"prop" = "value", "prop2" = "value2"',
+ )
+ )}
+ <span class="help-block">
+ Properties to pass to the (de)serialization mechanism. <em>e.g.,</em>, "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
+ </span>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ </div>
+ <div id="step4" class="stepDetails hidden">
+ <fieldset>
+ <legend>Choose a File Format</legend>
+ <div class="clearfix">
+ <div class="input">
+ Use <strong>TextFile</strong> for newline-delimited text files.
+ Use <strong>SequenceFile</strong> for Hadoop's binary serialization format.
+ Use <strong>InputFormat</strong> to choose a custom implementation.<br/>
+ </div>
+ </div>
+
+ <div class="clearfix">
+ <label id="fileFormatRadio">File format</label>
+ <div class="input">
+ ${comps.field(table_form["file_format"],
+ render_default=True,
+ klass="bw-file_formats",
+ notitle=True
+ )}
+ </div>
+ </div>
+ <div id="inputFormatDetails" class="hidden">
+ <div class="clearfix">
+ ${comps.label(table_form["input_format_class"])}
+ <div class="input">
+ ${comps.field(table_form["input_format_class"], attrs=dict(
+ placeholder='com.acme.data.MyInputFormat',
+ )
+ )}
+ <span class="help-block">
+ Java Class used to read data
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ ${comps.label(table_form["output_format_class"])}
+ <div class="input">
+ ${comps.field(table_form["output_format_class"], attrs=dict(
+ placeholder='com.acme.data.MyOutputFormat',
+ )
+ )}
+ <span class="help-block">
+ Java Class used to write data
+ </span>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ </div>
+ <div id="step5" class="stepDetails hidden">
+ <fieldset>
+ <legend>Choose Where Your Table's Data is Stored</legend>
+
+ <div class="clearfix">
+ <label>Location</label>
+ <div class="input">
+ <ul class="inputs-list">
+ <li>
+ <label>
+ ${comps.field(table_form["use_default_location"],
+ render_default=True
+ )}
+ <span>Use default location</span>
+ </label>
+ <span class="help-block">
+ Store your table in the default location (controlled by Hive, and typically <em>/user/hive/warehouse/table_name</em>).
+ </span>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ <div id="location" class="hidden">
+ <div class="clearfix">
+ ${comps.label(table_form["external_location"])}
+ <div class="input">
+ ${comps.field(table_form["external_location"], attrs=dict(
+ placeholder='/user/user_name/data_dir',
+ )
+ )}
+ <span class="help-inline"><a id="pathChooser" href="#" data-filechooser-destination="table-external_location">Choose File</a></span>
+ <span class="help-block">
+ Enter the path (on HDFS) to your table's data location
+ </span>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ </div>
+ <div id="step6" class="stepDetails hidden">
+ <fieldset>
+ <legend>Configure Table Columns</legend>
+ % for form in columns_form.forms:
+ ${render_column(form)}
+ %endfor
+ <div class="hidden">
+ ${unicode(columns_form.management_form) | n}
+ </div>
+ <div class="clearfix">
+ <div class="input">
+ <button class="btn" value="True" name="columns-add" type="submit">Add a column</button>
+ </div>
+ </div>
+ </fieldset>
+ <fieldset>
+ <legend>Configure Partitions</legend>
+ <div class="clearfix">
+ <div class="input">
+ If your data is naturally partitioned (by, say, date),
+ partitions are a way to tell Hive that data
+ for a specific partition value are stored together.
+ Hive establishes a mapping between directories on disk
+ (<em>e.g.,</em> <code>/user/hive/warehouse/logs/dt=20100101/</code>)
+ and the data for that day. Partitions are virtual
+ columns; they are not represented in the data themselves,
+ but are determined by the data location. Hive implements
+ query optimizations such that queries that are specific
+ to a single partition need not read the data in other partitions.
+ </div>
+ </div>
+ % for form in partitions_form.forms:
+ ${render_column(form, True)}
+ % endfor
+ <div class="hidden">
+ ${unicode(partitions_form.management_form) | n}
+ </div>
+ <div class="clearfix">
+ <div class="input">
+ <button class="btn" value="True" name="partitions-add" type="submit">Add a partition</button>
+ </div>
+ </div>
+
+ </fieldset>
+ </div>
+ <div class="actions">
+ <input id="backBtn" type="button" class="btn hidden" value="Back" />
+ <input id="nextBtn" type="button" class="btn primary" value="Next" />
+ <input id="submit" type="submit" class="btn primary hidden" value="Create table" />
+ </div>
+ </form>
+</div>
- ${comps.field(table_form["serde_properties"],
- help=help,
- attrs=dict(
- data_filters="OverText",
- alt=r'"prop" = "value", "prop2" = "value2"'
- )
- )}
- </dl>
- </li>
- </ul>
- <a href="#step4" class="hue-multipart-next">Step 4: Choose a File Format &raquo;</a>
- </dd>
- </div>
+ <%def name="render_column(form, is_partition_form=False)">
+ <div class="cnt">
+ <div class="clearfix">
+ <label>Column name</label>
+ <div class="input">
+ <input name="${form["column_name"].html_name | n}" value="${form["column_name"].data or ''}" placeholder="Column Name"/>
+ <span class="help-inline">
+ Column name must be single words that start with a letter or a digit.
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ <label>Column type</label>
+ <div class="input columnType">
+ ${comps.field(form["column_type"],
+ render_default=True
+ )}
+ <span class="help-inline">
+ Type for this column. Certain advanced types (namely, structs) are not exposed in this interface.
+ </span>
+ </div>
+ </div>
+ % if is_partition_form == False:
+ <div class="arraySpec hidden">
+ <div class="clearfix">
+ <label>Array value type</label>
+ <div class="input">
+ ${comps.field(form["array_type"], render_default=True)}
+ <span class="help-inline">
+ Type of the array values.
+ </span>
+ </div>
+ </div>
+ </div>
+ <div class="mapSpec hidden">
+ <div class="clearfix">
+ <label>Map Key type</label>
+ <div class="input">
+ ${comps.field(form["map_key_type"], render_default=True)}
+ <span class="help-inline">
+ Type of the map keys.
+ </span>
+ </div>
+ </div>
+ <div class="clearfix">
+ <label>Map Value type</label>
+ <div class="input">
+ ${comps.field(form["map_value_type"], render_default=True)}
+ <span class="help-inline">
+ Type of the map values.
+ </span>
+ </div>
+ </div>
+ </div>
+ % endif
+ <div class="clearfix">
+ <div class="input">
+ ${comps.field(form['_deleted'], tag="button", button_text="Remove", notitle=True, attrs=dict(
+ type="submit",
+ title="Delete this column",
+ klass="btn small danger"
+ ), value=True)}
+
+ </div>
+ </div>
+ ${unicode(form["_exists"]) | n}
- <div class="hue-bc-section">
- <a name="step4"></a>
- <dt>Step 4: Choose a File Format</dt>
- <dd>
- <ul>
- <li>Use TextFile for newline-delimited text files.</li>
- <li>Use SequenceFile for Hadoop's binary serialization format.</li>
- <li>Use InputFormat to choose a custom implementation.</li>
- </ul>
- <dl>
- ${comps.field(table_form["file_format"],
- render_default=True,
- klass="bw-file_formats",
- notitle=True
- )}
- <div class="jframe-hidden bw-io_formats">
- ${comps.field(table_form["input_format_class"],
- help="Java Class to read data",
- attrs=dict(
- data_filters="OverText",
- alt='com.acme.data.MyInputFormat'
- )
- )}
- ${comps.field(table_form["output_format_class"],
- help="Java Class used to write data",
- attrs=dict(
- data_filters="OverText",
- alt='com.acme.data.MyOutputFormat'
- )
- )}
- </div>
- </dl>
- <a href="#step5" class="hue-multipart-next">Step 5: Choose Where To Save Your Table &raquo;</a>
- </dd>
- </div>
+ </div>
+
+ </%def>
+
+
- <div class="hue-bc-section">
- <a name="step5"></a>
- <dt>Step 5: Choose Where Your Table's Data is Stored</dt>
- <dd class="bw-file_location">
- <dl>
- <div class="bw-default_location">
- ${comps.field(table_form["use_default_location"],
- render_default=True,
- help="Store your table in the default location (controlled by Hive, and typically <code>/user/hive/warehouse/table_name</code>)."
- )}
- </div>
- <div class="bw-external_loc jframe-hidden">
- ${comps.field(table_form["external_location"],
- help="Enter the path (on HDFS) to your table's data location",
- attrs=dict(
- klass='required',
- data_filters="OverText",
- alt='/user/user_name/data_dir'
- )
- )}<a class="hue-choose_file" data-filters="ArtButton" data-icon-styles="{'width': 16, 'height': 16, 'top': 3, 'left': 6 }" data-chooseFor="table-external_location">Choose File</a>
- </div>
- </dl>
- <a href="#step6" class="hue-multipart-next">Final Step: Configure Table Columns &raquo;</a>
- </dd>
- </div>
- <div class="hue-bc-section">
- <a name="step6"></a>
- <dt>Final Step: Configure Table Columns</dt>
- <dd>
- <dl class="bw-columns">
- <%def name="render_column(form, is_partition_form=False)">
- <div class="bw-column">
- <dt class="bw-column_header bw-inactive">
- <input name="${form["column_name"].html_name | n}" value="${form["column_name"].data or ''}" class="required bw-column_name" alt="Column Name" data-filters="OverText"/>
- <p class="jframe-inline" data-filters="HelpTip" data-help-direction="1">
- Column name must be single words that start
- with a letter or a digit.
- </p>
- <div class="bw-remove_column">
- ${unicode(form["_deleted"]) | n}
- </div>
- </dt>
- <dd class="bw-column">
- <dl>
- <div class="bw-col_type jframe-inline">
- ${comps.field(form["column_type"],
- render_default=True,
- help="Type for this column. Certain advanced types (namely, structs) are not exposed in this interface.",
- help_attrs=dict(
- data_help_direction='12'
- )
- )}
- </div>
- % if is_partition_form == False:
- <div class="bw-array_type jframe-inline">
- ${comps.field(
- form["array_type"],
- render_default=True,
- help="Type of the array values.",
- )}
- </div>
- <div class="bw-map_data">
- <div class="bw-map_key_type jframe-inline">
- ${comps.field(form["map_key_type"], render_default=True, help="Type of the map keys.")}
- </div>
- <div class="bw-map_value_type jframe-inline">
- ${comps.field(form["map_value_type"], render_default=True, help="Type of the map values.")}
- </div>
- </div>
- % endif
- ${unicode(form["_exists"]) | n}
-
- </dl>
- </dd>
- </div>
- </%def>
- <div class="bw-column-forms">
- <p>Configure the columns of your table.</p>
- % for form in columns_form.forms:
- ${render_column(form)}
- %endfor
- </div>
- <div class="bw-add_column">
- ${unicode(columns_form.management_form) | n}
- </div>
- <h2>Partitions</h2>
- ## See http://wiki.apache.org/hadoop/Hive/Tutorial
- <p>
- If your data is naturally partitioned (by, say, date),
- partitions are a way to tell Hive that data
- for a specific partition value are stored together.
- Hive establishes a mapping between directories on disk
- (<em>e.g.,</em> <code>/user/hive/warehouse/logs/dt=20100101/</code>)
- and the data for that day. Partitions are virtual
- columns; they are not represented in the data themselves,
- but are determined by the data location. Hive implements
- query optimizations such that queries that are specific
- to a single partition need not read the data in other partitions.
- </p>
- <div class="bw-partition-forms">
- % for form in partitions_form.forms:
- ${render_column(form, True)}
- % endfor
- </div>
- <div class="bw-add_partition bw-add_column">
- ${unicode(partitions_form.management_form) | n}
- </div>
- </dl>
- <input type="submit" class="bw-create_table_submit">
- </dd>
- </div>
- </dl>
- </dd>
+<div id="chooseFile" class="modal hide fade">
+ <div class="modal-header">
+ <a href="#" class="close">&times;</a>
+ <h3>Choose a file</h3>
+ </div>
+ <div class="modal-body">
+ <div id="filechooser">
+ </div>
+ </div>
+ <div class="modal-footer">
+ </div>
+</div>
-</dl>
+<style>
+ #filechooser {
+ min-height:100px;
+ overflow-y:scroll;
+ }
+</style>
+</div>
+<script type="text/javascript" charset="utf-8">
+ $(document).ready(function(){
+
+ $("#pathChooser").click(function(){
+ var _destination = $(this).attr("data-filechooser-destination");
+ $("#filechooser").jHueFileChooser({
+ onFileChoose: function(filePath){
+ $("input[name='"+_destination+"']").val(filePath);
+ $("#chooseFile").modal("hide");
+ }
+ });
+ $("#chooseFile").modal("show");
+ });
+
+ $("#chooseFile").modal({
+ keyboard: true,
+ backdrop: true
+ })
+
+
+ $(".step").click(function(event){
+ event.preventDefault();
+ $(".stepDetails").hide();
+ var _step = $(this).attr("href");
+ $(_step).show();
+ $("#backBtn").hide();
+ if (_step != "#step1"){
+ $("#backBtn").show();
+ }
+ if (_step != "#step6"){
+ $("#nextBtn").show();
+ $("#submit").hide();
+ }
+ else {
+ $("#nextBtn").hide();
+ $("#submit").show();
+ }
+ $(".step").parent().removeClass("active");
+ $(this).parent().addClass("active");
+ });
+ $("#nextBtn").click(function(){
+ $("ul.pills li.active").next().find("a").click();
+ });
+ $("#backBtn").click(function(){
+ $("ul.pills li.active").prev().find("a").click();
+ });
+ var _url = location.href;
+ if (_url.indexOf("#")>-1){
+ $(".step[href='"+_url.substring(_url.indexOf("#"),_url.length)+"']").click();
+ }
+
+ $("#id_table-field_terminator_1").css("margin-left","4px").attr("placeholder","Write here your field terminator").hide();
+ $("#id_table-field_terminator_0").change(function(){
+ if ($(this).val() == "__other__"){
+ $("#id_table-field_terminator_1").show();
+ }
+ else {
+ $("#id_table-field_terminator_1").hide();
+ }
+ });
+ $("#id_table-collection_terminator_1").css("margin-left","4px").attr("placeholder","Write here your collection terminator").hide();
+ $("#id_table-collection_terminator_0").change(function(){
+ if ($(this).val() == "__other__"){
+ $("#id_table-collection_terminator_1").show();
+ }
+ else {
+ $("#id_table-collection_terminator_1").hide();
+ }
+ });
+ $("#id_table-map_key_terminator_1").css("margin-left","4px").attr("placeholder","Write here your map key terminator").hide();
+ $("#id_table-map_key_terminator_0").change(function(){
+ if ($(this).val() == "__other__"){
+ $("#id_table-map_key_terminator_1").show();
+ }
+ else {
+ $("#id_table-map_key_terminator_1").hide();
+ }
+ });
+
+ $("input[name='table-row_format']").change(function(){
+ $(".stepDetailsInner").hide();
+ $("#step3"+$(this).val()).show();
+ });
- <div style="display:none">
- <div class="beeswax_column_form_template jframe-hidden" style="display: none">
- ${render_column(columns_form.empty_form())}
- </div>
- <div class="beeswax_partition_form_template jframe-hidden" style="display: none">
- ${render_column(partitions_form.empty_form(), true)}
- </div>
- </div>
-</form>
-${wrappers.foot()}
+ $("input[name='table-file_format']").change(function(){
+ $("#inputFormatDetails").hide();
+ if ($(this).val() == "InputFormat"){
+ $("#inputFormatDetails").slideDown();
+ }
+ });
+
+ $("#id_table-use_default_location").change(function(){
+ if (!$(this).is(":checked")){
+ $("#location").slideDown();
+ }
+ else {
+ $("#location").slideUp();
+ }
+ });
+
+
+ $("#step6").find("button").click(function(){
+ $("#mainForm").attr("action","#step6");
+ });
+
+ $(".columnType").find("select").change(function(){
+ $(this).parents(".cnt").find(".arraySpec").hide();
+ $(this).parents(".cnt").find(".mapSpec").hide();
+ if ($(this).val() == "array"){
+ $(this).parents(".cnt").find(".arraySpec").show();
+ }
+ if ($(this).val() == "map"){
+ $(this).parents(".cnt").find(".mapSpec").show();
+ }
+ });
+
+ $("#step4").find("ul").addClass("inputs-list");
+ });
+</script>
+${commonfooter()}
View
157 apps/beeswax/src/beeswax/templates/define_columns.mako
@@ -13,84 +13,87 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-<%namespace name="wrappers" file="header_footer.mako" />
+<%!
+from desktop.views import commonheader, commonfooter
+%>
+<%namespace name="layout" file="layout.mako" />
<%namespace name="comps" file="beeswax_components.mako" />
<%namespace name="util" file="util.mako" />
-${wrappers.head('Define Columns')}
-<div class="toolbar">
- <ul class="clearfix" data-filters="Breadcrumb">
- ## TODO(marcus) These links should be part of the form, and do POST
- <li><a href="${ url('beeswax.create_table.import_wizard') }">Choose File</a></li>
- <li><a href="${ url('beeswax.create_table.import_wizard') }">Choose Delimiter</a></li>
- <li class="tabSelected"><a href="${ url('beeswax.create_table.import_wizard') }">Define Columns</a></li>
- </ul>
+${commonheader("Beeswax: Create table from file", "beeswax", "100px")}
+${layout.menubar(section='tables')}
+<div class="container-fluid">
+<div class="sidebar">
+ <div class="well">
+ <h6>Actions</h6>
+ <ul>
+ <li><a href="${ url('beeswax.create_table.import_wizard')}">Create a new table from file</a></li>
+ <li><a href="${ url('beeswax.create_table.create_table')}">Create a new table manually</a></li>
+ </ul>
+ </div>
</div>
-<div class="view" id="define-columns">
- <div class="bw-define-columns">
- <form action="${action}" method="POST">
- <div class="jframe-hidden">
- ${util.render_form(file_form)}
- ${util.render_form(delim_form)}
- ${unicode(column_formset.management_form) | n}
- </div>
- <div class="hue-bc-section">
- <dt> Step 3: Define Your Columns </dt>
- <%
- n_rows = len(fields_list)
- if n_rows > 2: n_rows = 2
- %>
- <dd>
- Beeswax has attempted to determine the types of your columns. Please check them as you name the columns.
- <dl class="clearfix">
- <br/>
- <dt> </dt>
- <dd>
- <table class="row_headers jframe-visible" style="display:none">
- % for i in range(n_rows):
- <tr><td> Row ${i + 1} </td></tr>
- % endfor
- <tr><td>&nbsp;</td></tr>
- <tr><td class="input_row_header"> Column Name </td></tr>
- <tr><td class="input_row_header"> Type </td></tr>
- </table>
- <div class="table_holder">
- <table class="data_table">
- % for i, row in enumerate(fields_list[:n_rows]):
- <tr>
- <td class="jframe-hidden"> Row ${i + 1} </td>
- % for val in row:
- <td>${val}</td>
- % endfor
- </tr>
- % endfor
- <tr><td colspan="${n_cols}">&nbsp;</td></tr>
- <tr>
- % for form in column_formset.forms:
- <td>
- ${comps.field(form["column_name"],
- render_default=False,
- help="Column name",
- )}
- ${comps.field(form["column_type"],
- render_default=True,
- help="Type for this column",
- )}
- ${unicode(form["_exists"]) | n}
- </td>
- %endfor
- </tr>
- </table>
- </div>
- </dd>
- </dl>
- <a class="jframe-submit_form jframe-visible hue-multipart-next" data-extra-data="{'submit_create': 'Finish Creating Table'}" style="display:none">
- Finish Creating Table
- </a>
- <input type="submit" name="submit_create" value="Finish Creating Table" class="jframe-hidden"/>
- <br/><br/><br/>
- </dd>
- </div>
- </form>
- </div>
+
+
+<div class="content">
+ <h1>Create a new table from file</h1>
+ <ul class="pills">
+ <li><a href="${ url('beeswax.create_table.import_wizard') }">Step 1: Choose File</a></li>
+ <li><a href="${ url('beeswax.create_table.import_wizard') }">Step 2: Choose Delimiter</a></li>
+ <li class="active"><a href="#">Step 3: Define Columns</a></li>
+ </ul>
+ <br/>
+ <form action="${action}" method="POST" class="form-stacked">
+ <div class="hidden">
+ ${util.render_form(file_form)}
+ ${util.render_form(delim_form)}
+ ${unicode(column_formset.management_form) | n}
+ </div>
+ <%
+ n_rows = len(fields_list)
+ if n_rows > 2: n_rows = 2
+ %>
+ <fieldset>
+ <legend>Define your columns</legend>
+ <div class="clearfix">
+
+ <div class="input">
+ <table>
+ <tr>
+ <td>&nbsp;</td>
+ % for form in column_formset.forms:
+ <td>
+ ${comps.label(form["column_name"])}
+ ${comps.field(form["column_name"],
+ render_default=False,
+ attrs=dict(
+ placeholder="Column name"
+ )
+ )}
+ <br/><br/>
+ ${comps.label(form["column_type"])}
+ ${comps.field(form["column_type"],
+ render_default=True
+ )}
+ ${unicode(form["_exists"]) | n}
+ </td>
+ %endfor
+ </tr>
+ % for i, row in enumerate(fields_list[:n_rows]):
+ <tr>
+ <td><em>Row #${i + 1}</em></td>
+ % for val in row:
+ <td>${val}</td>
+ % endfor
+ </tr>
+ % endfor
+ </table>
+
+ </div>
+ </div>
+ </fieldset>
+ <div class="actions">
+ <input class="btn primary" type="submit" name="submit_create" value="Create Table" />
+ </div>
+ </form>
</div>
-${wrappers.foot()}
+</div>
+${commonfooter()}
View
18 apps/beeswax/src/beeswax/templates/describe_partitions.mako
@@ -13,12 +13,17 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-<%namespace name="wrappers" file="header_footer.mako" />
-<%! from urllib import quote %>
-<%! from filebrowser.views import location_to_url %>
-${wrappers.head("Beeswax Table Partitions: " + table.tableName, section='tables')}
+<%!
+ from urllib import quote
+ from filebrowser.views import location_to_url
+ from desktop.views import commonheader, commonfooter
+%>
+<%namespace name="layout" file="layout.mako" />
+${commonheader("Beeswax Table Partitions: " + table.tableName, "beeswax", "100px")}
+${layout.menubar(section='tables')}
-<h2>Partitions</h2>
+<div class="container-fluid">
+<h1>Partitions</h1>
<table>
<tr>
@@ -47,4 +52,5 @@ ${wrappers.head("Beeswax Table Partitions: " + table.tableName, section='tables'
<tr><td>Table has no partitions.</td></tr>
% endif
</table>
-${wrappers.foot()}
+</div>
+${commonfooter()}
View
278 apps/beeswax/src/beeswax/templates/describe_table.mako
@@ -13,7 +13,10 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-<%namespace name="wrappers" file="header_footer.mako" />
+<%!
+from desktop.views import commonheader, commonfooter
+%>
+<%namespace name="layout" file="layout.mako" />
<%namespace name="comps" file="beeswax_components.mako" />
<%
if is_view:
@@ -21,10 +24,11 @@
else:
view_or_table_noun = "Table"
%>
-${wrappers.head("Beeswax %s Metadata: %s" % (view_or_table_noun, table.tableName), section='tables')}
+${commonheader("Beeswax %s Metadata: %s" % (view_or_table_noun, table.tableName), "beeswax", "100px")}
+${layout.menubar(section='tables')}
<%def name="column_table(cols)">
- <div class="bw-col_table_wrapper">
- <table class="sortable" data-filters="HtmlTable" cellpadding="0" cellspacing="0">
+
+ <table class="datatables">
<thead>
<tr>
<th>Name</th>
@@ -42,111 +46,183 @@ ${wrappers.head("Beeswax %s Metadata: %s" % (view_or_table_noun, table.tableName
% endfor
</tbody>
</table>
- </div>
+
</%def>
-<div id="describe_table resizable" class="view" data-filters="SplitView">
- <div class="left_col">
- <h2>${table.tableName}</h2>
- <div class="jframe_padded">
- <dl>
- % if table.parameters.get("comment", False):
- <dt class="hue-dt_cap">Description</dt>
- <dd class="hue-dd_bottom">${ table.parameters.get("comment") }</dd>
- % endif
- <dt class="hue-dt_cap">Actions</dt>
- <dd class="hue-dd_bottom bw-actions">
- <ul>
- % if not is_view:
- <li class="jframe-clear" data-filters="CollapsingElements"><a class="bw-load_data collapser">Import Data</a>
- <div class="collapsible jframe-hidden">
- <form action="${ url("beeswax.views.load_table", table=table_name) }">
- <dl>
- <div class="bw-dataNote">
- Note that loading data will move data from its location into the table's storage location.
- </div>
- ## Any existing data will be erased!
- <div class="bw-overwriteLabel">Overwrite existing data ? <input type="checkbox" name="overwrite" class="bw-overwriteCheckbox"/></div>
- ##Path (on HDFS) of files to load.
- ${comps.field(load_form["path"], title_klass='bw-pathLabel', attrs=dict(
- klass='bw-loadPath',
- data_filters="OverText",
- alt='/user/data'))}
- <div class="clearfix" data-filters="ArtButtonBar">
- <a class="hue-choose_file" data-filters="ArtButton"
- data-icon-styles="{'width': 16, 'height': 16, 'top': 1, 'left': 4 }" data-chooseFor="path">Choose File</a>
- <input type="submit" class="bw-loadSubmit" data-filters="ArtButton" value="Submit"/>
- </div>
-
- % for pf in load_form.partition_columns:
- ${comps.field(load_form[pf], render_default=True)}
- % endfor
- ## This table is partitioned. Therefore,
- ## you must specify what partition
- ## this data corresponds to.
- </dl>
- </form>
- </div>
- </li>
- % endif
- <li class="jframe-clear"><a href="${ url("beeswax.views.read_table", table=table_name) }" class=