netzke-basepack-zh 0.7.6

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 (268) hide show
  1. data/.autotest +1 -0
  2. data/.travis.yml +11 -0
  3. data/CHANGELOG.rdoc +445 -0
  4. data/LICENSE +1 -0
  5. data/README.md +94 -0
  6. data/Rakefile +44 -0
  7. data/TODO.rdoc +8 -0
  8. data/config/ci/before-travis.sh +28 -0
  9. data/init.rb +1 -0
  10. data/install.rb +1 -0
  11. data/javascripts/basepack.js +139 -0
  12. data/javascripts/xdatetime.js +196 -0
  13. data/lib/generators/netzke/basepack_generator.rb +10 -0
  14. data/lib/generators/netzke/templates/assets/ts-checkbox.gif +0 -0
  15. data/lib/generators/netzke/templates/create_netzke_field_lists.rb +18 -0
  16. data/lib/netzke-basepack.rb +26 -0
  17. data/lib/netzke/active_record.rb +20 -0
  18. data/lib/netzke/active_record/attributes.rb +256 -0
  19. data/lib/netzke/active_record/combobox_options.rb +16 -0
  20. data/lib/netzke/active_record/relation_extensions.rb +37 -0
  21. data/lib/netzke/basepack.rb +45 -0
  22. data/lib/netzke/basepack/accordion_panel.rb +39 -0
  23. data/lib/netzke/basepack/action_column.rb +68 -0
  24. data/lib/netzke/basepack/action_column/javascripts/action_column.js +61 -0
  25. data/lib/netzke/basepack/auth_app.rb +159 -0
  26. data/lib/netzke/basepack/basic_app.rb +7 -0
  27. data/lib/netzke/basepack/border_layout_panel.rb +53 -0
  28. data/lib/netzke/basepack/border_layout_panel/javascripts/border_layout_panel.js +40 -0
  29. data/lib/netzke/basepack/data_accessor.rb +53 -0
  30. data/lib/netzke/basepack/data_adapters/abstract_adapter.rb +164 -0
  31. data/lib/netzke/basepack/data_adapters/active_record_adapter.rb +279 -0
  32. data/lib/netzke/basepack/data_adapters/data_mapper_adapter.rb +264 -0
  33. data/lib/netzke/basepack/data_adapters/sequel_adapter.rb +260 -0
  34. data/lib/netzke/basepack/form_panel.rb +144 -0
  35. data/lib/netzke/basepack/form_panel/fields.rb +208 -0
  36. data/lib/netzke/basepack/form_panel/javascripts/comma_list_cbg.js +51 -0
  37. data/lib/netzke/basepack/form_panel/javascripts/form_panel.js +225 -0
  38. data/lib/netzke/basepack/form_panel/javascripts/misc.js +4 -0
  39. data/lib/netzke/basepack/form_panel/javascripts/n_radio_group.js +43 -0
  40. data/lib/netzke/basepack/form_panel/javascripts/readonly_mode.js +35 -0
  41. data/lib/netzke/basepack/form_panel/services.rb +142 -0
  42. data/lib/netzke/basepack/form_panel/stylesheets/readonly_mode.css +14 -0
  43. data/lib/netzke/basepack/grid_panel.rb +440 -0
  44. data/lib/netzke/basepack/grid_panel/columns.rb +394 -0
  45. data/lib/netzke/basepack/grid_panel/javascripts/advanced_search.js +27 -0
  46. data/lib/netzke/basepack/grid_panel/javascripts/check_column_fix.js +6 -0
  47. data/lib/netzke/basepack/grid_panel/javascripts/edit_in_form.js +51 -0
  48. data/lib/netzke/basepack/grid_panel/javascripts/event_handling.js +179 -0
  49. data/lib/netzke/basepack/grid_panel/javascripts/grid_panel.js +438 -0
  50. data/lib/netzke/basepack/grid_panel/javascripts/misc.js +4 -0
  51. data/lib/netzke/basepack/grid_panel/javascripts/rows-dd.js +281 -0
  52. data/lib/netzke/basepack/grid_panel/record_form_window.rb +41 -0
  53. data/lib/netzke/basepack/grid_panel/services.rb +235 -0
  54. data/lib/netzke/basepack/paging_form_panel.rb +72 -0
  55. data/lib/netzke/basepack/paging_form_panel/javascripts/paging_form_panel.js +76 -0
  56. data/lib/netzke/basepack/panel.rb +11 -0
  57. data/lib/netzke/basepack/query_builder.rb +107 -0
  58. data/lib/netzke/basepack/query_builder/javascripts/query_builder.js +153 -0
  59. data/lib/netzke/basepack/search_panel.rb +79 -0
  60. data/lib/netzke/basepack/search_panel/javascripts/condition_field.js +160 -0
  61. data/lib/netzke/basepack/search_panel/javascripts/search_panel.js +65 -0
  62. data/lib/netzke/basepack/search_window.rb +66 -0
  63. data/lib/netzke/basepack/simple_app.rb +104 -0
  64. data/lib/netzke/basepack/simple_app/javascripts/simple_app.js +64 -0
  65. data/lib/netzke/basepack/simple_app/javascripts/statusbar_ext.js +8 -0
  66. data/lib/netzke/basepack/tab_panel.rb +21 -0
  67. data/lib/netzke/basepack/tab_panel/javascripts/tab_panel.js +11 -0
  68. data/lib/netzke/basepack/version.rb +11 -0
  69. data/lib/netzke/basepack/window.rb +29 -0
  70. data/lib/netzke/basepack/window/javascripts/window.js +20 -0
  71. data/lib/netzke/basepack/wrap_lazy_loaded.rb +28 -0
  72. data/lib/netzke/basepack/wrapper.rb +28 -0
  73. data/lib/netzke/data_mapper.rb +18 -0
  74. data/lib/netzke/data_mapper/attributes.rb +273 -0
  75. data/lib/netzke/data_mapper/combobox_options.rb +11 -0
  76. data/lib/netzke/data_mapper/relation_extensions.rb +38 -0
  77. data/lib/netzke/sequel.rb +18 -0
  78. data/lib/netzke/sequel/attributes.rb +274 -0
  79. data/lib/netzke/sequel/combobox_options.rb +10 -0
  80. data/lib/netzke/sequel/relation_extensions.rb +40 -0
  81. data/lib/tasks/netzke_basepack_tasks.rake +4 -0
  82. data/locales/de.yml +79 -0
  83. data/locales/en.yml +79 -0
  84. data/netzke-basepack.gemspec +306 -0
  85. data/stylesheets/basepack.css +72 -0
  86. data/stylesheets/datetimefield.css +54 -0
  87. data/test/basepack_test_app/.gitignore +6 -0
  88. data/test/basepack_test_app/.rvmrc +1 -0
  89. data/test/basepack_test_app/Gemfile +59 -0
  90. data/test/basepack_test_app/Gemfile.lock +196 -0
  91. data/test/basepack_test_app/Guardfile +46 -0
  92. data/test/basepack_test_app/README +1 -0
  93. data/test/basepack_test_app/Rakefile +7 -0
  94. data/test/basepack_test_app/app/components/author_form.rb +32 -0
  95. data/test/basepack_test_app/app/components/author_grid.rb +3 -0
  96. data/test/basepack_test_app/app/components/book_form.rb +38 -0
  97. data/test/basepack_test_app/app/components/book_form_with_custom_fields.rb +21 -0
  98. data/test/basepack_test_app/app/components/book_form_with_defaults.rb +8 -0
  99. data/test/basepack_test_app/app/components/book_form_with_nested_attributes.rb +18 -0
  100. data/test/basepack_test_app/app/components/book_grid.rb +12 -0
  101. data/test/basepack_test_app/app/components/book_grid_filtering.rb +10 -0
  102. data/test/basepack_test_app/app/components/book_grid_loader.rb +24 -0
  103. data/test/basepack_test_app/app/components/book_grid_with_column_actions.rb +15 -0
  104. data/test/basepack_test_app/app/components/book_grid_with_custom_columns.rb +27 -0
  105. data/test/basepack_test_app/app/components/book_grid_with_default_values.rb +9 -0
  106. data/test/basepack_test_app/app/components/book_grid_with_extra_feedback.rb +8 -0
  107. data/test/basepack_test_app/app/components/book_grid_with_extra_filters.rb +14 -0
  108. data/test/basepack_test_app/app/components/book_grid_with_nested_attributes.rb +13 -0
  109. data/test/basepack_test_app/app/components/book_grid_with_overridden_columns.rb +15 -0
  110. data/test/basepack_test_app/app/components/book_grid_with_paging.rb +10 -0
  111. data/test/basepack_test_app/app/components/book_grid_with_persistence.rb +8 -0
  112. data/test/basepack_test_app/app/components/book_grid_with_scoped_authors.rb +8 -0
  113. data/test/basepack_test_app/app/components/book_grid_with_virtual_attributes.rb +21 -0
  114. data/test/basepack_test_app/app/components/book_paging_form_panel.rb +22 -0
  115. data/test/basepack_test_app/app/components/book_query_builder.rb +8 -0
  116. data/test/basepack_test_app/app/components/book_search_panel.rb +5 -0
  117. data/test/basepack_test_app/app/components/book_search_panel/javascripts/i18n_de.js +6 -0
  118. data/test/basepack_test_app/app/components/book_with_custom_primary_key_grid.rb +10 -0
  119. data/test/basepack_test_app/app/components/books_bound_to_author.rb +10 -0
  120. data/test/basepack_test_app/app/components/double_book_grid.rb +18 -0
  121. data/test/basepack_test_app/app/components/extras/book_presentation.rb +27 -0
  122. data/test/basepack_test_app/app/components/form_without_model.rb +21 -0
  123. data/test/basepack_test_app/app/components/generic_user_form.rb +12 -0
  124. data/test/basepack_test_app/app/components/lockable_book_form.rb +17 -0
  125. data/test/basepack_test_app/app/components/lockable_user_form.rb +7 -0
  126. data/test/basepack_test_app/app/components/paging_form_with_search.rb +40 -0
  127. data/test/basepack_test_app/app/components/simple_accordion.rb +11 -0
  128. data/test/basepack_test_app/app/components/simple_panel.rb +17 -0
  129. data/test/basepack_test_app/app/components/simple_tab_panel.rb +11 -0
  130. data/test/basepack_test_app/app/components/simple_window.rb +10 -0
  131. data/test/basepack_test_app/app/components/simple_wrapper.rb +7 -0
  132. data/test/basepack_test_app/app/components/some_accordion_panel.rb +22 -0
  133. data/test/basepack_test_app/app/components/some_auth_app.rb +32 -0
  134. data/test/basepack_test_app/app/components/some_border_layout.rb +28 -0
  135. data/test/basepack_test_app/app/components/some_simple_app.rb +35 -0
  136. data/test/basepack_test_app/app/components/some_tab_panel.rb +20 -0
  137. data/test/basepack_test_app/app/components/user_form.rb +25 -0
  138. data/test/basepack_test_app/app/components/user_form_with_default_fields.rb +8 -0
  139. data/test/basepack_test_app/app/components/user_grid.rb +8 -0
  140. data/test/basepack_test_app/app/components/user_grid_with_customized_form_fields.rb +18 -0
  141. data/test/basepack_test_app/app/components/window_component_loader.rb +27 -0
  142. data/test/basepack_test_app/app/controllers/application_controller.rb +9 -0
  143. data/test/basepack_test_app/app/controllers/components_controller.rb +10 -0
  144. data/test/basepack_test_app/app/controllers/welcome_controller.rb +9 -0
  145. data/test/basepack_test_app/app/helpers/application_helper.rb +8 -0
  146. data/test/basepack_test_app/app/helpers/embedded_components_helper.rb +2 -0
  147. data/test/basepack_test_app/app/models/address.rb +29 -0
  148. data/test/basepack_test_app/app/models/author.rb +38 -0
  149. data/test/basepack_test_app/app/models/book.rb +49 -0
  150. data/test/basepack_test_app/app/models/book_with_custom_primary_key.rb +26 -0
  151. data/test/basepack_test_app/app/models/role.rb +24 -0
  152. data/test/basepack_test_app/app/models/user.rb +29 -0
  153. data/test/basepack_test_app/app/presenters/forms/generic_user.rb +6 -0
  154. data/test/basepack_test_app/app/views/components/loadable_window.html.erb +9 -0
  155. data/test/basepack_test_app/app/views/components/simple_panel.html.erb +1 -0
  156. data/test/basepack_test_app/app/views/layouts/application.html.erb +12 -0
  157. data/test/basepack_test_app/app/views/layouts/components.html.erb +13 -0
  158. data/test/basepack_test_app/app/views/layouts/nested.html.erb +5 -0
  159. data/test/basepack_test_app/app/views/welcome/index.html.erb +10 -0
  160. data/test/basepack_test_app/config.ru +4 -0
  161. data/test/basepack_test_app/config/application.rb +57 -0
  162. data/test/basepack_test_app/config/boot.rb +13 -0
  163. data/test/basepack_test_app/config/cucumber.yml +8 -0
  164. data/test/basepack_test_app/config/database.yml.sample +41 -0
  165. data/test/basepack_test_app/config/database.yml.travis +15 -0
  166. data/test/basepack_test_app/config/environment.rb +6 -0
  167. data/test/basepack_test_app/config/environments/development.rb +22 -0
  168. data/test/basepack_test_app/config/environments/production.rb +49 -0
  169. data/test/basepack_test_app/config/environments/test.rb +35 -0
  170. data/test/basepack_test_app/config/initializers/backtrace_silencers.rb +7 -0
  171. data/test/basepack_test_app/config/initializers/data_mapper_logging.rb +3 -0
  172. data/test/basepack_test_app/config/initializers/inflections.rb +10 -0
  173. data/test/basepack_test_app/config/initializers/mime_types.rb +5 -0
  174. data/test/basepack_test_app/config/initializers/netzke.rb +9 -0
  175. data/test/basepack_test_app/config/initializers/secret_token.rb +7 -0
  176. data/test/basepack_test_app/config/initializers/sequel.rb +26 -0
  177. data/test/basepack_test_app/config/initializers/session_store.rb +8 -0
  178. data/test/basepack_test_app/config/locales/de.yml +35 -0
  179. data/test/basepack_test_app/config/locales/es.yml +96 -0
  180. data/test/basepack_test_app/config/routes.rb +68 -0
  181. data/test/basepack_test_app/db/development_structure.sql +88 -0
  182. data/test/basepack_test_app/db/migrate/20100914104207_create_users.rb +15 -0
  183. data/test/basepack_test_app/db/migrate/20100914104236_create_roles.rb +13 -0
  184. data/test/basepack_test_app/db/migrate/20101026185816_create_authors.rb +14 -0
  185. data/test/basepack_test_app/db/migrate/20101026190021_create_books.rb +19 -0
  186. data/test/basepack_test_app/db/migrate/20110101143818_create_addresses.rb +17 -0
  187. data/test/basepack_test_app/db/migrate/20110213213050_create_netzke_component_states.rb +20 -0
  188. data/test/basepack_test_app/db/migrate/20110701070052_create_book_with_custom_primary_keys.rb +15 -0
  189. data/test/basepack_test_app/db/migrate/20110901114016_add_last_read_at_to_books.rb +9 -0
  190. data/test/basepack_test_app/db/migrate/20110909071740_add_published_on_to_books.rb +5 -0
  191. data/test/basepack_test_app/db/schema.rb +81 -0
  192. data/test/basepack_test_app/db/seeds.rb +44 -0
  193. data/test/basepack_test_app/features/accordion_panel.feature +12 -0
  194. data/test/basepack_test_app/features/components_in_view.feature +11 -0
  195. data/test/basepack_test_app/features/form_panel.feature +142 -0
  196. data/test/basepack_test_app/features/grid_panel.feature +277 -0
  197. data/test/basepack_test_app/features/grid_panel_filters.feature +73 -0
  198. data/test/basepack_test_app/features/grid_panel_with_custom_primary_key.feature +15 -0
  199. data/test/basepack_test_app/features/grid_sorting.feature +47 -0
  200. data/test/basepack_test_app/features/i18n.feature +18 -0
  201. data/test/basepack_test_app/features/nested_attributes.feature +26 -0
  202. data/test/basepack_test_app/features/paging_form_panel.feature +43 -0
  203. data/test/basepack_test_app/features/search_in_grid.feature +49 -0
  204. data/test/basepack_test_app/features/simple_app.feature +15 -0
  205. data/test/basepack_test_app/features/simple_panel.feature +11 -0
  206. data/test/basepack_test_app/features/step_definitions/accordion_steps.rb +5 -0
  207. data/test/basepack_test_app/features/step_definitions/ext_steps.rb +16 -0
  208. data/test/basepack_test_app/features/step_definitions/form_panel_steps.rb +46 -0
  209. data/test/basepack_test_app/features/step_definitions/generic_steps.rb +44 -0
  210. data/test/basepack_test_app/features/step_definitions/grid_panel_steps.rb +186 -0
  211. data/test/basepack_test_app/features/step_definitions/pickle_steps.rb +100 -0
  212. data/test/basepack_test_app/features/step_definitions/web_steps.rb +219 -0
  213. data/test/basepack_test_app/features/support/env.rb +81 -0
  214. data/test/basepack_test_app/features/support/paths.rb +65 -0
  215. data/test/basepack_test_app/features/support/pickle.rb +24 -0
  216. data/test/basepack_test_app/features/support/selectors.rb +39 -0
  217. data/test/basepack_test_app/features/tab_panel.feature +12 -0
  218. data/test/basepack_test_app/features/validations_in_grid.feature +13 -0
  219. data/test/basepack_test_app/features/virtual_attributes.feature +16 -0
  220. data/test/basepack_test_app/features/window.feature +11 -0
  221. data/test/basepack_test_app/lib/tasks/.gitkeep +0 -0
  222. data/test/basepack_test_app/lib/tasks/cucumber.rake +71 -0
  223. data/test/basepack_test_app/lib/tasks/travis.rake +7 -0
  224. data/test/basepack_test_app/public/404.html +26 -0
  225. data/test/basepack_test_app/public/422.html +26 -0
  226. data/test/basepack_test_app/public/500.html +26 -0
  227. data/test/basepack_test_app/public/favicon.ico +0 -0
  228. data/test/basepack_test_app/public/images/header-deco.gif +0 -0
  229. data/test/basepack_test_app/public/images/rails.png +0 -0
  230. data/test/basepack_test_app/public/javascripts/application.js +2 -0
  231. data/test/basepack_test_app/public/javascripts/controls.js +965 -0
  232. data/test/basepack_test_app/public/javascripts/dragdrop.js +974 -0
  233. data/test/basepack_test_app/public/javascripts/effects.js +1123 -0
  234. data/test/basepack_test_app/public/javascripts/prototype.js +6001 -0
  235. data/test/basepack_test_app/public/javascripts/rails.js +175 -0
  236. data/test/basepack_test_app/public/robots.txt +5 -0
  237. data/test/basepack_test_app/public/stylesheets/.gitkeep +0 -0
  238. data/test/basepack_test_app/script/cucumber +10 -0
  239. data/test/basepack_test_app/script/rails +6 -0
  240. data/test/basepack_test_app/spec/components/form_panel_spec.rb +53 -0
  241. data/test/basepack_test_app/spec/components/grid_panel_spec.rb +10 -0
  242. data/test/basepack_test_app/spec/data_adapter/adapter_spec.rb +68 -0
  243. data/test/basepack_test_app/spec/data_adapter/attributes_spec.rb +56 -0
  244. data/test/basepack_test_app/spec/data_adapter/relation_extensions_spec.rb +125 -0
  245. data/test/basepack_test_app/spec/factories.rb +28 -0
  246. data/test/basepack_test_app/spec/spec_helper.rb +39 -0
  247. data/test/basepack_test_app/test/performance/browsing_test.rb +9 -0
  248. data/test/basepack_test_app/test/test_helper.rb +13 -0
  249. data/test/basepack_test_app/vendor/plugins/.gitkeep +0 -0
  250. data/test/console_with_fixtures.rb +4 -0
  251. data/test/fixtures/books.yml +11 -0
  252. data/test/fixtures/categories.yml +7 -0
  253. data/test/fixtures/cities.yml +21 -0
  254. data/test/fixtures/continents.yml +7 -0
  255. data/test/fixtures/countries.yml +9 -0
  256. data/test/fixtures/genres.yml +9 -0
  257. data/test/fixtures/roles.yml +8 -0
  258. data/test/fixtures/users.yml +11 -0
  259. data/test/schema.rb +10 -0
  260. data/test/test_helper.rb +21 -0
  261. data/test/unit/accordion_panel_test.rb +20 -0
  262. data/test/unit/active_record_basepack_test.rb +54 -0
  263. data/test/unit/fields_configuration_test.rb +18 -0
  264. data/test/unit/grid_panel_test.rb +52 -0
  265. data/test/unit/netzke_basepack_test.rb +4 -0
  266. data/test/unit/tab_panel_test.rb +21 -0
  267. data/uninstall.rb +1 -0
  268. metadata +332 -0
