rich_table_component 0.0.1 → 0.0.2

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 (213) hide show
  1. data/README.md +156 -139
  2. data/app/helpers/component_helper.rb +176 -0
  3. data/app/helpers/documents_helper.rb +22 -0
  4. data/app/helpers/menus_helper.rb +182 -0
  5. data/app/helpers/paragraph_helper.rb +57 -0
  6. data/app/helpers/translations_helper.rb +9 -0
  7. data/app/views/application/_document_fields.html.haml +20 -0
  8. data/app/views/application/_edit.html.haml +11 -0
  9. data/app/views/application/_new.html.haml +11 -0
  10. data/app/views/application/access_denied.js.erb +5 -0
  11. data/app/views/application/create.js.erb +19 -0
  12. data/app/views/application/destroy.js.erb +9 -0
  13. data/app/views/application/destroy_fail.js.erb +2 -0
  14. data/app/views/application/edit.html.haml +8 -0
  15. data/app/views/application/edit.js.erb +28 -0
  16. data/app/views/application/index.js.erb +7 -0
  17. data/app/views/application/index.pdf.haml +87 -0
  18. data/app/views/application/index.xls.haml +64 -0
  19. data/app/views/application/new.html.haml +7 -0
  20. data/app/views/application/new.js.erb +23 -0
  21. data/app/views/application/recapitulation.js.erb +12 -0
  22. data/app/views/application/recapitulation.pdf.haml +68 -0
  23. data/app/views/application/recapitulation.xls.haml +41 -0
  24. data/app/views/application/session_expired.js.erb +5 -0
  25. data/app/views/application/show.js.erb +29 -0
  26. data/app/views/application/update.js.erb +15 -0
  27. data/app/views/layouts/print/pdf.html.haml +8 -0
  28. data/app/views/layouts/print/recapitulation.html.haml +8 -0
  29. data/app/views/rich_table_component/_notification.html.haml +9 -0
  30. data/app/views/rich_table_component/_pagination.html.haml +11 -0
  31. data/app/views/rich_table_component/_recapitulation_matrix_groups.html.haml +42 -0
  32. data/app/views/rich_table_component/component/_ajax_upload.html.haml +6 -0
  33. data/app/views/rich_table_component/component/_ajax_upload_result.html.haml +2 -0
  34. data/app/views/rich_table_component/component/_breadcrumbs.html.haml +25 -0
  35. data/app/views/rich_table_component/component/_breadcrumbs_dropdown.html.haml +18 -0
  36. data/app/views/rich_table_component/component/_tabbed.html.haml +5 -0
  37. data/app/views/rich_table_component/rtc/_advanced_search.html.haml +95 -0
  38. data/app/views/rich_table_component/rtc/_advanced_search_recapitulation.html.haml +90 -0
  39. data/app/views/rich_table_component/rtc/_component.html.haml +62 -0
  40. data/app/views/rich_table_component/rtc/_component_actions.html.haml +69 -0
  41. data/app/views/rich_table_component/rtc/_component_content.html.haml +37 -0
  42. data/app/views/rich_table_component/rtc/_component_title.html.haml +37 -0
  43. data/app/views/rich_table_component/rtc/_content.html.haml +22 -0
  44. data/app/views/rich_table_component/rtc/_footer.html.haml +4 -0
  45. data/app/views/rich_table_component/rtc/_header.html.haml +56 -0
  46. data/app/views/rich_table_component/rtc/_recapitulation_matrix.html.haml +25 -0
  47. data/app/views/rich_table_component/rtc/_recapitulation_matrix_form.html.haml +47 -0
  48. data/app/views/rich_table_component/rtc/_table.html.haml +22 -0
  49. data/lib/pagination_list_link_renderer.rb +51 -0
  50. data/lib/rich_table_component/version.rb +1 -1
  51. data/lib/rich_table_component.rb +0 -8
  52. data/rich_table_component.gemspec +0 -1
  53. data/vendor/assets/images/icons/file_extension/file_extension_.png +0 -0
  54. data/vendor/assets/images/icons/file_extension/file_extension_3gp.png +0 -0
  55. data/vendor/assets/images/icons/file_extension/file_extension_7z.png +0 -0
  56. data/vendor/assets/images/icons/file_extension/file_extension_ace.png +0 -0
  57. data/vendor/assets/images/icons/file_extension/file_extension_ai.png +0 -0
  58. data/vendor/assets/images/icons/file_extension/file_extension_aif.png +0 -0
  59. data/vendor/assets/images/icons/file_extension/file_extension_aiff.png +0 -0
  60. data/vendor/assets/images/icons/file_extension/file_extension_amr.png +0 -0
  61. data/vendor/assets/images/icons/file_extension/file_extension_asf.png +0 -0
  62. data/vendor/assets/images/icons/file_extension/file_extension_asx.png +0 -0
  63. data/vendor/assets/images/icons/file_extension/file_extension_bat.png +0 -0
  64. data/vendor/assets/images/icons/file_extension/file_extension_bin.png +0 -0
  65. data/vendor/assets/images/icons/file_extension/file_extension_bmp.png +0 -0
  66. data/vendor/assets/images/icons/file_extension/file_extension_bup.png +0 -0
  67. data/vendor/assets/images/icons/file_extension/file_extension_cab.png +0 -0
  68. data/vendor/assets/images/icons/file_extension/file_extension_cbr.png +0 -0
  69. data/vendor/assets/images/icons/file_extension/file_extension_cda.png +0 -0
  70. data/vendor/assets/images/icons/file_extension/file_extension_cdl.png +0 -0
  71. data/vendor/assets/images/icons/file_extension/file_extension_cdr.png +0 -0
  72. data/vendor/assets/images/icons/file_extension/file_extension_chm.png +0 -0
  73. data/vendor/assets/images/icons/file_extension/file_extension_dat.png +0 -0
  74. data/vendor/assets/images/icons/file_extension/file_extension_divx.png +0 -0
  75. data/vendor/assets/images/icons/file_extension/file_extension_dll.png +0 -0
  76. data/vendor/assets/images/icons/file_extension/file_extension_dmg.png +0 -0
  77. data/vendor/assets/images/icons/file_extension/file_extension_doc.png +0 -0
  78. data/vendor/assets/images/icons/file_extension/file_extension_dss.png +0 -0
  79. data/vendor/assets/images/icons/file_extension/file_extension_dvf.png +0 -0
  80. data/vendor/assets/images/icons/file_extension/file_extension_dwg.png +0 -0
  81. data/vendor/assets/images/icons/file_extension/file_extension_eml.png +0 -0
  82. data/vendor/assets/images/icons/file_extension/file_extension_eps.png +0 -0
  83. data/vendor/assets/images/icons/file_extension/file_extension_exe.png +0 -0
  84. data/vendor/assets/images/icons/file_extension/file_extension_fla.png +0 -0
  85. data/vendor/assets/images/icons/file_extension/file_extension_flv.png +0 -0
  86. data/vendor/assets/images/icons/file_extension/file_extension_gif.png +0 -0
  87. data/vendor/assets/images/icons/file_extension/file_extension_gz.png +0 -0
  88. data/vendor/assets/images/icons/file_extension/file_extension_hqx.png +0 -0
  89. data/vendor/assets/images/icons/file_extension/file_extension_htm.png +0 -0
  90. data/vendor/assets/images/icons/file_extension/file_extension_html.png +0 -0
  91. data/vendor/assets/images/icons/file_extension/file_extension_ifo.png +0 -0
  92. data/vendor/assets/images/icons/file_extension/file_extension_indd.png +0 -0
  93. data/vendor/assets/images/icons/file_extension/file_extension_iso.png +0 -0
  94. data/vendor/assets/images/icons/file_extension/file_extension_jar.png +0 -0
  95. data/vendor/assets/images/icons/file_extension/file_extension_jpeg.png +0 -0
  96. data/vendor/assets/images/icons/file_extension/file_extension_jpg.png +0 -0
  97. data/vendor/assets/images/icons/file_extension/file_extension_lnk.png +0 -0
  98. data/vendor/assets/images/icons/file_extension/file_extension_log.png +0 -0
  99. data/vendor/assets/images/icons/file_extension/file_extension_m4a.png +0 -0
  100. data/vendor/assets/images/icons/file_extension/file_extension_m4b.png +0 -0
  101. data/vendor/assets/images/icons/file_extension/file_extension_m4p.png +0 -0
  102. data/vendor/assets/images/icons/file_extension/file_extension_m4v.png +0 -0
  103. data/vendor/assets/images/icons/file_extension/file_extension_mcd.png +0 -0
  104. data/vendor/assets/images/icons/file_extension/file_extension_mdb.png +0 -0
  105. data/vendor/assets/images/icons/file_extension/file_extension_mid.png +0 -0
  106. data/vendor/assets/images/icons/file_extension/file_extension_mov.png +0 -0
  107. data/vendor/assets/images/icons/file_extension/file_extension_mp2.png +0 -0
  108. data/vendor/assets/images/icons/file_extension/file_extension_mp4.png +0 -0
  109. data/vendor/assets/images/icons/file_extension/file_extension_mpeg.png +0 -0
  110. data/vendor/assets/images/icons/file_extension/file_extension_mpg.png +0 -0
  111. data/vendor/assets/images/icons/file_extension/file_extension_msi.png +0 -0
  112. data/vendor/assets/images/icons/file_extension/file_extension_mswmm.png +0 -0
  113. data/vendor/assets/images/icons/file_extension/file_extension_ogg.png +0 -0
  114. data/vendor/assets/images/icons/file_extension/file_extension_pdf.png +0 -0
  115. data/vendor/assets/images/icons/file_extension/file_extension_png.png +0 -0
  116. data/vendor/assets/images/icons/file_extension/file_extension_pps.png +0 -0
  117. data/vendor/assets/images/icons/file_extension/file_extension_ppt.png +0 -0
  118. data/vendor/assets/images/icons/file_extension/file_extension_ps.png +0 -0
  119. data/vendor/assets/images/icons/file_extension/file_extension_psd.png +0 -0
  120. data/vendor/assets/images/icons/file_extension/file_extension_pst.png +0 -0
  121. data/vendor/assets/images/icons/file_extension/file_extension_ptb.png +0 -0
  122. data/vendor/assets/images/icons/file_extension/file_extension_pub.png +0 -0
  123. data/vendor/assets/images/icons/file_extension/file_extension_qbb.png +0 -0
  124. data/vendor/assets/images/icons/file_extension/file_extension_qbw.png +0 -0
  125. data/vendor/assets/images/icons/file_extension/file_extension_qxd.png +0 -0
  126. data/vendor/assets/images/icons/file_extension/file_extension_ram.png +0 -0
  127. data/vendor/assets/images/icons/file_extension/file_extension_rar.png +0 -0
  128. data/vendor/assets/images/icons/file_extension/file_extension_rm.png +0 -0
  129. data/vendor/assets/images/icons/file_extension/file_extension_rmvb.png +0 -0
  130. data/vendor/assets/images/icons/file_extension/file_extension_rtf.png +0 -0
  131. data/vendor/assets/images/icons/file_extension/file_extension_sea.png +0 -0
  132. data/vendor/assets/images/icons/file_extension/file_extension_ses.png +0 -0
  133. data/vendor/assets/images/icons/file_extension/file_extension_sit.png +0 -0
  134. data/vendor/assets/images/icons/file_extension/file_extension_sitx.png +0 -0
  135. data/vendor/assets/images/icons/file_extension/file_extension_ss.png +0 -0
  136. data/vendor/assets/images/icons/file_extension/file_extension_swf.png +0 -0
  137. data/vendor/assets/images/icons/file_extension/file_extension_tgz.png +0 -0
  138. data/vendor/assets/images/icons/file_extension/file_extension_thm.png +0 -0
  139. data/vendor/assets/images/icons/file_extension/file_extension_tif.png +0 -0
  140. data/vendor/assets/images/icons/file_extension/file_extension_tmp.png +0 -0
  141. data/vendor/assets/images/icons/file_extension/file_extension_torrent.png +0 -0
  142. data/vendor/assets/images/icons/file_extension/file_extension_ttf.png +0 -0
  143. data/vendor/assets/images/icons/file_extension/file_extension_txt.png +0 -0
  144. data/vendor/assets/images/icons/file_extension/file_extension_vcd.png +0 -0
  145. data/vendor/assets/images/icons/file_extension/file_extension_vob.png +0 -0
  146. data/vendor/assets/images/icons/file_extension/file_extension_wav.png +0 -0
  147. data/vendor/assets/images/icons/file_extension/file_extension_wma.png +0 -0
  148. data/vendor/assets/images/icons/file_extension/file_extension_wmv.png +0 -0
  149. data/vendor/assets/images/icons/file_extension/file_extension_wps.png +0 -0
  150. data/vendor/assets/images/icons/file_extension/file_extension_xls.png +0 -0
  151. data/vendor/assets/images/icons/file_extension/file_extension_xpi.png +0 -0
  152. data/vendor/assets/images/icons/file_extension/file_extension_zip.png +0 -0
  153. data/vendor/assets/images/loading_image.gif +0 -0
  154. data/vendor/assets/images/pbar-ani.gif +0 -0
  155. data/vendor/assets/javascripts/admin/starqle.grid.js +708 -0
  156. data/vendor/assets/javascripts/admin/starqle.ui.jquery.js +927 -0
  157. data/vendor/assets/javascripts/ckeditor/config.js +112 -0
  158. data/vendor/assets/javascripts/jquery-ui-1.8.13.custom.min.js +445 -0
  159. data/vendor/assets/javascripts/jquery.fileupload-ui.js +533 -0
  160. data/vendor/assets/javascripts/jquery.fileupload.js +975 -0
  161. data/vendor/assets/javascripts/jquery.tmpl.min.js +1 -0
  162. data/vendor/assets/javascripts/jquery.tokeninput.js +860 -0
  163. data/vendor/assets/javascripts/nested_attribute_action.js +19 -0
  164. data/vendor/assets/javascripts/rich_table_component.js +51 -0
  165. data/vendor/assets/stylesheets/fontfaces/england_hand_db/Freeware License.txt +5 -0
  166. data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.eot +0 -0
  167. data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.svg +146 -0
  168. data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.ttf +0 -0
  169. data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.woff +0 -0
  170. data/vendor/assets/stylesheets/fontfaces/england_hand_db/stylesheet.css +16 -0
  171. data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.eot +0 -0
  172. data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.svg +249 -0
  173. data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.ttf +0 -0
  174. data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.woff +0 -0
  175. data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.eot +0 -0
  176. data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.svg +249 -0
  177. data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.ttf +0 -0
  178. data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.woff +0 -0
  179. data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.eot +0 -0
  180. data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.svg +249 -0
  181. data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.ttf +0 -0
  182. data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.woff +0 -0
  183. data/vendor/assets/stylesheets/partial/_base_functions.sass +101 -0
  184. data/vendor/assets/stylesheets/partial/_base_variables.sass +76 -0
  185. data/vendor/assets/stylesheets/partial/_form.sass +57 -0
  186. data/vendor/assets/stylesheets/partial/_grid.css +374 -0
  187. data/vendor/assets/stylesheets/partial/_notification.sass +33 -0
  188. data/vendor/assets/stylesheets/partial/_position.sass +122 -0
  189. data/vendor/assets/stylesheets/partial/_starqle.ui.grid.sass +495 -0
  190. data/vendor/assets/stylesheets/partial/_style.sass +674 -0
  191. data/vendor/assets/stylesheets/partial/_tabbed.sass +33 -0
  192. data/vendor/assets/stylesheets/partial/_user_component.sass +2 -0
  193. data/vendor/assets/stylesheets/rich_table_component/_custom.sass +0 -0
  194. data/vendor/assets/stylesheets/rich_table_component.css +18 -0
  195. data/vendor/assets/stylesheets/rtc_bootstrap_and_overrides.css.less +315 -0
  196. data/vendor/assets/stylesheets/rtc_config.sass +31 -0
  197. data/vendor/assets/stylesheets/rtc_jquery.fileupload-ui.css +155 -0
  198. data/vendor/assets/stylesheets/smoothness/images/Thumbs.db +0 -0
  199. data/vendor/assets/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  200. data/vendor/assets/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  201. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  202. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  203. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  204. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  205. data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  206. data/vendor/assets/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  207. data/vendor/assets/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
  208. data/vendor/assets/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  209. data/vendor/assets/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
  210. data/vendor/assets/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
  211. data/vendor/assets/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  212. data/vendor/assets/stylesheets/smoothness/jquery-ui-1.8.11.custom.css +573 -0
  213. metadata +209 -17
