lipsiadmin 4.1.8 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. data/CHANGELOG +41 -2
  2. data/lib/access_control/authentication.rb +1 -1
  3. data/lib/access_control/base.rb +18 -11
  4. data/lib/controller/ext.rb +5 -3
  5. data/lib/controller/pdf_builder.rb +22 -6
  6. data/lib/controller/responds_to_parent.rb +1 -1
  7. data/lib/data_base/attachment_table.rb +0 -1
  8. data/lib/lipsiadmin.rb +7 -0
  9. data/lib/mailer/pdf_builder.rb +23 -9
  10. data/lib/version.rb +3 -3
  11. data/lib/view/helpers/backend_helper.rb +137 -97
  12. data/lib/view/helpers/ext/button.rb +62 -0
  13. data/lib/view/helpers/ext/column_model.rb +29 -23
  14. data/lib/view/helpers/ext/component.rb +52 -40
  15. data/lib/view/helpers/ext/configuration.rb +3 -2
  16. data/lib/view/helpers/ext/grid.rb +38 -40
  17. data/lib/view/helpers/ext/store.rb +12 -12
  18. data/lib/view/helpers/ext/templates/grid_functions.js.erb +14 -9
  19. data/lib/view/helpers/ext/tool_bar.rb +9 -10
  20. data/lib/view/helpers/ext_helper.rb +3 -2
  21. data/lib/view/helpers/pdf_helper.rb +45 -0
  22. data/lipsiadmin_generators/attachment/REMEMBER +0 -4
  23. data/lipsiadmin_generators/attachment/templates/migration.rb +1 -1
  24. data/lipsiadmin_generators/backend/templates/config/config.yml +2 -3
  25. data/lipsiadmin_generators/backend/templates/config/locales/backend/en.yml +2 -0
  26. data/lipsiadmin_generators/backend/templates/config/locales/backend/it.yml +2 -0
  27. data/lipsiadmin_generators/backend/templates/config/locales/models/{en.yml → account/en.yml} +0 -0
  28. data/lipsiadmin_generators/backend/templates/config/locales/models/{it.yml → account/it.yml} +0 -0
  29. data/lipsiadmin_generators/backend/templates/controllers/javascripts_controller.rb +1 -1
  30. data/lipsiadmin_generators/backend/templates/images/backend/association_break.png +0 -0
  31. data/lipsiadmin_generators/backend/templates/images/backend/association_ok.png +0 -0
  32. data/lipsiadmin_generators/backend/templates/images/backend/categories.gif +0 -0
  33. data/lipsiadmin_generators/backend/templates/images/ext/charts.swf +0 -0
  34. data/lipsiadmin_generators/backend/templates/images/ext/{slate/sizer/se-handle.gif → default/button/arrow.gif} +0 -0
  35. data/lipsiadmin_generators/backend/templates/images/ext/default/button/btn.gif +0 -0
  36. data/lipsiadmin_generators/backend/templates/images/ext/default/button/group-cs.gif +0 -0
  37. data/lipsiadmin_generators/backend/templates/images/ext/{slate/grid/grid-blue-split.gif → default/button/group-lr.gif} +0 -0
  38. data/lipsiadmin_generators/backend/templates/images/ext/{slate/grid/arrow-right-white.gif → default/button/group-tb.gif} +0 -0
  39. data/lipsiadmin_generators/backend/templates/images/ext/default/button/s-arrow-b-noline.gif +0 -0
  40. data/lipsiadmin_generators/backend/templates/images/ext/default/button/s-arrow-b.gif +0 -0
  41. data/lipsiadmin_generators/backend/templates/images/ext/default/button/s-arrow-bo.gif +0 -0
  42. data/lipsiadmin_generators/backend/templates/images/ext/{slate/grid/grid3-hrow.gif → default/button/s-arrow-noline.gif} +0 -0
  43. data/lipsiadmin_generators/backend/templates/images/ext/default/button/s-arrow-o.gif +0 -0
  44. data/lipsiadmin_generators/backend/templates/images/ext/default/button/s-arrow.gif +0 -0
  45. data/lipsiadmin_generators/backend/templates/images/ext/default/form/checkbox.gif +0 -0
  46. data/lipsiadmin_generators/backend/templates/images/ext/default/form/radio.gif +0 -0
  47. data/lipsiadmin_generators/backend/templates/images/ext/default/form/trigger.gif +0 -0
  48. data/lipsiadmin_generators/backend/templates/images/ext/default/grid/group-collapse.gif +0 -0
  49. data/lipsiadmin_generators/backend/templates/images/ext/default/grid/group-expand.gif +0 -0
  50. data/lipsiadmin_generators/backend/templates/images/ext/default/grid/refresh.gif +0 -0
  51. data/lipsiadmin_generators/backend/templates/images/ext/default/grid/sort-hd.gif +0 -0
  52. data/lipsiadmin_generators/backend/templates/images/ext/default/panel/tool-sprites.gif +0 -0
  53. data/lipsiadmin_generators/backend/templates/images/ext/default/panel/tools-sprites-trans.gif +0 -0
  54. data/lipsiadmin_generators/backend/templates/images/ext/default/qtip/tip-anchor-sprite.gif +0 -0
  55. data/lipsiadmin_generators/backend/templates/images/ext/default/shadow-c.png +0 -0
  56. data/lipsiadmin_generators/backend/templates/images/ext/default/slider/slider-bg.png +0 -0
  57. data/lipsiadmin_generators/backend/templates/images/ext/default/slider/slider-thumb.png +0 -0
  58. data/lipsiadmin_generators/backend/templates/images/ext/default/slider/slider-v-bg.png +0 -0
  59. data/lipsiadmin_generators/backend/templates/images/ext/default/slider/slider-v-thumb.png +0 -0
  60. data/lipsiadmin_generators/backend/templates/images/ext/{slate/grid/arrow-left-white.gif → default/toolbar/more.gif} +0 -0
  61. data/lipsiadmin_generators/backend/templates/images/ext/default/toolbar/tb-xl-btn-sprite.gif +0 -0
  62. data/lipsiadmin_generators/backend/templates/images/ext/{slate/panel/left-right.gif → default/toolbar/tb-xl-sep.gif} +0 -0
  63. data/lipsiadmin_generators/backend/templates/images/ext/default/window/left-corners.png +0 -0
  64. data/lipsiadmin_generators/backend/templates/images/ext/default/window/left-right.png +0 -0
  65. data/lipsiadmin_generators/backend/templates/images/ext/default/window/left-right.psd +0 -0
  66. data/lipsiadmin_generators/backend/templates/images/ext/default/window/right-corners.png +0 -0
  67. data/lipsiadmin_generators/backend/templates/images/ext/default/window/top-bottom.png +0 -0
  68. data/lipsiadmin_generators/backend/templates/images/ext/default/window/top-bottom.psd +0 -0
  69. data/lipsiadmin_generators/backend/templates/images/ext/expressinstall.swf +0 -0
  70. data/lipsiadmin_generators/backend/templates/javascripts/ext.js +97 -76
  71. data/lipsiadmin_generators/backend/templates/javascripts/prototype.js +14 -12
  72. data/lipsiadmin_generators/backend/templates/models/notifier.rb +1 -1
  73. data/lipsiadmin_generators/backend/templates/stylesheets/backend.css +11 -2
  74. data/lipsiadmin_generators/backend/templates/stylesheets/ext.css +1070 -546
  75. data/lipsiadmin_generators/backend/templates/stylesheets/login.css +1 -0
  76. data/lipsiadmin_generators/backend/templates/views/backend/accounts/index.rjs +1 -0
  77. data/lipsiadmin_generators/backend/templates/views/backend/base/index.html.haml +7 -4
  78. data/lipsiadmin_generators/backend/templates/views/javascripts/backend.js.erb +203 -143
  79. data/lipsiadmin_generators/pdf/pdf_generator.rb +1 -4
  80. data/lipsiadmin_generators/pdf/templates/view.html.haml +11 -6
  81. data/lipsiadmin_generators/state_session/state_session_generator.rb +2 -0
  82. data/resources/javascripts/ux.js +16 -17
  83. data/resources/javascripts/ux.min.js +2 -0
  84. data/resources/pd4ml/ruby/Pd4Ruby.class +0 -0
  85. data/resources/pd4ml/ruby/Pd4Ruby.java +277 -31
  86. data/tasks/lipsiadmin_tasks.rake +18 -1
  87. metadata +32 -124
  88. data/lipsiadmin_generators/backend/templates/images/ext/default/box/tb-slate.gif +0 -0
  89. data/lipsiadmin_generators/backend/templates/images/ext/default/button/btn-arrow.gif +0 -0
  90. data/lipsiadmin_generators/backend/templates/images/ext/default/button/btn-sprite.gif +0 -0
  91. data/lipsiadmin_generators/backend/templates/images/ext/default/grid/Thumbs.db +0 -0
  92. data/lipsiadmin_generators/backend/templates/images/ext/slate/button/btn-arrow.gif +0 -0
  93. data/lipsiadmin_generators/backend/templates/images/ext/slate/button/btn-sprite.gif +0 -0
  94. data/lipsiadmin_generators/backend/templates/images/ext/slate/editor/tb-sprite.gif +0 -0
  95. data/lipsiadmin_generators/backend/templates/images/ext/slate/form/checkbox.gif +0 -0
  96. data/lipsiadmin_generators/backend/templates/images/ext/slate/form/clear-trigger.gif +0 -0
  97. data/lipsiadmin_generators/backend/templates/images/ext/slate/form/date-trigger.gif +0 -0
  98. data/lipsiadmin_generators/backend/templates/images/ext/slate/form/radio.gif +0 -0
  99. data/lipsiadmin_generators/backend/templates/images/ext/slate/form/search-trigger.gif +0 -0
  100. data/lipsiadmin_generators/backend/templates/images/ext/slate/form/trigger-tpl.gif +0 -0
  101. data/lipsiadmin_generators/backend/templates/images/ext/slate/form/trigger.gif +0 -0
  102. data/lipsiadmin_generators/backend/templates/images/ext/slate/gradient-bg.gif +0 -0
  103. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/col-move-bottom.gif +0 -0
  104. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/col-move-top.gif +0 -0
  105. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/footer-bg.gif +0 -0
  106. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/grid-blue-hd.gif +0 -0
  107. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/grid-hrow.gif +0 -0
  108. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/grid-split.gif +0 -0
  109. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/grid-vista-hd.gif +0 -0
  110. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/grid3-hd-btn.gif +0 -0
  111. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/grid3-hrow-over.gif +0 -0
  112. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/grid3-special-col-bg.gif +0 -0
  113. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/grid3-special-col-sel-bg.gif +0 -0
  114. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/group-expand-sprite.gif +0 -0
  115. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/mso-hd.gif +0 -0
  116. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/page-first-disabled.gif +0 -0
  117. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/page-first.gif +0 -0
  118. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/page-last-disabled.gif +0 -0
  119. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/page-last.gif +0 -0
  120. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/page-next-disabled.gif +0 -0
  121. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/page-next.gif +0 -0
  122. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/page-prev-disabled.gif +0 -0
  123. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/page-prev.gif +0 -0
  124. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/refresh.gif +0 -0
  125. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/row-over.gif +0 -0
  126. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/row-sel.gif +0 -0
  127. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/sort_asc.gif +0 -0
  128. data/lipsiadmin_generators/backend/templates/images/ext/slate/grid/sort_desc.gif +0 -0
  129. data/lipsiadmin_generators/backend/templates/images/ext/slate/menu/checked.gif +0 -0
  130. data/lipsiadmin_generators/backend/templates/images/ext/slate/menu/group-checked.gif +0 -0
  131. data/lipsiadmin_generators/backend/templates/images/ext/slate/menu/item-over - Copy.gif +0 -0
  132. data/lipsiadmin_generators/backend/templates/images/ext/slate/menu/item-over.gif +0 -0
  133. data/lipsiadmin_generators/backend/templates/images/ext/slate/menu/menu-parent.gif +0 -0
  134. data/lipsiadmin_generators/backend/templates/images/ext/slate/menu/menu.gif +0 -0
  135. data/lipsiadmin_generators/backend/templates/images/ext/slate/menu/unchecked.gif +0 -0
  136. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/corners-sprite.gif +0 -0
  137. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/light-hd.gif +0 -0
  138. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/tool-sprite-tpl.gif +0 -0
  139. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/tool-sprites.gif +0 -0
  140. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/tools-sprites-trans.gif +0 -0
  141. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/top-bottom.gif +0 -0
  142. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/top-bottom.png +0 -0
  143. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/white-corners-sprite.gif +0 -0
  144. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/white-left-right.gif +0 -0
  145. data/lipsiadmin_generators/backend/templates/images/ext/slate/panel/white-top-bottom.gif +0 -0
  146. data/lipsiadmin_generators/backend/templates/images/ext/slate/progress/progress-bg.gif +0 -0
  147. data/lipsiadmin_generators/backend/templates/images/ext/slate/qtip/bg.gif +0 -0
  148. data/lipsiadmin_generators/backend/templates/images/ext/slate/qtip/close.gif +0 -0
  149. data/lipsiadmin_generators/backend/templates/images/ext/slate/qtip/tip-sprite.gif +0 -0
  150. data/lipsiadmin_generators/backend/templates/images/ext/slate/s.gif +0 -0
  151. data/lipsiadmin_generators/backend/templates/images/ext/slate/shared/glass-bg.gif +0 -0
  152. data/lipsiadmin_generators/backend/templates/images/ext/slate/shared/hd-sprite.gif +0 -0
  153. data/lipsiadmin_generators/backend/templates/images/ext/slate/shared/left-btn.gif +0 -0
  154. data/lipsiadmin_generators/backend/templates/images/ext/slate/shared/right-btn.gif +0 -0
  155. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/e-handle-dark.gif +0 -0
  156. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/e-handle.gif +0 -0
  157. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/ne-handle-dark.gif +0 -0
  158. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/ne-handle.gif +0 -0
  159. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/nw-handle-dark.gif +0 -0
  160. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/nw-handle.gif +0 -0
  161. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/s-handle-dark.gif +0 -0
  162. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/s-handle.gif +0 -0
  163. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/se-handle-dark.gif +0 -0
  164. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/square.gif +0 -0
  165. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/sw-handle-dark.gif +0 -0
  166. data/lipsiadmin_generators/backend/templates/images/ext/slate/sizer/sw-handle.gif +0 -0
  167. data/lipsiadmin_generators/backend/templates/images/ext/slate/slider/slider-bg.png +0 -0
  168. data/lipsiadmin_generators/backend/templates/images/ext/slate/slider/slider-thumb.png +0 -0
  169. data/lipsiadmin_generators/backend/templates/images/ext/slate/slider/slider-v-bg.png +0 -0
  170. data/lipsiadmin_generators/backend/templates/images/ext/slate/slider/slider-v-thumb.png +0 -0
  171. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/scroll-left.gif +0 -0
  172. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/scroll-right.gif +0 -0
  173. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/scroller-bg.gif +0 -0
  174. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tab-btm-inactive-left-bg.gif +0 -0
  175. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tab-btm-inactive-right-bg.gif +0 -0
  176. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tab-btm-left-bg.gif +0 -0
  177. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tab-btm-right-bg.gif +0 -0
  178. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tab-close.gif +0 -0
  179. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tab-strip-bg.gif +0 -0
  180. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tab-strip-bg.png +0 -0
  181. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tab-strip-btm-bg.gif +0 -0
  182. data/lipsiadmin_generators/backend/templates/images/ext/slate/tabs/tabs-sprite.gif +0 -0
  183. data/lipsiadmin_generators/backend/templates/images/ext/slate/toolbar/bg-menu.png +0 -0
  184. data/lipsiadmin_generators/backend/templates/images/ext/slate/toolbar/bg.gif +0 -0
  185. data/lipsiadmin_generators/backend/templates/images/ext/slate/toolbar/btn-arrow-light.gif +0 -0
  186. data/lipsiadmin_generators/backend/templates/images/ext/slate/toolbar/btn-arrow.gif +0 -0
  187. data/lipsiadmin_generators/backend/templates/images/ext/slate/toolbar/btn-over-bg.gif +0 -0
  188. data/lipsiadmin_generators/backend/templates/images/ext/slate/toolbar/gray-bg.gif +0 -0
  189. data/lipsiadmin_generators/backend/templates/images/ext/slate/toolbar/tb-bg.gif +0 -0
  190. data/lipsiadmin_generators/backend/templates/images/ext/slate/toolbar/tb-btn-sprite.gif +0 -0
  191. data/lipsiadmin_generators/backend/templates/images/ext/slate/tree/arrows.gif +0 -0
  192. data/lipsiadmin_generators/backend/templates/images/ext/slate/window/icon-error.gif +0 -0
  193. data/lipsiadmin_generators/backend/templates/images/ext/slate/window/icon-info.gif +0 -0
  194. data/lipsiadmin_generators/backend/templates/images/ext/slate/window/icon-question.gif +0 -0
  195. data/lipsiadmin_generators/backend/templates/images/ext/slate/window/icon-warning.gif +0 -0
  196. data/lipsiadmin_generators/backend/templates/images/ext/slate/window/left-corners.png +0 -0
  197. data/lipsiadmin_generators/backend/templates/images/ext/slate/window/left-right.png +0 -0
  198. data/lipsiadmin_generators/backend/templates/images/ext/slate/window/right-corners.png +0 -0
  199. data/lipsiadmin_generators/backend/templates/images/ext/slate/window/top-bottom.png +0 -0
  200. data/lipsiadmin_generators/backend/templates/stylesheets/backend-slate.css +0 -105
  201. data/lipsiadmin_generators/backend/templates/stylesheets/ext-slate.css +0 -241