data/LICENSE ADDED
@@ -0,0 +1 @@
1
+ Copyright (c) 2008-2009 Sergei Kozlov, released under the MIT license
@@ -0,0 +1,94 @@
1
+ # Netzke Basepack
2
+
3
+ A pack of pre-built [Netzke](http://netzke.org) components - such as grid, form, tab panel, etc.
4
+
5
+ ## Requirements
6
+
7
+ * Ruby 1.9.2
8
+ * Rails ~> 3.1.0
9
+ * Ext JS ~> 4.1.x
10
+
11
+ ## Installation
12
+
13
+ In your Gemfile:
14
+
15
+ gem 'netzke-basepack'
16
+
17
+ For the "edge" stuff, tell bundler to get the gem straight from GitHub:
18
+
19
+ gem 'netzke-basepack', :git => "git://github.com/skozlov/netzke-basepack.git"
20
+
21
+ ## Usage
22
+
23
+ Embed a basepack component into a view as any other Netzke component, e.g.:
24
+
25
+ <%= netzke :books, :class_name => 'Netzke::Basepack::GridPanel', :model => 'Book' %>
26
+
27
+ For more examples, see http://demo.netzke.com, and look into test/basepack_test_app.
28
+
29
+ ## Testing and playing with Netzke Basepack
30
+
31
+ Netzke Basepack is bundled with Cucumber and RSpec tests. If you would like to contribute to the project, you may want to learn how to [run the tests](https://github.com/skozlov/netzke-core/wiki/Automated-testing).
32
+
33
+ Besides, the bundled test application is a convenient [playground](https://github.com/skozlov/netzke-core/wiki/Playground) for those who search to experiment with the framework.
34
+
35
+ After starting up the test app, you can see the list of functional test components on the index page (along with links to the source code):
36
+
37
+ http://localhost:3000/
38
+
39
+ ## Note on testing with DataMapper/Sequel Support
40
+ To install the test app with DataMapper or Sequel, put ORM=dm or ORM=sq
41
+ into your environment.
42
+ For example to set-up DataMapper support run
43
+
44
+ # in test/basepack_test_app
45
+ ORM=dm bundle install
46
+
47
+ To run the test app in DataMapper-Mode (will use DataMapper models instead of ActiveRecord models)
48
+
49
+ # in test/basepack_test_app
50
+ ORM=dm rails s
51
+
52
+ To run the test suite
53
+
54
+ # in test/basepack_test_app
55
+ ORM=dm bundle exec rake
56
+
57
+ etc.
58
+
59
+ NOTE: netzke-basepack is not dependant on neither DataMapper nor Sequel. It will pick the right DataAdapter for your models automatically.
60
+ ActiveRecord is still included in Gemfile of the test app, as netzke-persistance is used which uses ActiveRecord.
61
+ If you don't use netzke-persistence, then you don't need to include ActiveRecord.
62
+
63
+ ## DataMapper support
64
+ DataMapper support is *incomplete*, as I didn't find a good way to sort by an association's column when the association needs a LEFT OUTER JOIN (i.e. nullable foreign key in many_to_one).
65
+
66
+ ## Sequel support
67
+
68
+ CAVEATS:
69
+ - you can't use polymorphic associations for the time being, as the sequel_polymorphic plugin is not supported by netzke-basepack
70
+ - SearchPanel is broken atm. When it's fixed, Sequel support for
71
+ SearchPanel triggered queries should be implemented.
72
+
73
+ ## Icons support
74
+ Netzke Basepack can make use of FamFamFam Silk icon set (http://www.famfamfam.com/archive/silk-icons-thats-your-lot/). To enable this, download the icons and put the "icons" folder into your app's public/images folder. Then restart your application.
75
+
76
+ ## Ext 3 support
77
+ Versions 0.6.x are for you if you're using Ext 3 (*hardly maintained*)
78
+
79
+ ## Rails 2 support
80
+ With Rails 2 (and Ext 3 only), use versions 0.5.x (*not maintained*)
81
+
82
+ ## More info
83
+ Official project site: http://netzke.org
84
+
85
+ Twitter:
86
+
87
+ * latest news about Netzke: http://twitter.com/netzke
88
+ * author's tweets on osx, productivity and what not: http://twitter.com/nomadcoder
89
+
90
+ Many (if a bit outdated) tutorials: http://blog.writelesscode.com
91
+
92
+ ---
93
+ Copyright (c) 2008-2011 NomadCoder, released under the MIT license
94
+ Note, that Ext JS itself is licensed [differently](http://www.sencha.com/products/extjs/license/)
@@ -0,0 +1,44 @@
1
+ begin
2
+ require 'jeweler'
3
+ require './lib/netzke/basepack/version'
4
+ Jeweler::Tasks.new do |gemspec|
5
+ gemspec.version = Netzke::Basepack::Version::STRING
6
+ gemspec.name = "netzke-basepack"
7
+ gemspec.summary = "Pre-built Rails + ExtJS components for your RIA"
8
+ gemspec.description = "A set of full-featured extendible Netzke components (such as FormPanel, GridPanel, Window, BorderLayoutPanel, etc) which can be used as building block for your RIA"
9
+ gemspec.email = "nmcoder@gmail.com"
10
+ gemspec.homepage = "http://netzke.org"
11
+ gemspec.authors = ["Denis Gorin"]
12
+ gemspec.add_dependency("netzke-core", "~>0.7.6")
13
+ end
14
+ Jeweler::GemcutterTasks.new
15
+ rescue LoadError
16
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
17
+ end
18
+
19
+ require 'rake/testtask'
20
+ Rake::TestTask.new(:test) do |test|
21
+ test.libs << 'lib' << 'test'
22
+ test.pattern = 'test/**/*_test.rb'
23
+ test.verbose = true
24
+ end
25
+
26
+ require 'rake/rdoctask'
27
+ Rake::RDocTask.new do |rdoc|
28
+ require './lib/netzke/basepack/version'
29
+ version = Netzke::Basepack::Version::STRING
30
+
31
+ rdoc.rdoc_dir = 'rdoc'
32
+ rdoc.title = "netzke-basepack #{version}"
33
+ # rdoc.main = "README.rdoc"
34
+ rdoc.rdoc_files.include('README*')
35
+ rdoc.rdoc_files.include('CHANGELOG*')
36
+ rdoc.rdoc_files.include('lib/**/*.rb')
37
+ end
38
+
39
+ namespace :rdoc do
40
+ desc "Publish rdocs"
41
+ task :publish => :rdoc do
42
+ `scp -r rdoc/* fl:www/api.netzke.org/basepack`
43
+ end
44
+ end
@@ -0,0 +1,8 @@
1
+ == Priority
2
+ * Commit persistence migrations in the test app
3
+ * DataAccessor#to_array should not rescue exceptions, but rather check the availability of the attributes; `respond_to_with_basepack?` should be extended to also return true for association columns
4
+ * GridPanel's read_only vs editable (doesn't work now) options
5
+ * Find a way to print the grid nicely (along with the column and rows that don't fit on the screen)
6
+
7
+ == Foolproof
8
+ * Should not be possible to put the "ID" field on any place but first for grids (otherwise record ID is not correct)
@@ -0,0 +1,28 @@
1
+ # Start xvfb in preparation for cucumber
2
+ sh -e /etc/init.d/xvfb start
3
+
4
+ # fetch extjs
5
+ wget http://extjs.cachefly.net/ext-4.0.2a-gpl.zip
6
+ unzip -q -d test/basepack_test_app/public/ -n ext-4.0.2a-gpl.zip
7
+ mv test/basepack_test_app/public/ext-4.0.2a test/basepack_test_app/public/extjs
8
+
9
+ # cp db configuration
10
+ cp test/basepack_test_app/config/database.yml.travis test/basepack_test_app/config/database.yml
11
+
12
+ # create mysql database
13
+ mysql -e 'create database nbt_test;'
14
+
15
+ # clone netzke-core and netzke-persistence gems into test project
16
+ mkdir -p test/basepack_test_app/vendor/gems
17
+ cd test/basepack_test_app/vendor/gems
18
+ git clone git://github.com/skozlov/netzke-core.git
19
+ cd netzke-core
20
+ git checkout tags/v0.7.4
21
+ cd ..
22
+ git clone git://github.com/skozlov/netzke-persistence.git
23
+ cd netzke-persistence
24
+ git checkout tags/v0.1.0
25
+ cd ../../..
26
+ bundle install
27
+ bundle exec rake db:migrate RAILS_ENV=test
28
+ cd ../..
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'netzke-basepack'
@@ -0,0 +1 @@
1
+ # Install hook code here
@@ -0,0 +1,139 @@
1
+ Ext.ns("Netzke.pre");
2
+ Ext.ns("Netzke.pre.Basepack");
3
+ Ext.ns("Ext.ux.grid");
4
+
5
+ Ext.apply(Ext.History, new Ext.util.Observable());
6
+
7
+ // A convenient passfield
8
+ // Ext.netzke.PassField = Ext.extend(Ext.form.TextField, {
9
+ // inputType: 'password'
10
+ // });
11
+ // Ext.reg('passfield', Ext.netzke.PassField);
12
+
13
+ // Ext.override(Ext.ux.form.DateTimeField, {
14
+ // format: "Y-m-d",
15
+ // timeFormat: "g:i:s",
16
+ // picker: {
17
+ // minIncremenet: 15
18
+ // }
19
+ // });
20
+
21
+ // ComboBox that gets options from the server (used in both grids and panels)
22
+ Ext.define('Ext.netzke.ComboBox', {
23
+ extend : 'Ext.form.field.ComboBox',
24
+ alias : 'widget.netzkeremotecombo',
25
+ valueField : 'field1',
26
+ displayField : 'field2',
27
+ triggerAction : 'all',
28
+ // WIP: Breaking - should not be 'true' if combobox is not editable
29
+ // typeAhead : true,
30
+
31
+ initComponent : function(){
32
+ var modelName = this.parentId + "_" + this.name;
33
+
34
+ Ext.define(modelName, {
35
+ extend: 'Ext.data.Model',
36
+ fields: ['field1', 'field2']
37
+ });
38
+
39
+ var store = new Ext.data.Store({
40
+ model: modelName,
41
+ proxy: {
42
+ type: 'direct',
43
+ directFn: Netzke.providers[this.parentId].getComboboxOptions,
44
+ reader: {
45
+ type: 'array',
46
+ root: 'data'
47
+ }
48
+ }
49
+ });
50
+
51
+ // TODO: find a cleaner way to pass this.name to the server
52
+ store.on('beforeload', function(self, params) {
53
+ params.params.column = this.name;
54
+ },this);
55
+
56
+ store.on('load', function(self, params) {
57
+ self.insert(0, Ext.create(modelName, {field1: 0, field2: this.emptyText}));
58
+ }, this);
59
+
60
+ // If inline data was passed (TODO: is this actually working?)
61
+ if (this.store) store.loadData({data: this.store});
62
+
63
+ this.store = store;
64
+
65
+ this.callParent();
66
+ },
67
+
68
+ collapse: function(){
69
+ // HACK: do not hide dropdown menu while loading items
70
+ if( !this.store.loading ) this.callParent();
71
+ }
72
+ });
73
+
74
+ Ext.util.Format.mask = function(v){
75
+ return "********";
76
+ };
77
+
78
+ // Ext.netzke.JsonField = Ext.extend(Ext.form.TextField, {
79
+ // validator: function(value) {
80
+ // try{
81
+ // var d = Ext.decode(value);
82
+ // return true;
83
+ // } catch(e) {
84
+ // return "Invalid JSON"
85
+ // }
86
+ // }
87
+ //
88
+ // ,setValue: function(value) {
89
+ // this.setRawValue(Ext.encode(value));
90
+ // }
91
+ //
92
+ // });
93
+ //
94
+ // Ext.reg('jsonfield', Ext.netzke.JsonField);
95
+ //
96
+ // WIP: todo - rewrite Ext.lib calls below
97
+ // Ext.grid.HeaderDropZone.prototype.onNodeDrop = function(n, dd, e, data){
98
+ // var h = data.header;
99
+ // if(h != n){
100
+ // var cm = this.grid.colModel;
101
+ // var x = Ext.lib.Event.getPageX(e);
102
+ // var r = Ext.lib.Dom.getRegion(n.firstChild);
103
+ // var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before";
104
+ // var oldIndex = this.view.getCellIndex(h);
105
+ // var newIndex = this.view.getCellIndex(n);
106
+ // if(pt == "after"){
107
+ // newIndex++;
108
+ // }
109
+ // if(oldIndex < newIndex){
110
+ // newIndex--;
111
+ // }
112
+ // cm.moveColumn(oldIndex, newIndex);
113
+ // return true;
114
+ // }
115
+ // return false;
116
+ // };
117
+ //
118
+ //
119
+ // Ext.ns('Ext.ux.form');
120
+
121
+ Ext.define('Ext.ux.form.TriCheckbox', {
122
+ extend: 'Ext.form.field.ComboBox',
123
+ alias: 'widget.tricheckbox',
124
+ store: [[true, "Yes"], [false, "No"]],
125
+ forceSelection: true
126
+ });
127
+
128
+ // Enabling checkbox submission when unchecked
129
+ // TODO: it would be nice to standardize return values
130
+ // because currently checkboxes return "on", if checked,
131
+ // and boolean 'false' otherwise. It's not nice
132
+ // MAV
133
+ // TODO: maybe we should simply initialize 'uncheckedValue' somewhere else,
134
+ // instead
135
+ Ext.override( Ext.form.field.Checkbox, {
136
+ getSubmitValue: function() {
137
+ return this.callOverridden() || false; // 'off';
138
+ }
139
+ });
@@ -0,0 +1,196 @@
1
+ /**
2
+ * @class Ext.ux.form.field.DateTime
3
+ * @extends Ext.form.FieldContainer
4
+ * @version 0.2 (July 20th, 2011)
5
+ * @author atian25 (http://www.sencha.com/forum/member.php?51682-atian25)
6
+ * @author ontho (http://www.sencha.com/forum/member.php?285806-ontho)
7
+ * @author jakob.ketterl (http://www.sencha.com/forum/member.php?25102-jakob.ketterl)
8
+ * @link http://www.sencha.com/forum/showthread.php?134345-Ext.ux.form.field.DateTime
9
+ * from http://www.sencha.com/forum/showthread.php?134345-Ext.ux.form.field.DateTime&p=863449&viewfull=1#post863449
10
+ */
11
+ Ext.define('Ext.ux.form.field.DateTime', {
12
+ extend:'Ext.form.FieldContainer',
13
+ mixins:{
14
+ field:'Ext.form.field.Field'
15
+ },
16
+ alias: 'widget.xdatetime',
17
+
18
+ //configurables
19
+
20
+ combineErrors: true,
21
+ msgTarget: 'under',
22
+ layout: 'hbox',
23
+ readOnly: false,
24
+
25
+ /**
26
+ * @cfg {String} dateFormat
27
+ * Convenience config for specifying the format of the date portion.
28
+ * This value is overridden if format is specified in the dateConfig.
29
+ * The default is 'Y-m-d'
30
+ */
31
+ dateFormat: 'Y-m-d',
32
+ /**
33
+ * @cfg {String} timeFormat
34
+ * Convenience config for specifying the format of the time portion.
35
+ * This value is overridden if format is specified in the timeConfig.
36
+ * The default is 'H:i:s'
37
+ */
38
+ timeFormat: 'H:i:s',
39
+ // /**
40
+ // * @cfg {String} dateTimeFormat
41
+ // * The format used when submitting the combined value.
42
+ // * Defaults to 'Y-m-d H:i:s'
43
+ // */
44
+ // dateTimeFormat: 'Y-m-d H:i:s',
45
+ /**
46
+ * @cfg {Object} dateConfig
47
+ * Additional config options for the date field.
48
+ */
49
+ dateConfig:{},
50
+ /**
51
+ * @cfg {Object} timeConfig
52
+ * Additional config options for the time field.
53
+ */
54
+ timeConfig:{},
55
+
56
+
57
+ // properties
58
+
59
+ dateValue: null, // Holds the actual date
60
+ /**
61
+ * @property dateField
62
+ * @type Ext.form.field.Date
63
+ */
64
+ dateField: null,
65
+ /**
66
+ * @property timeField
67
+ * @type Ext.form.field.Time
68
+ */
69
+ timeField: null,
70
+
71
+ initComponent: function(){
72
+ var me = this
73
+ ,i = 0
74
+ ,key
75
+ ,tab;
76
+
77
+ me.items = me.items || [];
78
+
79
+ me.dateField = Ext.create('Ext.form.field.Date', Ext.apply({
80
+ format:me.dateFormat,
81
+ flex:1,
82
+ isFormField:false, //exclude from field query's
83
+ submitValue:false
84
+ }, me.dateConfig));
85
+ me.items.push(me.dateField);
86
+
87
+ me.timeField = Ext.create('Ext.form.field.Time', Ext.apply({
88
+ format:me.timeFormat,
89
+ flex:1,
90
+ isFormField:false, //exclude from field query's
91
+ submitValue:false
92
+ }, me.timeConfig));
93
+ me.items.push(me.timeField);
94
+
95
+ for (; i < me.items.length; i++) {
96
+ me.items[i].on('focus', Ext.bind(me.onItemFocus, me));
97
+ me.items[i].on('blur', Ext.bind(me.onItemBlur, me));
98
+ me.items[i].on('specialkey', function(field, event){
99
+ key = event.getKey();
100
+ tab = key == event.TAB;
101
+
102
+ if (tab && me.focussedItem == me.dateField) {
103
+ event.stopEvent();
104
+ me.timeField.focus();
105
+ return;
106
+ }
107
+
108
+ me.fireEvent('specialkey', field, event);
109
+ });
110
+ }
111
+
112
+ me.callParent();
113
+
114
+ // this dummy is necessary because Ext.Editor will not check whether an inputEl is present or not
115
+ this.inputEl = {
116
+ dom: document.createElement('div'),
117
+ swallowEvent:function(){}
118
+ };
119
+
120
+ me.initField();
121
+ },
122
+
123
+ focus:function(){
124
+ this.callParent(arguments);
125
+ this.dateField.focus();
126
+ },
127
+
128
+ onItemFocus:function(item){
129
+ if (this.blurTask){
130
+ this.blurTask.cancel();
131
+ }
132
+ this.focussedItem = item;
133
+ },
134
+
135
+ onItemBlur:function(item, e){
136
+ var me = this;
137
+ if (item != me.focussedItem){ return; }
138
+ // 100ms to focus a new item that belongs to us, otherwise we will assume the user left the field
139
+ me.blurTask = new Ext.util.DelayedTask(function(){
140
+ me.fireEvent('blur', me, e);
141
+ });
142
+ me.blurTask.delay(100);
143
+ },
144
+
145
+ getValue: function(){
146
+ var value = null
147
+ ,date = this.dateField.getSubmitValue()
148
+ ,time = this.timeField.getSubmitValue()
149
+ ,format;
150
+
151
+ if (date){
152
+ if (time){
153
+ format = this.getFormat();
154
+ value = Ext.Date.parse(date + ' ' + time, format);
155
+ } else {
156
+ value = this.dateField.getValue();
157
+ }
158
+ }
159
+ return value;
160
+ },
161
+
162
+ getSubmitValue: function(){
163
+ // var value = this.getValue();
164
+ // return value ? Ext.Date.format(value, this.dateTimeFormat) : null;
165
+
166
+ var me = this
167
+ ,format = me.getFormat()
168
+ ,value = me.getValue();
169
+
170
+ return value ? Ext.Date.format(value, format) : null;
171
+ },
172
+
173
+ setValue: function(value){
174
+ if (Ext.isString(value)){
175
+ value = Ext.Date.parse(value, this.getFormat()); //this.dateTimeFormat
176
+ }
177
+ this.dateField.setValue(value);
178
+ this.timeField.setValue(value);
179
+ },
180
+
181
+ getFormat: function(){
182
+ return (this.dateField.submitFormat || this.dateField.format) + " " + (this.timeField.submitFormat || this.timeField.format);
183
+ },
184
+
185
+ // Bug? A field-mixin submits the data from getValue, not getSubmitValue
186
+ getSubmitData: function(){
187
+ var me = this
188
+ ,data = null;
189
+
190
+ if (!me.disabled && me.submitValue && !me.isFileUpload()) {
191
+ data = {};
192
+ data[me.getName()] = '' + me.getSubmitValue();
193
+ }
194
+ return data;
195
+ }
196
+ });