data/README.md CHANGED
@@ -19,9 +19,9 @@ Or install it yourself as:
19
19
  ## Usage
20
20
 
21
21
 
22
- penggunaan:
23
22
 
24
- CONTROLLER
23
+
24
+ ### CONTROLLER
25
25
 
26
26
  rich_table_component(relation = {}, _sort_column = {}, _sort_direction = nil, pagination = true)
27
27
 
@@ -69,17 +69,15 @@ contoh penggunaan pada controller:
69
69
 
70
70
 
71
71
 
72
- VIEW
72
+ ### VIEW
73
73
  = render 'shared/rtc/component'
74
74
 
75
75
  Merender file shared/rtc/_component.html.haml
76
76
 
77
77
 
78
- ##################################
79
78
  PARAMETER:
80
- ##################################
81
79
 
82
- rtc_controller_name
80
+ #### rtc_controller_name
83
81
  value: string
84
82
  default: controller_name atau string dari controller yang menghandle request
85
83
  description:
@@ -87,40 +85,40 @@ rtc_controller_name
87
85
 
88
86
 
89
87
 
90
- rtc_partial
88
+ #### rtc_partial
91
89
  value: string
92
90
  default: rtc_controller_name.singularize (jika default, merender file partial pada directory yang memanggil)
93
91
 