data/CHANGELOG CHANGED
@@ -1,5 +1,44 @@
1
- 2009-05-11
2
- * Fiexed the attachment and attachments tags
1
+ 2009-06-05
2
+ * Dump to 5.0 Version
3
+ * Support to ExtJs 3.0
4
+ * Now we can browse with like "static" pages with back & next buttons of browsers [Ragunalth]
5
+ * Now we can call directly a page, usefull for do a manual refresh of a page but also for condivide links.
6
+ * Added a new method "un" for remove listners of extjs components
7
+ * Removed "l" method because we just have to_l for have literal json (ex: "function add(){...}".to_l)
8
+ * Removed unusued literals
9
+ * Refactored add method, now is possible to add components
10
+ * Renamed in ColumnModel add => add_column for conflict reason with add component
11
+ * Refactored Configuration (used for extjs)
12
+ * Fixed toolbar for add_buttons like "->" (ex: tbar.add_button :text => "->")
13
+ * Fixed a extra comma in attachment generator
14
+ * Fixed account grid generator
15
+ * Fixed attachment_table, now correctly include utility_scopes
16
+ * Fixed a little typo in ext controller component
17
+ * Maked ext columns compatible with extjs 3.0 and 2.0
18
+ * Added the possibility to add buttons with their menu
19
+ * Fixed Pdf generator now dude to limtis of previous version we don't put html to stdin but we made a tmp file
20
+ * Added Erb Templates in Pdf Generator
21
+ * Added mswin compatibility with Pdf Generator
22
+ * Fixed Ext DateTimeFiled with allowblank
23
+ * Removed the default allowBlank: true from Ext.form.DateTimeField
24
+ * Updated pdf mail builder according to new changes
25
+ * Removed from Controller Pdf Builder the layout for compatiblity with pdf mailer
26
+ * Changed simple_error_messages_for, now is localizable like default rails version
27
+ * Fixed path in in menu generation expecially when we use params
28
+ * Fixed a little issue when we regenerate locales for our models
29
+ * Fixed menu with empty urls and submenus
30
+ * Added a new option for column_model for render datetime to a date (:renderer => :time_to_date)
31
+ * Added a new option for column_model for render percentage (:renderer => :percentage)
32
+ * Fixed ext_date_select and ext_datetime_select to correctly render empty date(time) without the option :emptyToNow => true
33
+ * Fixed correctly the time in ext_datetime_select when :emptyToNow => true
34
+ * Change the box, now for render it (for uniformity reason) we need to use -box "My Box" do; some; end; instead of =box "My Box" ...
35
+ * Added AccountAccess caching, you can expire that using Lipsiadmin::AccountAccess::Base.cache[account.id] = nil
36
+ * Added Rake Tasks for start|stop|restart loops/background_workers
37
+ * Added handler :after => "myfn()" to open_form
38
+ * Added a new option to attachment_tag and attachments_tag for only upload files without manage the old ones
39
+ * Added the possiblity to personalize ttbar using only necessary buttons like ttbar [:edit, :delete] or [:add, :delete]
40
+ * Fixed a little bug in state_session generator
41
+ * Added few new images in backend
3
42
 
