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.
- data/README.md +156 -139
- data/app/helpers/component_helper.rb +176 -0
- data/app/helpers/documents_helper.rb +22 -0
- data/app/helpers/menus_helper.rb +182 -0
- data/app/helpers/paragraph_helper.rb +57 -0
- data/app/helpers/translations_helper.rb +9 -0
- data/app/views/application/_document_fields.html.haml +20 -0
- data/app/views/application/_edit.html.haml +11 -0
- data/app/views/application/_new.html.haml +11 -0
- data/app/views/application/access_denied.js.erb +5 -0
- data/app/views/application/create.js.erb +19 -0
- data/app/views/application/destroy.js.erb +9 -0
- data/app/views/application/destroy_fail.js.erb +2 -0
- data/app/views/application/edit.html.haml +8 -0
- data/app/views/application/edit.js.erb +28 -0
- data/app/views/application/index.js.erb +7 -0
- data/app/views/application/index.pdf.haml +87 -0
- data/app/views/application/index.xls.haml +64 -0
- data/app/views/application/new.html.haml +7 -0
- data/app/views/application/new.js.erb +23 -0
- data/app/views/application/recapitulation.js.erb +12 -0
- data/app/views/application/recapitulation.pdf.haml +68 -0
- data/app/views/application/recapitulation.xls.haml +41 -0
- data/app/views/application/session_expired.js.erb +5 -0
- data/app/views/application/show.js.erb +29 -0
- data/app/views/application/update.js.erb +15 -0
- data/app/views/layouts/print/pdf.html.haml +8 -0
- data/app/views/layouts/print/recapitulation.html.haml +8 -0
- data/app/views/rich_table_component/_notification.html.haml +9 -0
- data/app/views/rich_table_component/_pagination.html.haml +11 -0
- data/app/views/rich_table_component/_recapitulation_matrix_groups.html.haml +42 -0
- data/app/views/rich_table_component/component/_ajax_upload.html.haml +6 -0
- data/app/views/rich_table_component/component/_ajax_upload_result.html.haml +2 -0
- data/app/views/rich_table_component/component/_breadcrumbs.html.haml +25 -0
- data/app/views/rich_table_component/component/_breadcrumbs_dropdown.html.haml +18 -0
- data/app/views/rich_table_component/component/_tabbed.html.haml +5 -0
- data/app/views/rich_table_component/rtc/_advanced_search.html.haml +95 -0
- data/app/views/rich_table_component/rtc/_advanced_search_recapitulation.html.haml +90 -0
- data/app/views/rich_table_component/rtc/_component.html.haml +62 -0
- data/app/views/rich_table_component/rtc/_component_actions.html.haml +69 -0
- data/app/views/rich_table_component/rtc/_component_content.html.haml +37 -0
- data/app/views/rich_table_component/rtc/_component_title.html.haml +37 -0
- data/app/views/rich_table_component/rtc/_content.html.haml +22 -0
- data/app/views/rich_table_component/rtc/_footer.html.haml +4 -0
- data/app/views/rich_table_component/rtc/_header.html.haml +56 -0
- data/app/views/rich_table_component/rtc/_recapitulation_matrix.html.haml +25 -0
- data/app/views/rich_table_component/rtc/_recapitulation_matrix_form.html.haml +47 -0
- data/app/views/rich_table_component/rtc/_table.html.haml +22 -0
- data/lib/pagination_list_link_renderer.rb +51 -0
- data/lib/rich_table_component/version.rb +1 -1
- data/lib/rich_table_component.rb +0 -8
- data/rich_table_component.gemspec +0 -1
- data/vendor/assets/images/icons/file_extension/file_extension_.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_3gp.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_7z.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ace.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ai.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_aif.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_aiff.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_amr.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_asf.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_asx.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_bat.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_bin.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_bmp.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_bup.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_cab.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_cbr.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_cda.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_cdl.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_cdr.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_chm.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_dat.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_divx.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_dll.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_dmg.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_doc.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_dss.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_dvf.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_dwg.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_eml.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_eps.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_exe.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_fla.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_flv.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_gif.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_gz.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_hqx.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_htm.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_html.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ifo.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_indd.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_iso.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_jar.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_jpeg.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_jpg.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_lnk.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_log.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_m4a.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_m4b.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_m4p.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_m4v.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mcd.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mdb.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mid.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mov.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mp2.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mp4.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mpeg.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mpg.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_msi.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_mswmm.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ogg.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_pdf.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_png.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_pps.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ppt.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ps.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_psd.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_pst.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ptb.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_pub.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_qbb.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_qbw.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_qxd.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ram.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_rar.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_rm.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_rmvb.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_rtf.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_sea.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ses.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_sit.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_sitx.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ss.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_swf.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_tgz.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_thm.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_tif.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_tmp.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_torrent.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_ttf.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_txt.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_vcd.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_vob.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_wav.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_wma.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_wmv.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_wps.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_xls.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_xpi.png +0 -0
- data/vendor/assets/images/icons/file_extension/file_extension_zip.png +0 -0
- data/vendor/assets/images/loading_image.gif +0 -0
- data/vendor/assets/images/pbar-ani.gif +0 -0
- data/vendor/assets/javascripts/admin/starqle.grid.js +708 -0
- data/vendor/assets/javascripts/admin/starqle.ui.jquery.js +927 -0
- data/vendor/assets/javascripts/ckeditor/config.js +112 -0
- data/vendor/assets/javascripts/jquery-ui-1.8.13.custom.min.js +445 -0
- data/vendor/assets/javascripts/jquery.fileupload-ui.js +533 -0
- data/vendor/assets/javascripts/jquery.fileupload.js +975 -0
- data/vendor/assets/javascripts/jquery.tmpl.min.js +1 -0
- data/vendor/assets/javascripts/jquery.tokeninput.js +860 -0
- data/vendor/assets/javascripts/nested_attribute_action.js +19 -0
- data/vendor/assets/javascripts/rich_table_component.js +51 -0
- data/vendor/assets/stylesheets/fontfaces/england_hand_db/Freeware License.txt +5 -0
- data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.eot +0 -0
- data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.svg +146 -0
- data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.ttf +0 -0
- data/vendor/assets/stylesheets/fontfaces/england_hand_db/england-webfont.woff +0 -0
- data/vendor/assets/stylesheets/fontfaces/england_hand_db/stylesheet.css +16 -0
- data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.eot +0 -0
- data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.svg +249 -0
- data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.ttf +0 -0
- data/vendor/assets/stylesheets/fontfaces/museo300-regular-webfont.woff +0 -0
- data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.eot +0 -0
- data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.svg +249 -0
- data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.ttf +0 -0
- data/vendor/assets/stylesheets/fontfaces/museo500-regular-webfont.woff +0 -0
- data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.eot +0 -0
- data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.svg +249 -0
- data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.ttf +0 -0
- data/vendor/assets/stylesheets/fontfaces/museo700-regular-webfont.woff +0 -0
- data/vendor/assets/stylesheets/partial/_base_functions.sass +101 -0
- data/vendor/assets/stylesheets/partial/_base_variables.sass +76 -0
- data/vendor/assets/stylesheets/partial/_form.sass +57 -0
- data/vendor/assets/stylesheets/partial/_grid.css +374 -0
- data/vendor/assets/stylesheets/partial/_notification.sass +33 -0
- data/vendor/assets/stylesheets/partial/_position.sass +122 -0
- data/vendor/assets/stylesheets/partial/_starqle.ui.grid.sass +495 -0
- data/vendor/assets/stylesheets/partial/_style.sass +674 -0
- data/vendor/assets/stylesheets/partial/_tabbed.sass +33 -0
- data/vendor/assets/stylesheets/partial/_user_component.sass +2 -0
- data/vendor/assets/stylesheets/rich_table_component/_custom.sass +0 -0
- data/vendor/assets/stylesheets/rich_table_component.css +18 -0
- data/vendor/assets/stylesheets/rtc_bootstrap_and_overrides.css.less +315 -0
- data/vendor/assets/stylesheets/rtc_config.sass +31 -0
- data/vendor/assets/stylesheets/rtc_jquery.fileupload-ui.css +155 -0
- data/vendor/assets/stylesheets/smoothness/images/Thumbs.db +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/vendor/assets/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/vendor/assets/stylesheets/smoothness/jquery-ui-1.8.11.custom.css +573 -0
- 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
|
-
|
|
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
|
-
|
|
236
|
+
#### Kasus normal
|
|
243
237
|
|
|
244
|
-
|
|
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
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
315
|
-
|
|
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
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
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
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|
-
|
|
341
|
-
|
|
338
|
+
@p = Post.search(params[:p], search_key: :p)
|
|
339
|
+
@second_posts = rich_table_component @p.result
|
|
342
340
|
|
|
343
|
-
|
|
344
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
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
|
-
|
|
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
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
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
|
+
|