94
92
 
95
- rtc_title
93
+ #### rtc_title
96
94
  value: boolean, Hash{ title: 'Judul', wrapper: 'h1'/'h2'/'h3'/'h4' }, or string
97
95
  default: true
98
96
  description:
99
97
 
100
98
 
101
99
 
102
- rtc_header
100
+ #### rtc_header
103
101
  value: boolean
104
102
  default: true
105
103
  description:
106
104
  Menampilkan kotak header tabel jika true, dan tidak ditampilkan jika false
107
105
 
108
106
 
109
- rtc_column_header
107
+ #### rtc_column_header
110
108
  value: boolean
111
109
  default: true
112
110
  description:
113
111
  Menampilkan kotak header kolom header jika true, dan tidak ditampilkan jika false
114
112
 
115
113
 
116
- rtc_footer
114
+ #### rtc_footer
117
115
  value: boolean
118
116
  default: true
119
117
  description:
120
118
  Menampilkan kotak footer tabel jika true, dan tidak ditampilkan jika false
121
119
 
122
120
 
123
- headers (required)
121
+ #### headers (required)
124
122
  value: Array of Object
125
123
  description:
126
124
  Mendefinisikan atribut/kolom yang akan ditampilkan sebagai kolom header, berupa atribut pada model atau asosiasi model