4
43
  2009-05-28
5
44
  * Refactored account_access now current_account (account logged) is aviable in our roles
@@ -56,7 +56,7 @@ module Lipsiadmin
56
56
 
57
57
  return allow && !deny
58
58
  end
59
-
59
+
60
60
  # Returns a helper to pass in a <tt>before_filter</tt> for check if
61
61
  # an account are: <tt>logged_in?</tt> and <tt>allowed?</tt>
62
62
  #
@@ -1,5 +1,6 @@
1
1
  module Lipsiadmin
2
2
  module AccessControl
3
+
3
4
  module Helper#:nodoc:
4
5
  def recognize_path(path)#:nodoc:
5
6
  case path
@@ -42,6 +43,8 @@ module Lipsiadmin
42
43
  # - Access to all actions EXCEPT <tt>details</tt> of controller "/backend/accounts"
43
44
  #
44
45
  class Base
46
+ @@cache = {}
47
+ cattr_accessor :cache
45
48
 
46
49
  class << self
47
50
 
@@ -58,13 +61,14 @@ module Lipsiadmin
58
61
  def roles
59
62
  @roles.nil? ? [] : @roles.collect(&:to_s)
60
63
  end
61
-
64
+
65
+ # Returns maps (allowed && denied actions) for the given account
62
66
  def maps_for(account)