@@ -128,14 +126,14 @@ headers (required)
128
126
  [:nip, :name, 'department', :nidn, :certification_number, 'user.email']
129
127
 
130
128
 
131
- columns_width
129
+ #### columns_width
132
130
  value: Array of Integer
133
131
  default: [] / empty array
134
132
  description:
135
133
  Mengatur ukuran tiap kolom pada tabel. Nilai array merupakan rasio ukuran, misal: [1, 2, 2] berarti [20%, 40%, 40%]
136
134
 
137
135
 
138
- search_constraint
136
+ #### search_constraint
139
137
  value: symbol
140
138
  default: nil
141
139
  description:
@@ -145,7 +143,7 @@ search_constraint
145
143
 
146
144
 
147
145
 
148
- advanced_search_attributes
146
+ #### advanced_search_attributes
149
147
  value: Array of Object. Object can be string or symbol or hash {input: ..., params: simple_form input params}
150
148
  default: nil
151
149
  description:
@@ -165,7 +163,7 @@ advanced_search_attributes
165
163
  :certification_number ]
166
164
 
167
165
 
168
- export_attributes
166
+ #### export_attributes
169
167
  value: Array of Object. Object can be string or symbol
170
168
  default: nil,
171
169
  description:
@@ -174,48 +172,48 @@ export_attributes
174
172
  [:nip, :name, 'department', :nidn, :certification_number, 'user.email']
175
173
 
176
174
 
177
- add_form_remote
175
+ #### add_form_remote
178
176
  value: boolean
179
177
  default: false
180
178
  description:
181
179
  Menghidupkan form ajax pada button tambah jika true
182
180
 
183
181
 
184
- rtc_empty_data_message
182
+ #### rtc_empty_data_message
185
183
  value: string
186
184
  default: sanitize "Data #{t(rtc_controller_name)} kosong"
187
185
  description:
188
186
  text yang ditampilkan pada tabel jika data kosong. text dapat dalam format html
189
187
 
190
188
 
191
- search_key
189
+ #### search_key
192
190
  value: string
193
191
  default: 'q'
194
192
  description:
195
193
  Param key yang dibutuhkan pada fitur pencarian menggunakan gem ransack. Jika tidak menggunakan ransack, pada controller tidak perlu memiliki instance @q
196
194
 
197
195
 
198
- rtc_button_new
196
+ #### rtc_button_new
199
197
  value: boolean
200
198
  default: true
201
199
  description:
202
200
  Render default button new if true
203
201
 
204
- rtc_actions
202
+ #### rtc_actions
205
203
  value: Element or Array of Element
206
204
  default: nil
207
205
  description:
208
206
  Render element(s) side by side with button new
209
207
 
210
208
 
211
- toggle_view
209
+ #### toggle_view
212
210
  value: boolean
213
211
  default: false
214
212
  description:
215
213
  render toggle rtc view. thumbnail/list
216
214
 
217
215
 
218
- table_title
216
+ #### table_title
219
217
  value: string
220
218
  default: controller_name
221
219
  description:
@@ -233,58 +231,57 @@ table_title
233
231
 
234
232
 
235
233
 
236
- CONTOH KASUS:
237
-
238
- ===============================================================================================================================
239
- Kasus normal ==================================================================================================================
240
- ===============================================================================================================================
234
+ ### CONTOH KASUS:
241
235
 
242
- Menampilkan rtc berupa list `page` pada halaman `index` controller `PagesController` atau `PagesController#index`. RTC yang ingin ditampilkan secara lengkap (memiliki fitur advanced search dan export pdf & xls)
236
+ #### Kasus normal
243
237
 
244
- Yang perlu dilakukan:
245
- 1. Controller: Pada `PagesController` pages_controller.rb dalam method `index` harus memiliki instance @q dan @pages repond dengan respond_to_remote :index, @pages
238
+ Menampilkan rtc berupa list `page` pada halaman `index` controller `PagesController` atau `PagesController#index`. RTC yang ingin ditampilkan secara lengkap (memiliki fitur advanced search dan export pdf & xls)
246
239
 
247
- def index
248
- ...
249
- @q = Page.search(params[:q])
250
- @pages = rich_table_component @q.result
251
- respond_to_remote :index, @pages
252
- end
240
+ Yang perlu dilakukan:
241
+ 1. Controller: Pada `PagesController` pages_controller.rb dalam method `index` harus memiliki instance @q dan @pages repond dengan respond_to_remote :index, @pages
242
+ ```ruby
243
+ def index
244
+ ...
245
+ @q = Page.search(params[:q])
246
+ @pages = rich_table_component @q.result
247
+ respond_to_remote :index, @pages
248
+ end
249
+ ```
253
250
 
254
251
 
255
- 2. View: Pada view/pages/index.html.haml
252
+ 2. View: Pada view/pages/index.html.haml
253
+ ```haml
254
+ = render 'shared/rtc/component',
255
+ headers: [:title, :body, ['author.name', 'author'], 'author.email', nil],
256
+ columns_width: [2, 6, 1, 1, 1],
257
+ search_constraint: :title_or_body_or_author_name_or_author_email_cont,
258
+ add_form_remote: true,
259
+ export_attributes: [:title, :body, ['author.name', 'author'], 'author.email'],
260
+ advanced_search_attributes: [ :title,
261
+ :body,
262
+ 'author.name',
263
+ 'author.email',
264
+ 'author.address.city.name']
265
+ ```
266
+
267
+ 3. View: Pada view/pages/_page.html.haml
268
+ ```haml
269
+ // Jumlah td disesuaikan dengan jumlah element pada headers, untuk kasus ini berjumlah 5
270
+ %tr
271
+ %td
272
+ = page.title
273
+ %td
274
+ = page.body
275
+ %td
276
+ = page.author.name
277
+ %td
278
+ = page.author.email
279
+ %td
280
+ = link_to delete .....
281
+ ```
282
+
283
+ #### Kasus me-render partial custom yang berbeda
256
284
 
257
- = render 'shared/rtc/component',
258
- headers: [:title, :body, ['author.name', 'author'], 'author.email', nil],
259
- columns_width: [2, 6, 1, 1, 1],
260
- search_constraint: :title_or_body_or_author_name_or_author_email_cont,
261
- add_form_remote: true,
262
- export_attributes: [:title, :body, ['author.name', 'author'], 'author.email'],
263
- advanced_search_attributes: [ :title,
264
- :body,
265
- 'author.name',
266
- 'author.email',
267
- 'author.address.city.name']
268
-
269
-
270
- 3. View: Pada view/pages/_page.html.haml
271
- // Jumlah td disesuaikan dengan jumlah element pada headers, untuk kasus ini berjumlah 5
272
- %tr
273
- %td
274
- = page.title
275
- %td
276
- = page.body
277
- %td
278
- = page.author.name
279
- %td
280
- = page.author.email
281
- %td
282
- = link_to delete .....
283
-
284
-
285
- ===============================================================================================================================
286
- Kasus me-render partial custom yang berbeda ===================================================================================
287
- ===============================================================================================================================
288
285
  Secara default baris yang dirender adalah _model.html.haml, misal _page.html.haml
289
286
  untuk merender partial yang berbeda untuk model page misalnya: _subscriber_page.html.haml dapat dilakukan dengan mendefinisikan parameter `rtc_partial` dengan lokasi file partial tersebut `pages/subscriber_page`
290
287
 