63
- @mappers.collect { |m| m.call(account) }.
64
- reject { |m| !m.allowed? }
67
+ @@cache[account.id] ||= @mappers.collect { |m| m.call(account) }.
68
+ reject { |m| !m.allowed? }
69
+ @@cache[account.id]
65
70
  end
66
71
  end
67
-
68
72
  end
69
73
 
70
74
  class Mapper
@@ -178,20 +182,23 @@ module Lipsiadmin
178
182
  class Menu
179
183
  include Helper
180
184
  include ActionController::UrlWriter
181
- attr_reader :name, :options, :url, :items
185
+ attr_reader :name, :options, :items
182
186
 
183
187
  def initialize(name, path=nil, options={}, &block)#:nodoc:
184
188
  @name = name
189
+ @url = path
185
190
  @options = options
186
191
  @allowed = []
187
192
  @items = []
188
- if path
189
- @url = recognize_path(path)
190
- @allowed << { :controller => @url[:controller] } if path
191
- end
193
+ @allowed << { :controller => recognize_path(path)[:controller] } if @url
192
194
  yield self if block_given?
193
195
  end
194
196
 
197
+ # Return the url of this menu
198
+ def url
199
+ @url.is_a?(Hash) ? url_for(@url.merge(:only_path => true)) : @url
200
+ end
201
+
195
202
  # Add a new submenu to the menu
196
203
  def add(name, path=nil, options={}, &block)
197
204
  @items << Menu.new(name, path, options, &block)
@@ -215,12 +222,12 @@ module Lipsiadmin
215
222
 
216
223
  # Return ExtJs Config for this menu
217
224
  def config
218
- if @url.blank?
225
+ if @url.blank? && @items.empty?
219
226
  options = human_name
220
227
  else
221
228
  options = @options.merge(:text => human_name)
222
229
  options.merge!(:menu => @items.collect(&:config)) if @items.size > 0
223
- options.merge!(:handler => "function(){ Backend.app.load('#{url_for(@url.merge(:only_path => true))}') }".to_l)
230
+ options.merge!(:handler => "function(){ Backend.app.load('#{url}') }".to_l) if !@url.blank?
224
231
  end
225
232
  options
226
233
  end
@@ -105,7 +105,9 @@ module Lipsiadmin
105
105
  options[:mapping] ||= options[:dataIndex].to_s.downcase.gsub(/[^a-z0-9]+/, '_').
106
106
  gsub(/-+$/, '_').
107
107
  gsub(/^-+$/, '_')
108
-
108
+ # Now is necessary for our columns an ID
109
+ options[:id] = options[:mapping]
110
+
109
111
  @data << options
110
112
  end
111
113
 
@@ -125,8 +127,8 @@ module Lipsiadmin
125
127
  def store_fields
126
128
  @data.inject([]) do |fields, data|
127
129
  hash = { :name => data[:dataIndex], :mapping => data[:mapping] }
128
- hash.merge!(:type => data[:renderer]) if data[:renderer] &&
129
- (data[:renderer] == :date || data[:renderer] == :datetime)
130
+ hash.merge!(:type => data[:renderer]) if data[:renderer] &&
131
+ (data[:renderer] == :date || data[:renderer] == :datetime || data[:renderer] == :time_to_date)
130
132
  fields << hash
131
133
  fields
132
134
  end
@@ -47,10 +47,14 @@ module Lipsiadmin
47
47
  # path to the pd4ml jarfile
48
48
  jars_path = Lipsiadmin::Utils::PdfBuilder::JARS_PATH
49
49
 
50
- options[:landescape] ||= false
50
+ options[:landescape] = options[:landescape] ? "LANDESCAPE" : "PORTRAIT"
51
51
  options[:send_data] ||= !filename.blank?
52
+
53
+ # try to find erb extension
54
+ ext = File.exist?("#{RAILS_ROOT}/app/views/pdf/#{template}.html.erb") ? "erb" : "haml"
55
+
52
56
  # encode the template
53
- input = encode_entities(render(:template => "/pdf/#{template}.html.haml", :layout => "print"))
57
+ input = encode_entities(render(:template => "/pdf/#{template}.html.#{ext}"))
54
58
 
55
59
  # search for stylesheet links and make their paths absolute.
56
60
  input.gsub!('<link href="/javascripts', '<link href="' + RAILS_ROOT + '/public/javascripts')
@@ -60,12 +64,22 @@ module Lipsiadmin
60
64
  input.gsub!('src="/', 'src="' + RAILS_ROOT + '/public/')
61
65
  input.gsub!('url(','url('+RAILS_ROOT+'/public')
62
66
 