@@ -304,117 +301,135 @@ Jika pada rtc terdapat button tambah, edit, atau apapun yang mengharuskan merend
304
301
 
305
302
 
306
303
 
307
- ===============================================================================================================================
308
- Kasus mengacu controller yang berbeda =========================================================================================
309
- ===============================================================================================================================
304
+ #### Kasus mengacu controller yang berbeda
305
+
310
306
  Misal menampilkan koleksi post pada home
311
307
 
312
308
  Controller: home#index
313
- ...
314
- @q = Post.search(params[:q])
315
- @posts = rich_table_component @q.result
316
- ...
309
+ ```ruby
310
+ ...
311
+ @q = Post.search(params[:q])
312
+ @posts = rich_table_component @q.result
313
+ ...
314
+ ```
317
315
 
318
316
  View:
319
- = render 'shared/rtc/component',
320
- headers: [:title, :body, ['author.name', 'author'], 'author.email', nil],
321
- columns_width: [2, 6, 1, 1, 1],
322
- search_constraint: :title_or_body_or_author_name_or_author_email_cont,
323
- rtc_controller_name: 'posts'
324
-
325
-
317
+ ```haml
318
+ = render 'shared/rtc/component',
319
+ headers: [:title, :body, ['author.name', 'author'], 'author.email', nil],
320
+ columns_width: [2, 6, 1, 1, 1],
321
+ search_constraint: :title_or_body_or_author_name_or_author_email_cont,
322
+ rtc_controller_name: 'posts'
323
+ ```
326
324
 
327
325
 
328
- ===============================================================================================================================
329
- Kasus dua atau lebih table dalam halaman yang sama ===========================================================================
330
- ===============================================================================================================================
331
326
 
327
+ #### Kasus dua atau lebih table dalam halaman yang sama
332
328
 
333
329
  Misal menampilkan koleksi post pada home
334
330
 
335
- Controller: home#index
336
- ...
337
- @q = Post.search(params[:q])
338
- @posts = rich_table_component @q.result
331
+ Controller: home#index
332
+ ```ruby
333
+ def index
334
+ ...
335
+ @q = Post.search(params[:q])
336
+ @posts = rich_table_component @q.result
339
337
 
340
- @p = Post.search(params[:p], search_key: :p)
341
- @second_posts = rich_table_component @p.result
338
+ @p = Post.search(params[:p], search_key: :p)
339
+ @second_posts = rich_table_component @p.result
342
340
 
343
- @r = Post.search(params[:r], search_key: :r)
344
- @third_posts = rich_table_component @p.result
345
- ...
341
+ @r = Post.search(params[:r], search_key: :r)
342
+ @third_posts = rich_table_component @p.result
343
+ ...
344
+ end
345
+ ```
346
346
 
347
347
  View:
348
- = render 'shared/rtc/component',
348
+
349
+ ```haml
350
+ = render 'shared/rtc/component',
349
351
  headers: [:title, :body, ['author.name', 'author'], 'author.email', nil],
350
352
  columns_width: [2, 6, 1, 1, 1],
351
353
  search_constraint: :title_or_body_or_author_name_or_author_email_cont,
352
354
  rtc_controller_name: 'posts'
355
+ ```
353
356
 
354
- = render 'shared/rtc/component',
357
+ ```haml
358
+ = render 'shared/rtc/component',
355
359
  headers: [:title, :body, ['author.name', 'author'], 'author.email', nil],
356
360
  columns_width: [2, 6, 1, 1, 1],
357
361
  search_constraint: :title_or_body_or_author_name_or_author_email_cont,
358
362
  rtc_controller_name: 'second_posts',
359
363
  rtc_partial: 'posts/second_post',
360
364
  search_key: 'p'
365
+ ```
361
366
 
362
- = render 'shared/rtc/component',
367
+ ```haml
368
+ = render 'shared/rtc/component',
363
369
  headers: [:title, :body, ['author.name', 'author'], 'author.email', nil],
364
370
  columns_width: [2, 6, 1, 1, 1],
365
371
  search_constraint: :title_or_body_or_author_name_or_author_email_cont,
366
372
  rtc_controller_name: 'third_posts',
367
373
  rtc_partial: 'posts/third_post',
368
374
  search_key: 'r'
375
+ ```
376
+
369
377
 
370
378
 
379
+ #### Kasus updating tapi bukan dari tombol edit standar (misal: approve/reject)
371
380
 
372
- ===============================================================================================================================
373
- Kasus updating tapi bukan dari tombol edit standar (misal: approve/reject) ====================================================
374
- ===============================================================================================================================
375
381
  tambahkan class html '.edit' pada button custom
376
382
  pada method terakhir yang terpanggil sebelum baris terupdate, harus respond remote to :update,
377
383
  dan harus memiliki params[:rtc_partial] yang diassign di controller ATAU dilempar dari form ATAU button edit
378
384
  - assign di controller: params[:rtc_partial] = 'admin/departments/student'
379
385
  - assign pada form (jika melewati modal form, seperti edit pada umumnya)
380
- simple_form_for ... do |f|
381
- = hidden_field_tag 'rtc_partial', 'admin/departments/student'
382
- ...
383
- end
386
+
387
+ ```ruby
388
+ simple_form_for ... do |f|
389
+ = hidden_field_tag 'rtc_partial', 'admin/departments/student'
390
+ ...
391
+ end
392
+ ```
384
393
  - assign dari button (jika tidak melewati modal)
385
- link_to 'approve', approve_post_path(post, rtc_partial: 'admin/departments/student'), remote: :true, class: 'btn edit'
394
+ ```ruby
395
+ = link_to 'approve', approve_post_path(post, rtc_partial: 'admin/departments/student'), remote: :true, class: 'btn edit'
396
+ ```
386
397
 
387
398
  Jika model yang diupdate berbeda dengan model controllernya, misal mengupdate `post` pada halaman `UsersController#show`,
388
399
  sertakan rtc_controller_name berdampingan dengan rtc_partial,
389
400
  contoh:
390
401
  link_to 'approve', approve_post_path(post, rtc_controller_name: 'admin/departments/student', rtc_partial: 'admin/departments/student'), remote: :true, class: 'btn edit'
391
402
 
392
- =====================================
403
+
393
404
  a) Aksi tidak memunculkan modal, tetapi langsung update. Dengan custom method, model yang diupdate sesuai dengan controller
394
405
 
395
406
  View:
396
407
  tambahkan class html '.edit' pada button custom
397
408
 
398
- ...
399
- = link_to 'approve', approve_post_path(post), remote: :true, class: 'btn edit'
400
- ...
409
+ ```ruby
410
+ ...
411
+ = link_to 'approve', approve_post_path(post), remote: :true, class: 'btn edit'
412
+ ...
413
+ ```
401
414
 
402
415
  Controller
403
416
 
417
+ ```ruby
418
+ ...
419
+ def approve
420
+ # updating post
421
+ @post = Post.find(params[:id])
404
422
  ...
405
- def approve
406
- # updating post
407
- @post = Post.find(params[:id])
408
- ...
409
- respond_to do |format|
410
- if @post.update_attributes(params[:post])
411
- format_remote format, :update, @post
412
- else
413
- format_remote format, :edit, @post
414
- end
423
+ respond_to do |format|
424
+ if @post.update_attributes(params[:post])
425
+ format_remote format, :update, @post
426
+ else
427
+ format_remote format, :edit, @post
415
428
  end
416
429
  end
417
- ...
430
+ end
431
+ ...
432
+ ```
418
433
 
419
434
 
420
435
  b) Aksi tidak memunculkan modal, tetapi langsung update. Dengan custom method, model yang diupdate BERBEDA dengan controller.
@@ -423,29 +438,31 @@ b) Aksi tidak memunculkan modal, tetapi langsung update. Dengan custom method, m
423
438
  View:
424
439
  tambahkan class html '.edit' pada button custom
425
440
 
426
- ...
427
- = link_to 'approve', approve_post_path(post, rtc_controller_name: 'posts', rtc_partial: 'users/post'), remote: :true, class: 'btn edit'
428
- ...
441
+
442
+ ```ruby
443
+ ...
444
+ = link_to 'approve', approve_post_path(post, rtc_controller_name: 'posts', rtc_partial: 'users/post'), remote: :true, class: 'btn edit'
445
+ ...
446
+ ```
429
447
 
430
448
  Controller
431
-
449
+
450
+ ```ruby
451
+ ...
452
+ def approve
453
+ # updating post
454
+ @post = Post.find(params[:id])
432
455
  ...
433
- def approve
434
- # updating post
435
- @post = Post.find(params[:id])
436
- ...
437
- respond_to do |format|
438
- if @post.update_attributes(params[:post])
439
- format_remote format, :update, @post
440
- else
441
- format_remote format, :edit, @post
442
- end
456
+ respond_to do |format|
457
+ if @post.update_attributes(params[:post])
458
+ format_remote format, :update, @post
459
+ else
460
+ format_remote format, :edit, @post
443
461
  end
444
462
  end
445
- ...
446
-
447
-
448
-
463
+ end
464
+ ...
465
+ ```
449
466
 
450
467
 
451
468
 