63
- cmd = "java -Xmx512m -Djava.awt.headless=true -cp #{jars_path}/pd4ml.jar:.:#{jars_path} Pd4Ruby '#{input}' 950 A4 #{options[:landescape]}"
64
-
65
- output = %x[cd #{Lipsiadmin::Utils::PdfBuilder::PD4RUBY_PATH} \n #{cmd}]
67
+ # write our temp file
68
+ t = Tempfile.new("pd4ml.html", "#{Rails.root}/tmp")
69
+ t.binmode
70
+ t.write(input)
71
+ t.flush
72
+
73
+ # build the command
74
+ class_path = "#{jars_path}/pd4ml.jar:.:#{jars_path}"
75
+ class_path = "\"#{jars_path}/pd4ml.jar\";\"#{jars_path}\"" if RUBY_PLATFORM =~ /mswin/
76
+ cmd = "cd #{Lipsiadmin::Utils::PdfBuilder::PD4RUBY_PATH} && java -Xmx512m -Djava.awt.headless=true -cp #{class_path} Pd4Ruby --file \"#{t.path}\" --width 950 --orientation #{options[:landescape]} 2>&1"
77
+
78
+ # grep the output
79
+ output = IO.popen(cmd) { |s| s.read }
66
80
 
67
81
  # raise error if process returned false (ie: a java error)
68
- raise PdfError, "An unknonwn error occurred while generating pdf: cd #{Lipsiadmin::Utils::PdfBuilder::PD4RUBY_PATH} && #{cmd}" if $?.success? === false
82
+ raise PdfError, "An unknonwn error occurred while generating pdf" if $?.exitstatus == 127
69
83
 
70
84
  # return raw pdf binary-stream
71
85
  if options[:send_data]
@@ -76,6 +90,8 @@ module Lipsiadmin
76
90
  erase_results
77
91
  output
78
92
  end
93
+ # ensure
94
+ # t.close
79
95
  end
80
96
 
81
97
  # Errors For PDF
@@ -20,7 +20,7 @@ module Lipsiadmin
20
20
  def redirect_parent_to(location)
21
21
  responds_to_parent do
22
22
  render :update do |page|
23
- page.load location, true
23
+ page.load location
24
24
  end
25
25
  end
26
26
  end
@@ -12,7 +12,6 @@ module Lipsiadmin
12
12
  # <tt>has_many_attachments</tt> can override/add styles/validations etc...
13
13
  #
14
14
  class AttachmentTable < ActiveRecord::Base
15
-
16
15
  def self.inherited(subclass)#:nodoc:
17
16
  super
18
17
  subclass.write_inheritable_attribute(:attachment_definitions, {}) if subclass.attachment_definitions.nil?
data/lib/lipsiadmin.rb CHANGED
@@ -10,6 +10,7 @@ require 'view/helpers/backend_helper'
10
10
  require 'view/helpers/frontend_helper'
11
11
  require 'view/helpers/view_helper'
12
12
  require 'view/helpers/ext_helper'
13
+ require 'view/helpers/pdf_helper'
13
14
  require 'controller/ext'
14
15
  require 'controller/pdf_builder'
15
16
  require 'controller/responds_to_parent'
@@ -41,6 +42,7 @@ ActionView::Base.class_eval do
41
42
  include Lipsiadmin::View::Helpers::FormTagHelper
42
43
  include Lipsiadmin::View::Helpers::DateHelper
43
44
  include Lipsiadmin::View::Helpers::CountrySelectHelper
45
+ include Lipsiadmin::View::Helpers::PdfHelper
44
46
  end
45
47
 
46
48
  ActionView::Helpers::FormBuilder.send(:include, Lipsiadmin::View::Helpers::FormBuilder)
@@ -57,6 +59,11 @@ ActionController::Base.class_eval do
57
59
  include Lipsiadmin::AccessControl::Authentication
58
60
  end
59
61
 
62
+ ActionMailer::Base.class_eval do
63
+ include Lipsiadmin::Mailer::PdfBuilder
64
+ include Lipsiadmin::View::Helpers::PdfHelper
65
+ end
66
+
60
67
  # For Attachments
61
68
  File.send(:include, Lipsiadmin::Attachment::Upfile)
62
69
 
@@ -52,11 +52,13 @@ module Lipsiadmin
52
52
  # path to the pd4ml jarfile
53
53
  jars_path = Lipsiadmin::Utils::PdfBuilder::JARS_PATH
54
54
 
55
- # set the landescape
56
- landescape = (body[:landescape].delete || false)
57
-
55
+ body[:landescape] = body[:landescape] ? "LANDESCAPE" : "PORTRAIT"
56
+
57
+ # try to find erb extension
58
+ ext = File.exist?("#{RAILS_ROOT}/app/views/pdf/#{template}.html.erb") ? "erb" : "haml"
59
+
58
60
  # encode the template
59
- input = encode_entities(render_message("/pdf/#{template}.html.haml", body))
61
+ input = encode_entities(render_message("/pdf/#{template}.html.#{ext}", body))
60
62
 
61
63
  # search for stylesheet links and make their paths absolute.
62
64
  input.gsub!('<link href="/javascripts', '<link href="' + RAILS_ROOT + '/public/javascripts')
@@ -66,15 +68,27 @@ module Lipsiadmin
66
68
  input.gsub!('src="/', 'src="' + RAILS_ROOT + '/public/')
67
69
  input.gsub!('url(','url('+RAILS_ROOT+'/public')
68
70
 
69
- cmd = "java -Xmx512m -Djava.awt.headless=true -cp #{jars_path}/pd4ml.jar:.:#{jars_path} Pd4Ruby '#{input}' 950 A4 #{landescape}"
71
+ # write our temp file
72
+ t = Tempfile.new("pd4ml.html", "#{Rails.root}/tmp")
73
+ t.binmode
74
+ t.write(input)
75
+ t.flush
76
+
77
+ # build the command
78
+ class_path = "#{jars_path}/pd4ml.jar:.:#{jars_path}"
79
+ class_path = "\"#{jars_path}/pd4ml.jar\";\"#{jars_path}\"" if RUBY_PLATFORM =~ /mswin/
80
+ cmd = "cd #{Lipsiadmin::Utils::PdfBuilder::PD4RUBY_PATH} && java -Xmx512m -Djava.awt.headless=true -cp #{class_path} Pd4Ruby --file \"#{t.path}\" --width 950 --orientation #{body[:landescape]} 2>&1"
70
81
 
71
- output = %x[cd #{Lipsiadmin::Utils::PdfBuilder::PD4RUBY_PATH} \n #{cmd}]
82
+ # grep the output
83
+ output = IO.popen(cmd) { |s| s.read }
72
84
 
73
85
  # raise error if process returned false (ie: a java error)
74
- raise PdfError, "An unknonwn error occurred while generating pdf: cd #{Lipsiadmin::Utils::PdfBuilder::PD4RUBY_PATH} && #{cmd}" if $?.success? === false
86
+ raise PdfError, "An unknonwn error occurred while generating pdf" if $?.exitstatus == 127
75
87
 
76
- #return raw pdf binary-stream
77
- output
88
+ # return raw pdf binary-stream
89
+ output
90
+ ensure
91
+ t.close
78
92
  end
79
93
  end
80
94
 
data/lib/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Lipsiadmin
2
2
  module VERSION #:nodoc:
3
- MAJOR = 4
4
- MINOR = 1
5
- TINY = 8
3
+ MAJOR = 5
4
+ MINOR = 0
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -4,17 +4,49 @@ module Lipsiadmin
4
4
  module BackendHelper
5
5
  # This method work like builtin Rails error_message_for but use an Ext.Message.show({..})
6
6
  def simple_error_messages_for(*params)
7
- options = params.last.is_a?(Hash) ? params.pop.symbolize_keys : {}
8
- objects = params.collect {|object_name| instance_variable_get("@#{object_name}") }.compact
9
- count = objects.inject(0) {|sum, object| sum + object.errors.count }
7
+ options = params.extract_options!.symbolize_keys
8
+
9
+ if object = options.delete(:object)
10
+ objects = [object].flatten
11
+ else
12
+ objects = params.collect {|object_name| instance_variable_get("@#{object_name}") }.compact
13
+ end
14
+
15
+ count = objects.inject(0) {|sum, object| sum + object.errors.count }
10
16
  unless count.zero?
11
- error_messages = objects.map {|object| object.errors.full_messages.map {|msg| "<li>#{msg}</li>" } }
12
- return content_tag(:script, "Ext.Msg.show({
13
- title:Backend.locale.messages.alert.title,
14
- msg: '<ul>#{escape_javascript(error_messages.join)}</ul>',
15
- buttons: Ext.Msg.OK,
16
- minWidth: 400
17
- });", :type => Mime::JS)
17
+ html = {}
18
+ [:id, :class].each do |key|
19
+ if options.include?(key)
20
+ value = options[key]
21
+ html[key] = value unless value.blank?
22
+ else
23
+ html[key] = 'errorExplanation'
24
+ end
25
+ end
26
+ options[:object_name] ||= params.first
27
+
28
+ I18n.with_options :locale => options[:locale], :scope => [:activerecord, :errors, :template] do |locale|
29
+ header_message = if options.include?(:header_message)
30
+ options[:header_message]
31
+ else
32
+ object_name = options[:object_name].to_s.gsub('_', ' ')
33
+ object_name = I18n.t(object_name, :default => object_name, :scope => [:activerecord, :models], :count => 1)
34
+ locale.t :header, :count => count, :model => object_name
35
+ end
36
+ message = options.include?(:message) ? options[:message] : locale.t(:body)
37
+ error_messages = objects.sum {|object| object.errors.full_messages.map {|msg| content_tag(:li, ERB::Util.html_escape(msg)) } }.join
38
+
39
+ contents = ''
40
+ contents << content_tag(:p, message) unless message.blank?
41
+ contents << content_tag(:ul, error_messages, :class => :list)
42
+
43
+ content_tag(:script, "Ext.Msg.show({
44
+ title: '#{header_message}',
45
+ msg: '<ul>#{contents}</ul>',
46
+ buttons: Ext.Msg.OK,
47
+ minWidth: 400
48
+ });", :type => Mime::JS)
49
+ end
18
50
  else
19
51
  ''
20
52
  end