@@ -0,0 +1,176 @@
1
+ module ComponentHelper
2
+
3
+
4
+ # rendering link for sortable column that used by rich table component
5
+ def sort_link(column = {}, options = {})
6
+ new_params = Hash.new
7
+ new_params.merge! params
8
+ case column
9
+ when Hash
10
+ new_params.merge!(column[:params]) if column[:params].present?
11
+ options[:title] ||= column[:title].to_s
12
+
13
+ if column[:value].present?
14
+ options[:title] = column[:label]
15
+ column = column[:value]
16
+ else
17
+ column = column[:column]
18
+ end
19
+ when Array
20
+ options[:title] = column[1].presence || column.first.to_s.split('.').last(2).join('_')
21
+ column = column.first
22
+ end
23
+
24
+ options[:title] = options[:title].presence || column.to_s.split('.').last(2).join('_')
25
+
26
+ options[:controller] ||= controller_name
27
+
28
+ options[:params][:rtc_controller_name] = options[:rtc_controller_name].presence || controller_name
29
+ options[:params][:rtc_partial] = options[:rtc_partial] if options[:rtc_partial].present?
30
+
31
+ css_class = (column == sort_column) ? "current #{sort_direction}" : nil
32
+ direction = (column == sort_column && sort_direction == "asc") ? "desc" : "asc"
33
+ options[:params].stringify_keys!
34
+ new_params.merge!(options[:params])
35
+ if !action_name.eql? 'index'
36
+ new_params.merge!({pgos: true})
37
+ end
38
+ new_params.merge!({controller: options[:controller], sort: column, direction: direction, page: params[:page]}.stringify_keys!)
39
+ #new_params.merge!({controller: options[:controller], sort: column, direction: direction, page: params[:page]})
40
+
41
+ link_to t("#{options[:title]}"), new_params, {class: css_class, remote: true, title: t("#{options[:title]}")}
42
+ end
43
+
44
+
45
+
46
+
47
+ # Return part div
48
+ def part(opts = {})
49
+ content_tag :div, class: "part #{opts[:class]}" do
50
+ if opts[:label].present?
51
+ content_tag(:span, opts[:label], class: "part_label") +
52
+ content_tag(:span, opts[:value], class: "part_value", title: opts[:title], rel: 'tooltip')
53
+ else
54
+ content_tag(:span, opts[:value], class: "part_value", title: opts[:title], rel: 'tooltip')
55
+ end
56
+ end
57
+ end
58
+
59
+
60
+
61
+ def icon(ico, text = '', pos = 'left')
62
+ if pos.eql? 'right'
63
+ sanitize text + ' <i class="icon-' + ico + '"></i>'
64
+ else
65
+ sanitize '<i class="icon-' + ico + '"></i> ' + text
66
+ end
67
+ end
68
+
69
+
70
+
71
+ def button_form_actions(fobj)
72
+ result = ''
73
+ # result << (fobj.error :base).presence || ''
74
+ result << '<div class="form-actions">'
75
+ result << (fobj.button :submit, 'Simpan', class: 'btn btn-large btn-primary btn_submit')
76
+ result << '</div>'
77
+ result.html_safe
78
+ end
79
+
80
+
81
+
82
+ def button_edit(obj, opts = {})
83
+ opts[:scope_params] ||= {}
84
+ ( link_to icon('pencil'), {controller: obj.class.name.tableize, id: obj, action: :edit}.merge(opts[:scope_params]), remote: true, title: 'Ubah data', rel: 'tooltip', class: 'btn btn-mini edit' ).html_safe
85
+ end
86
+
87
+ def button_delete(obj, opts = {})
88
+ opts[:scope_params] ||= {}
89
+ ( link_to icon('trash'), {controller: obj.class.name.tableize, id: obj, action: :destroy}.merge(opts[:scope_params]), confirm: 'Apa and yakin?', method: :delete, remote: true, title: 'Hapus data', rel: 'tooltip', class: 'btn btn-mini btn-danger delete' ).html_safe
90
+ end
91
+
92
+ def button_edit_delete(obj)
93
+ [button_edit(obj), button_delete(obj)].join(' ').strip.html_safe
94
+ end
95
+
96
+ def button_edit_with_cancan(obj, opts = {})
97
+ can?(:edit, obj) ? button_edit(obj, opts).html_safe : ''
98
+ end
99
+
100
+ def button_delete_with_cancan(obj, opts = {})
101
+ can?(:delete, obj) ? button_delete(obj, opts).html_safe : ''
102
+ end
103
+
104
+ def button_edit_delete_with_cancan(obj, opts = {})
105
+ [button_edit_with_cancan(obj, opts), button_delete_with_cancan(obj, opts)].join(' ').strip.html_safe
106
+ end
107
+
108
+
109
+
110
+ def uneditable_input_control(value, label = ' ')
111
+ content_tag :div, class: "control-group" do
112
+ content_tag(:label, label, class: "control-label") +
113
+ content_tag(:div, class: "controls") do
114
+ content_tag(:div, value, class: "uneditable-input input-xlarge")
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+ def uneditable_textarea_control(value, label = ' ')
121
+ content_tag :div, class: "control-group" do
122
+ content_tag(:label, label, class: "control-label") +
123
+ content_tag(:div, class: "controls") do
124
+ content_tag(:div, value, class: "uneditable-textarea input-xlarge")
125
+ end
126
+ end
127
+ end
128
+
129
+
130
+ def lvr_row_id(item)
131
+ "#{item.class.name.tableize.singularize}_list_view_row_#{item.id}"
132
+ end
133
+
134
+ def lvr_row_class(item)
135
+ "#{controller_name}_#{item.class.name.tableize.singularize}_list_view_row"
136
+ end
137
+
138
+ def component_by_page slug
139
+ comp_page = Page.find_by_slug slug
140
+ result = ''
141
+ if comp_page
142
+ result =
143
+ "<div class='component'>" +
144
+ " <div class='component_title'>" +
145
+ " <h2> #{comp_page.name}" +
146
+ " </h2>" +
147
+ " </div>" +
148
+ " <div class='component_content'>#{truncate_html(comp_page.description, 300)}" +
149
+ " </div>" +
150
+ "</div>"
151
+ end
152
+ result.html_safe
153
+ end
154
+
155
+ def with_html_title text
156
+ "<span title='#{text}'>#{text}</span>".html_safe if text.present?
157
+ end
158
+
159
+ def time_period(sdate, edate)
160
+ strsdate = sdate.present? ? (mdate sdate) : "-"
161
+ stredate = edate.present? ? (mdate edate) : "-"
162
+ "#{strsdate} #{t('to')} #{stredate}"
163
+ end
164
+
165
+ # Needed for constructing dot format in recapitulation matrix
166
+ def mapping_label(arr)
167
+ arr.unshift('mapping').flatten.join('.')
168
+ end
169
+
170
+ def render_rtc(options)
171
+ render partial: 'rich_table_component/rtc/component', locals: options
172
+ end
173
+
174
+ end
175
+
176
+