@@ -162,7 +194,8 @@ module Lipsiadmin
162
194
  #
163
195
  # Options can be one of the following:
164
196
  #
165
- # <tt>:image</tt>:: Indicate if the attachments are ONLY images.
197
+ # <tt>:image</tt>:: Indicate if the attachments are ONLY images.
198
+ # <tt>:only_upload</tt>:: Indicate that is not necessary manage the old attachments.
166
199
  #
167
200
  # Examples:
168
201
  #
@@ -180,40 +213,43 @@ module Lipsiadmin
180
213
  variable = instance_variable_get("@#{object_name}")
181
214
  html = []
182
215
  html << '<!-- Generated from Lipsiadmin -->'
183
- html << '<ul id="' + "#{method}-order" + '" class="label">'
184
-
185
- if attachment = variable.send(method)
186
- # Create first the remove link
187
- remove_link = link_to_remote(tl(:remove), :url => "/backend/attachments/#{attachment.id}",
188
- :method => :delete,
189
- :success => "$('#{method}_#{attachment.id}').remove();")
190
-
191
- if options[:image]
192
- fstyle = "float:left;margin:5px;margin-left:0px;"
193
- fclass = "box-image"
194
- ftag = '<div>' + image_tag(attachment.url(:thumb)) + '</div>'
195
- ftag += '<div style="text-align:center;padding:5px;cursor:pointer">'
196
- ftag += ' ' + remove_link
197
- ftag += '</div>'
198
- else
199
- fstyle = "padding:5px;border-bottom:1px solid #DDE7F5;"
200
- fclass = "box-file"
201
- ftag = '<div style="float:left;cursor:pointer">'
202
- ftag += ' ' + link_to(attachment.attached_file_name, attachment.url) + ' ' + number_to_human_size(attachment.attached_file_size)
203
- ftag += '</div>'
204
- ftag += '<div style="float:right;cursor:pointer">'
205
- ftag += ' ' + remove_link
206
- ftag += '</div>'
207
- ftag += '<br style="clear:both" />'
208
- end
209
-
210
- html << '<li id="' + "#{method}_#{attachment.id}" + '" class="' + fclass + '" style="' + fstyle + '">'
211
- html << ' ' + ftag
212
- html << '</li>'
213
- end # End of Loop
214
-
215
- html << '</ul>'
216
- html << '<br style="clear:both" />'
216
+
217
+ unless options[:only_upload]
218
+ html << '<ul id="' + "#{method}-order" + '" class="label">'
219
+
220
+ if attachment = variable.send(method)
221
+ # Create first the remove link
222
+ remove_link = link_to_remote(tl(:remove), :url => "/backend/attachments/#{attachment.id}",
223
+ :method => :delete,
224
+ :success => "$('#{method}_#{attachment.id}').remove();")
225
+
226
+ if options[:image]
227
+ fstyle = "float:left;margin:5px;margin-left:0px;"
228
+ fclass = "box-image"
229
+ ftag = '<div>' + image_tag(attachment.url(:thumb)) + '</div>'
230
+ ftag += '<div style="text-align:center;padding:5px;cursor:pointer">'
231
+ ftag += ' ' + remove_link
232
+ ftag += '</div>'
233
+ else
234
+ fstyle = "padding:5px;border-bottom:1px solid #DDE7F5;"
235
+ fclass = "box-file"
236
+ ftag = '<div style="float:left;cursor:pointer">'
237
+ ftag += ' ' + link_to(attachment.attached_file_name, attachment.url) + ' ' + number_to_human_size(attachment.attached_file_size)
238
+ ftag += '</div>'
239
+ ftag += '<div style="float:right;cursor:pointer">'
240
+ ftag += ' ' + remove_link
241
+ ftag += '</div>'
242
+ ftag += '<br style="clear:both" />'
243
+ end
244
+
245
+ html << '<li id="' + "#{method}_#{attachment.id}" + '" class="' + fclass + '" style="' + fstyle + '">'
246
+ html << ' ' + ftag
247
+ html << '</li>'
248
+ end # End of Loop
249
+
250
+ html << '</ul>'
251
+ html << '<br style="clear:both" />'
252
+ end
217
253
 
218
254
  flbl = options[:image] ? :upload_image : :upload_file
219
255
  html << '<div class="label-title">' + tl(flbl) + '</div>'
@@ -231,8 +267,9 @@ module Lipsiadmin
231
267
  #
232
268
  # Options can be one of the following:
233
269
  #
234
- # <tt>:image</tt>:: Indicate if the attachments are ONLY images.
235
- # <tt>:order</tt>:: Indicate if user can order files.
270
+ # <tt>:image</tt>:: Indicate if the attachments are ONLY images.
271
+ # <tt>:only_upload</tt>:: Indicate that is not necessary manage the old attachments.
272
+ # <tt>:order</tt>:: Indicate if user can order files.
236
273
  #
237
274
  # Examples:
238
275
  #
@@ -251,50 +288,53 @@ module Lipsiadmin
251
288
  variable = instance_variable_get("@#{object_name}")
252
289
  html = []
253
290
  html << '<!-- Generated from Lipsiadmin -->'
254
- html << '<ul id="' + "#{method}-order" + '" class="label">'
291
+ unless options[:only_upload]
292
+ html << '<ul id="' + "#{method}-order" + '" class="label">'
293
+
294
+ for attachment in variable.send(method).all(:order => :position)
295
+ # Create first the remove link
296
+ remove_link = link_to_remote(tl(:remove), :url => "/backend/attachments/#{attachment.id}",
297
+ :method => :delete,
298
+ :success => "$('#{method}_#{attachment.id}').remove();")
299
+
300
+ if options[:image]
301
+ fstyle = "float:left;margin:5px;margin-left:0px;"
302
+ fstyle += "cursor:move;" if options[:order]
303
+ fclass = "box-image"
304
+ ftag = '<div>' + image_tag(attachment.url(:thumb)) + '</div>'
305
+ ftag += '<div style="text-align:center;padding:5px;cursor:pointer">'
306
+ ftag += ' ' + remove_link
307
+ ftag += '</div>'
308
+ else
309
+ fstyle = "padding:5px;border-bottom:1px solid #DDE7F5;"
310
+ fstyle += "cursor:move;" if options[:order]
311
+ fclass = "box-file"
312
+ ftag = '<div style="float:left;cursor:pointer">'
313
+ ftag += ' ' + link_to(attachment.attached_file_name, attachment.url) + ' ' + number_to_human_size(attachment.attached_file_size)
314
+ ftag += '</div>'
315
+ ftag += '<div style="float:right;cursor:pointer">'
316
+ ftag += ' ' + remove_link
317
+ ftag += '</div>'
318
+ ftag += '<br style="clear:both" />'
319
+ end
320
+
321
+ html << '<li id="' + "#{method}_#{attachment.id}" + '" class="' + fclass + '" style="' + fstyle + '">'
322
+ html << ' ' + ftag
323
+ html << '</li>'
324
+ end # End of Loop
325
+
326
+ html << '</ul>'
327
+ html << '<br style="clear:both" />'
328
+
255
329
 
256
- for attachment in variable.send(method).all(:order => :position)
257
- # Create first the remove link
258
- remove_link = link_to_remote(tl(:remove), :url => "/backend/attachments/#{attachment.id}",
259
- :method => :delete,
260
- :success => "$('#{method}_#{attachment.id}').remove();")
261
-
262
- if options[:image]
263
- fstyle = "float:left;margin:5px;margin-left:0px;"
264
- fstyle += "cursor:move;" if options[:order]
265
- fclass = "box-image"
266
- ftag = '<div>' + image_tag(attachment.url(:thumb)) + '</div>'
267
- ftag += '<div style="text-align:center;padding:5px;cursor:pointer">'
268
- ftag += ' ' + remove_link
269
- ftag += '</div>'
270
- else
271
- fstyle = "padding:5px;border-bottom:1px solid #DDE7F5;"
272
- fstyle += "cursor:move;" if options[:order]
273
- fclass = "box-file"
274
- ftag = '<div style="float:left;cursor:pointer">'
275
- ftag += ' ' + link_to(attachment.attached_file_name, attachment.url) + ' ' + number_to_human_size(attachment.attached_file_size)
276
- ftag += '</div>'
277
- ftag += '<div style="float:right;cursor:pointer">'
278
- ftag += ' ' + remove_link
279
- ftag += '</div>'
280
- ftag += '<br style="clear:both" />'
330
+ if options[:order]
331
+ constraint = options[:image] ? "horizontal" : "vertical"
332
+ html << '<div id="' + "#{method}-message" + '" style="padding:5px">&nbsp;</div>'
333
+ html << sortable_element("#{method}-order", :url => "/backend/attachments/order", :update => "#{method}-message", :constraint => constraint,
334
+ :complete => visual_effect(:highlight, "#{method}-message", :duration => 0.5))
281
335
  end
282
-
283
- html << '<li id="' + "#{method}_#{attachment.id}" + '" class="' + fclass + '" style="' + fstyle + '">'
284
- html << ' ' + ftag
285
- html << '</li>'
286
- end # End of Loop
287
-
288
- html << '</ul>'
289
- html << '<br style="clear:both" />'
290
-
291
- if options[:order]
292
- constraint = options[:image] ? "horizontal" : "vertical"
293
- html << '<div id="' + "#{method}-message" + '" style="padding:5px">&nbsp;</div>'
294
- html << sortable_element("#{method}-order", :url => "/backend/attachments/order", :update => "#{method}-message", :constraint => constraint,
295
- :complete => visual_effect(:highlight, "#{method}-message", :duration => 0.5))
296
336
  end
297
-
337
+
298
338
  flbl = options[:image] ? :upload_images : :upload_files
299
339
  html << '<div class="label-title">'+ tl(flbl) +'</div>'
300
340
  html << '<table>'
@@ -411,7 +451,8 @@ module Lipsiadmin
411
451
  # The third argument are callbacks that may be specified:
412
452
  #
413
453
  # <tt>:before</tt>:: Called before request is initiated.
414
- # <tt>:update</tt>:: Called after user press +save+ button.
454
+ # <tt>:after</tt>:: Called after request is initiated.
455
+ # <tt>:on_save</tt>:: Called after user press +save+ button.
415
456
  # This call are performed in an handler where
416
457
  # you have access to one variables:
417
458
  # <tt>:win</tt>:: Backend.window
@@ -427,7 +468,7 @@ module Lipsiadmin
427
468
  # # }
428
469
  # # }).show();
429
470
  # # return false;" href="#">Edit Post</a>
430
- # open_form "Edit Post", "/backend/posts/'+$('comment_post_id').value+'/edit", :update => "someFn();"
471
+ # open_form "Edit Post", "/backend/posts/'+$('comment_post_id').value+'/edit", :update => "someFn(win);"
431
472
  #
432
473
  def open_form(text, url, options={})
433
474
  options[:before] = options[:before] + ";" if options[:before]
@@ -437,11 +478,10 @@ module Lipsiadmin
437
478
  url: '#{url}',
438
479
  form: true,
439
480
  listeners: {
440
- saved: function(win){
441
- #{options[:update]}
442
- }
481
+ saved: function(win){ #{options[:on_save]} },
482
+ close: function(panel){ #{options[:after]} }
443
483
  }
444
- }).show()
484
+ }).show();
445
485
  JAVASCRIPT
446
486
  link_to_function(text, javascript.gsub(/\n/, " "))
447
487
  end
@@ -464,7 +504,7 @@ module Lipsiadmin
464
504
  #
465
505
  # Examples:
466
506
  #
467
- # =box "My Title", "My Subtitle", :submit => true, :collapsible => true, :style => "padding:none", :start => :close do
507
+ # -box "My Title", "My Subtitle", :submit => true, :collapsible => true, :style => "padding:none", :start => :close do
468
508
  # my content
469
509
  #
470
510
  # Defaults:
@@ -474,9 +514,9 @@ module Lipsiadmin
474
514
  # * :start => :close
475
515
  #
476
516
  def box(title=nil, subtitle=nil, options={}, &block)
477
- options[:style] ||= "width:99%;"
517
+ options[:style] ||= "width:100%;"
478
518
  options[:start] ||= :open
479
- return <<-HTML
519
+ concat <<-HTML
480
520
  <div class="x-box" style="#{options[:style]}">
481
521
  <div class="x-box-tl">
482
522
  <div class="x-box-tr">