drg_cms 0.6.0.6 → 0.6.0.8
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/drg_cms/drg_cms.js +92 -36
- data/app/assets/stylesheets/drg_cms/drg_cms.css +141 -101
- data/app/assets/stylesheets/drg_cms/select-multiple.css +9 -12
- data/app/assets/stylesheets/drg_cms_cms.css +1 -1
- data/app/controllers/cmsedit_controller.rb +100 -32
- data/app/controllers/dc_application_controller.rb +71 -12
- data/app/controls/dc_report.rb +227 -0
- data/app/forms/all_options.yml +24 -5
- data/app/forms/dc_big_table.yml +1 -0
- data/app/forms/dc_big_table_value.yml +1 -0
- data/app/forms/dc_poll.yml +12 -5
- data/app/forms/dc_poll_item.yml +2 -1
- data/app/forms/dc_poll_result.yml +9 -0
- data/app/forms/dc_site.yml +2 -6
- data/app/helpers/cms_common_helper.rb +311 -0
- data/app/helpers/{cmsedit_edit_helper.rb → cms_edit_helper.rb} +52 -25
- data/app/helpers/{cmsedit_helper.rb → cms_helper.rb} +38 -31
- data/app/helpers/{cmsedit_index_helper.rb → cms_index_helper.rb} +152 -155
- data/app/helpers/dc_application_helper.rb +20 -234
- data/app/models/concerns/dc_site_concern.rb +12 -1
- data/app/models/dc_filter.rb +10 -8
- data/app/models/dc_permission.rb +30 -0
- data/app/models/dc_poll.rb +1 -0
- data/app/models/dc_poll_result.rb +4 -2
- data/app/models/dc_temp.rb +5 -2
- data/app/models/drgcms_form_fields.rb +12 -1
- data/app/models/drgcms_form_fields/date_picker.rb +4 -3
- data/app/models/drgcms_form_fields/datetime_picker.rb +4 -3
- data/app/models/drgcms_form_fields/drgcms_field.rb +18 -4
- data/app/models/drgcms_form_fields/embedded.rb +17 -9
- data/app/models/drgcms_form_fields/file_field.rb +1 -1
- data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
- data/app/models/drgcms_form_fields/method.rb +65 -0
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +17 -11
- data/app/models/drgcms_form_fields/radio.rb +10 -5
- data/app/models/drgcms_form_fields/readonly.rb +1 -1
- data/app/models/drgcms_form_fields/select.rb +49 -32
- data/app/models/drgcms_form_fields/text_autocomplete.rb +21 -21
- data/app/renderers/dc_big_menu_renderer.rb +1 -0
- data/app/renderers/dc_gallery_renderer.rb +1 -0
- data/app/renderers/dc_menu_renderer.rb +1 -0
- data/app/renderers/dc_page_renderer.rb +1 -0
- data/app/renderers/dc_part_renderer.rb +1 -0
- data/app/renderers/dc_piece_renderer.rb +1 -1
- data/app/renderers/dc_poll_renderer.rb +43 -38
- data/app/renderers/dc_renderer.rb +1 -0
- data/app/renderers/dc_simple_menu_renderer.rb +1 -0
- data/config/locales/drgcms_en.yml +3 -2
- data/config/locales/drgcms_sl.yml +5 -4
- data/config/locales/models_en.yml +9 -2
- data/config/locales/models_sl.yml +10 -3
- data/lib/drg_cms/version.rb +1 -1
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +5 -3
- data/lib/tasks/database.rake +6 -56
- metadata +35 -33
- data/app/helpers/application_helper.rb +0 -2
data/app/forms/all_options.yml
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
extend: form_name
|
4
4
|
table: table_name
|
5
5
|
title: Some title
|
6
|
+
title:
|
7
|
+
text: Dynamicaly defined title
|
8
|
+
eval: SomeClass.title_method
|
6
9
|
controls: controls_file
|
7
10
|
readonly: 1
|
8
11
|
permissions:
|
@@ -55,6 +58,14 @@ result_set:
|
|
55
58
|
footer: custom_footer
|
56
59
|
actions_width: 100
|
57
60
|
per_page: 10
|
61
|
+
|
62
|
+
dblclick:
|
63
|
+
table: model_name
|
64
|
+
form_name: form_name
|
65
|
+
readonly: 1
|
66
|
+
action: show
|
67
|
+
window_close: 1 (close), 2 (history.back)
|
68
|
+
|
58
69
|
table_style: 'color: green;'
|
59
70
|
table_class: tclass
|
60
71
|
tr_style: 'color: green;'
|
@@ -92,6 +103,7 @@ result_set:
|
|
92
103
|
name: name
|
93
104
|
eval: dc_name4_id,dc_site,name
|
94
105
|
width: 10%
|
106
|
+
width: none || hidden
|
95
107
|
align: right (center)
|
96
108
|
style: 'color: red;'
|
97
109
|
td_class: class-name
|
@@ -212,8 +224,8 @@ form:
|
|
212
224
|
100:
|
213
225
|
name: css
|
214
226
|
type: text_area
|
215
|
-
|
216
|
-
|
227
|
+
size: 100x20
|
228
|
+
|
217
229
|
|
218
230
|
110:
|
219
231
|
name: active
|
@@ -223,20 +235,26 @@ form:
|
|
223
235
|
10:
|
224
236
|
name: form
|
225
237
|
type: text_area
|
238
|
+
size: 100x50
|
226
239
|
html:
|
227
|
-
|
228
|
-
style: 'font-family:courier;'
|
240
|
+
style: 'font-family:courier;'
|
229
241
|
|
230
242
|
tab3:
|
231
243
|
20:
|
232
244
|
name: dc_poll_items
|
233
245
|
type: embedded
|
246
|
+
load: default,delay,always
|
234
247
|
form_name: dc_poll_item
|
235
248
|
html:
|
236
249
|
height: 800
|
237
250
|
20:
|
238
251
|
name: odhod
|
239
|
-
type: datetime_picker
|
252
|
+
type: datetime_picker
|
253
|
+
20:
|
254
|
+
name: gender
|
255
|
+
type: radio
|
256
|
+
inline: true
|
257
|
+
|
240
258
|
40:
|
241
259
|
name: customer_id
|
242
260
|
type: text_autocomplete
|
@@ -245,6 +263,7 @@ form:
|
|
245
263
|
field: custumer_name
|
246
264
|
method: search
|
247
265
|
with_new: customer
|
266
|
+
is_id: false
|
248
267
|
size: 50
|
249
268
|
50:
|
250
269
|
name: kats
|
data/app/forms/dc_big_table.yml
CHANGED
data/app/forms/dc_poll.yml
CHANGED
@@ -78,13 +78,14 @@ form:
|
|
78
78
|
|
79
79
|
80:
|
80
80
|
name: valid_from
|
81
|
-
type:
|
81
|
+
type: datetime_picker
|
82
82
|
options:
|
83
83
|
include_blank: true
|
84
|
+
group: 2
|
84
85
|
|
85
86
|
90:
|
86
87
|
name: valid_to
|
87
|
-
type:
|
88
|
+
type: datetime_picker
|
88
89
|
options:
|
89
90
|
include_blank: true
|
90
91
|
|
@@ -99,12 +100,11 @@ form:
|
|
99
100
|
type: check_box
|
100
101
|
tab2:
|
101
102
|
10:
|
102
|
-
name:
|
103
|
+
name: js
|
103
104
|
type: text_area
|
104
105
|
html:
|
105
106
|
size: 100x50
|
106
|
-
style: 'font-family:courier;'
|
107
|
-
|
107
|
+
style: 'font-family:courier;'
|
108
108
|
tab3:
|
109
109
|
20:
|
110
110
|
name: dc_poll_items
|
@@ -112,3 +112,10 @@ form:
|
|
112
112
|
form_name: dc_poll_item
|
113
113
|
html:
|
114
114
|
height: 800
|
115
|
+
tab4:
|
116
|
+
10:
|
117
|
+
name: form
|
118
|
+
type: text_area
|
119
|
+
html:
|
120
|
+
size: 100x50
|
121
|
+
style: 'font-family:courier;'
|
data/app/forms/dc_poll_item.yml
CHANGED
@@ -3,7 +3,9 @@
|
|
3
3
|
table: dc_poll_result
|
4
4
|
|
5
5
|
index:
|
6
|
+
filter: data as text_field
|
6
7
|
actions:
|
8
|
+
1: filter
|
7
9
|
10:
|
8
10
|
type: field
|
9
11
|
name: dc_poll_id
|
@@ -53,6 +55,10 @@ result_set:
|
|
53
55
|
name: created_at
|
54
56
|
format: '%d.%m.%Y %H:%M'
|
55
57
|
width: 10%
|
58
|
+
30:
|
59
|
+
name: confirmed
|
60
|
+
eval: dc_icon4_boolean
|
61
|
+
width: 5%
|
56
62
|
|
57
63
|
form:
|
58
64
|
actions:
|
@@ -69,6 +75,9 @@ form:
|
|
69
75
|
type: text_area
|
70
76
|
size: 100x25
|
71
77
|
30:
|
78
|
+
name: confirmed
|
79
|
+
type: check_box
|
80
|
+
40:
|
72
81
|
name: created_at
|
73
82
|
type: readonly
|
74
83
|
format: '%d.%m.%Y %H:%M'
|
data/app/forms/dc_site.yml
CHANGED
@@ -100,15 +100,11 @@ form:
|
|
100
100
|
name: menu_class
|
101
101
|
type: text_field
|
102
102
|
size: 20
|
103
|
-
# 60:
|
104
|
-
# name: menu_name
|
105
|
-
# type: text_with_select
|
106
|
-
# eval: dc_choices4(@record.menu_class,'description','name')
|
107
|
-
# size: 30
|
108
103
|
70:
|
109
104
|
name: menu_id
|
110
105
|
type: select
|
111
|
-
eval:
|
106
|
+
eval: DcSite.choices_for_menu
|
107
|
+
depend: menu_class
|
112
108
|
90:
|
113
109
|
name: settings
|
114
110
|
type: text_area
|
@@ -0,0 +1,311 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2012+ Damjan Rems
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
|
25
|
+
####################################################################
|
26
|
+
# Common methods which may also come handy in controllers or models or any
|
27
|
+
# other module of program.
|
28
|
+
#
|
29
|
+
# Usage: include CmsCommonHelper
|
30
|
+
####################################################################
|
31
|
+
module CmsCommonHelper
|
32
|
+
|
33
|
+
####################################################################
|
34
|
+
# Wrapper for i18 t method, with some spice added. If translation is not found English
|
35
|
+
# translation value will be returned. And if still not found default value will be returned if passed.
|
36
|
+
#
|
37
|
+
# Parameters:
|
38
|
+
# [key] String. String to be translated into locale.
|
39
|
+
# [default] String. Value returned if translation is not found.
|
40
|
+
#
|
41
|
+
# Example:
|
42
|
+
# t('translate.this','Enter text for ....')
|
43
|
+
#
|
44
|
+
# Returns:
|
45
|
+
# String. Translated text.
|
46
|
+
####################################################################
|
47
|
+
def self.t(key, default=nil)
|
48
|
+
c = I18n.t(key)
|
49
|
+
if c.class == Hash or c.match( 'translation missing' )
|
50
|
+
c = I18n.t(key, locale: 'en')
|
51
|
+
# Still not found. Return default if set
|
52
|
+
if c.class == Hash or c.match( 'translation missing' )
|
53
|
+
c = default.nil? ? key : default
|
54
|
+
end
|
55
|
+
end
|
56
|
+
c
|
57
|
+
end
|
58
|
+
|
59
|
+
####################################################################
|
60
|
+
def t(key, default=nil) #:nodoc
|
61
|
+
CmsCommonHelper.t(key, default)
|
62
|
+
end
|
63
|
+
|
64
|
+
####################################################################
|
65
|
+
# Returns table (collection) name translation for usage in dialog title. Tablename
|
66
|
+
# title is provided by helpers.label.table_name.tabletitle locale.
|
67
|
+
#
|
68
|
+
# Parameters:
|
69
|
+
# [tablename] String. Table (collection) name to be translated.
|
70
|
+
# [default] String. Value returned if translation is not found.
|
71
|
+
#
|
72
|
+
# Returns:
|
73
|
+
# String. Translated text.
|
74
|
+
####################################################################
|
75
|
+
def t_tablename(tablename, default=nil)
|
76
|
+
t('helpers.label.' + tablename + '.tabletitle', default || tablename)
|
77
|
+
end
|
78
|
+
|
79
|
+
############################################################################
|
80
|
+
# Returns label for field translated to current locale for usage on data entry form.
|
81
|
+
# Translation is provided by lang.helpers.label.table_name.field_name locale. If
|
82
|
+
# translation is not found method will capitalize field_name and replace '_' with ' '.
|
83
|
+
############################################################################
|
84
|
+
def t_name(field_name, default='')
|
85
|
+
c = t("helpers.label.#{@form['table']}.#{field_name}", default)
|
86
|
+
c = field_name.capitalize.gsub('_',' ') if c.match( 'translation missing' )
|
87
|
+
c
|
88
|
+
end
|
89
|
+
|
90
|
+
###########################################################################
|
91
|
+
# When select field is used on form options for select can be provided by
|
92
|
+
# helpers.label.table_name.choices4_name locale. This is how select
|
93
|
+
# field options are translated. Method returns selected choice translated
|
94
|
+
# to current locale.
|
95
|
+
#
|
96
|
+
# Parameters:
|
97
|
+
# [model] String. Table (collection) model name (lowercase).
|
98
|
+
# [field] String. Field name used.
|
99
|
+
# [value] String. Value of field which translation will be returned.
|
100
|
+
#
|
101
|
+
# Example:
|
102
|
+
# # usage in program. Choice values for state are 'Deactivated:0,Active:1,Waiting:2'
|
103
|
+
# dc_name4_value('dc_user', 'state', @record.active )
|
104
|
+
#
|
105
|
+
# # usage in form
|
106
|
+
# columns:
|
107
|
+
# 2:
|
108
|
+
# name: state
|
109
|
+
# eval: dc_name4_value dc_user, state
|
110
|
+
#
|
111
|
+
# Returns:
|
112
|
+
# String. Descriptive text (translated) for selected choice value.
|
113
|
+
############################################################################
|
114
|
+
def self.dc_name_for_value(model, field, value)
|
115
|
+
return '' if value.nil?
|
116
|
+
c = t('helpers.label.' + model + '.choices4_' + field )
|
117
|
+
a = c.chomp.split(',').inject([]) {|r,v| r << v.split(':') }
|
118
|
+
a.each {|e| return e.first if e.last.to_s == value.to_s }
|
119
|
+
'???'
|
120
|
+
end
|
121
|
+
|
122
|
+
############################################################################
|
123
|
+
def dc_name_for_value(model, field, value)
|
124
|
+
CmsCommonHelper.dc_name_for_value(model, field, value)
|
125
|
+
end
|
126
|
+
|
127
|
+
############################################################################
|
128
|
+
#
|
129
|
+
############################################################################
|
130
|
+
def dc_name4_value(model, field, value) #nodoc
|
131
|
+
#dc_deprecate('dc_name4_value will be deprecated. Use dc_name_for_value instead.')
|
132
|
+
CmsCommonHelper.dc_name_for_value(model, field, value)
|
133
|
+
end
|
134
|
+
|
135
|
+
############################################################################
|
136
|
+
# Return choices for field in model if choices are defined in localization text.
|
137
|
+
#
|
138
|
+
# Parameters:
|
139
|
+
# [model] String. Table (collection) model name (lowercase).
|
140
|
+
# [field] String. Field name used.
|
141
|
+
#
|
142
|
+
# Example:
|
143
|
+
# dc_choices4_field('dc_user', 'state' )
|
144
|
+
#
|
145
|
+
# Returns:
|
146
|
+
# Array. Choices for select input field
|
147
|
+
############################################################################
|
148
|
+
def self.dc_choices_for_field(model, field)
|
149
|
+
c = CmsCommonHelper.t('helpers.label.' + model + '.choices4_' + field )
|
150
|
+
return ['error'] if c.match( 'translation missing' )
|
151
|
+
c.chomp.split(',').inject([]) {|r,v| r << v.split(':') }
|
152
|
+
end
|
153
|
+
|
154
|
+
############################################################################
|
155
|
+
def dc_choices_for_field(model, field)
|
156
|
+
CmsCommonHelper.dc_choices_for_field(model, field)
|
157
|
+
end
|
158
|
+
|
159
|
+
############################################################################
|
160
|
+
#
|
161
|
+
############################################################################
|
162
|
+
def dc_choices4_field(model, field) #nodoc
|
163
|
+
#dc_deprecate('dc_choices4_field will be deprecated. Use dc_choices_for_field instead.')
|
164
|
+
CmsCommonHelper.dc_choices_for_field(model, field)
|
165
|
+
end
|
166
|
+
|
167
|
+
############################################################################
|
168
|
+
# Will return descriptive text for id key when field in one table (collection) has belongs_to
|
169
|
+
# relation to other table.
|
170
|
+
#
|
171
|
+
# Parameters:
|
172
|
+
# [model] String. Table (collection) model name (lowercase).
|
173
|
+
# [field] String. Field name holding the value of descriptive text.
|
174
|
+
# [field_name] String. ID field name. This is by default id, but can be any other
|
175
|
+
# (preferred unique) field.
|
176
|
+
# [value] Value of id_field. Usually a BSON Key but can be any other data type.
|
177
|
+
#
|
178
|
+
# Example:
|
179
|
+
# # usage in program.
|
180
|
+
# dc_name4_id('dc_user', 'name', nil, dc_page.created_by)
|
181
|
+
#
|
182
|
+
# # usage in form
|
183
|
+
# columns:
|
184
|
+
# 2:
|
185
|
+
# name: site_id
|
186
|
+
# eval: dc_name4_id,site,name
|
187
|
+
# # username is saved to document instead of user.id field
|
188
|
+
# 5:
|
189
|
+
# name: user
|
190
|
+
# eval: dc_name4_id,dc_user,name,username
|
191
|
+
#
|
192
|
+
# Returns:
|
193
|
+
# String. Name (descriptive value) for specified key in table.
|
194
|
+
############################################################################
|
195
|
+
def dc_name_for_id(model, field, field_name, id=nil)
|
196
|
+
return '' if id.nil?
|
197
|
+
field_name = (field_name || 'id').strip.to_sym
|
198
|
+
field = field.strip.to_sym
|
199
|
+
|
200
|
+
model = model.strip.classify.constantize if model.class == String
|
201
|
+
rec = Mongoid::QueryCache.cache { model.find_by(field_name => id) }
|
202
|
+
rec.nil? ? '' : (rec.send(field) rescue 'not defined')
|
203
|
+
end
|
204
|
+
|
205
|
+
############################################################################
|
206
|
+
#
|
207
|
+
############################################################################
|
208
|
+
def dc_name4_id(model, field, field_name, id=nil) #nodoc
|
209
|
+
#dc_deprecate('dc_name4_id will be deprecated. Use dc_name_for_id instead.')
|
210
|
+
dc_name_for_id(model, field, field_name, id)
|
211
|
+
end
|
212
|
+
|
213
|
+
############################################################################
|
214
|
+
# Return html code for icon presenting boolean value. Icon is a picture of checked or unchecked box.
|
215
|
+
#
|
216
|
+
# Parameters:
|
217
|
+
# [value] Boolean.
|
218
|
+
#
|
219
|
+
# Example:
|
220
|
+
# # usage from program
|
221
|
+
# dc_icon4_boolean(some_value)
|
222
|
+
#
|
223
|
+
# # usage from form description
|
224
|
+
# columns:
|
225
|
+
# 10:
|
226
|
+
# name: active
|
227
|
+
# eval: dc_icon4_boolean
|
228
|
+
############################################################################
|
229
|
+
def dc_icon_for_boolean(value=false)
|
230
|
+
dc_dont?(value, true) ? fa_icon('square-o lg') : fa_icon('check-square-o lg')
|
231
|
+
end
|
232
|
+
|
233
|
+
############################################################################
|
234
|
+
#
|
235
|
+
############################################################################
|
236
|
+
def dc_icon4_boolean(value=false) #nodoc
|
237
|
+
#dc_deprecate('dc_icon4_boolean will be deprecated. Use dc_icon_for_boolean instead.')
|
238
|
+
dc_icon_for_boolean(value)
|
239
|
+
end
|
240
|
+
|
241
|
+
############################################################################
|
242
|
+
# Returns html code for displaying date/time formatted by strftime. Will return '' if value is nil.
|
243
|
+
#
|
244
|
+
# Parameters:
|
245
|
+
# [value] Date/DateTime/Time.
|
246
|
+
# [format] String. strftime format mask. Defaults to locale's default format.
|
247
|
+
############################################################################
|
248
|
+
def self.dc_format_date_time(value, format=nil)
|
249
|
+
return '' if value.blank?
|
250
|
+
|
251
|
+
format ||= value.class == Date ? t('date.formats.default') : t('time.formats.default')
|
252
|
+
if format.size == 1
|
253
|
+
format = format.match(/d/i) ? t('date.formats.default') : t('time.formats.default')
|
254
|
+
end
|
255
|
+
value.strftime(format)
|
256
|
+
end
|
257
|
+
|
258
|
+
def dc_format_date_time(value, format=nil) #:nodoc:
|
259
|
+
CmsCommonHelper.dc_format_date_time(value, format)
|
260
|
+
end
|
261
|
+
|
262
|
+
####################################################################
|
263
|
+
#
|
264
|
+
####################################################################
|
265
|
+
def dc_date_time(value, format) #:nodoc:
|
266
|
+
dc_deprecate 'dc_date_time will be deprecated! Use dc_format_date_time instead.'
|
267
|
+
dc_format_date_time(value, format)
|
268
|
+
end
|
269
|
+
|
270
|
+
############################################################################
|
271
|
+
# Returns html code for displaying formatted number.
|
272
|
+
#
|
273
|
+
# Parameters:
|
274
|
+
# [value] Numeric number.
|
275
|
+
# [decimals] Integer. Number of decimals
|
276
|
+
# [separator] String. Decimals separator
|
277
|
+
# [delimiter] String. Thousands delimiter.
|
278
|
+
# [currency] String. Currency symbol if applied to result string.
|
279
|
+
############################################################################
|
280
|
+
def self.dc_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, currency=nil)
|
281
|
+
decimals ||= I18n.t('number.currency.format.precision')
|
282
|
+
separator ||= I18n.t('number.currency.format.separator')
|
283
|
+
separator = '' if decimals == 0
|
284
|
+
delimiter ||= I18n.t('number.currency.format.delimiter')
|
285
|
+
whole, dec = value.to_s.split('.')
|
286
|
+
whole = '0' if whole.blank?
|
287
|
+
# remove and remember sign
|
288
|
+
sign = ''
|
289
|
+
if whole[0] == '-'
|
290
|
+
whole.delete_prefix!('-')
|
291
|
+
sign << '-'
|
292
|
+
end
|
293
|
+
# format decimals
|
294
|
+
dec ||= '0'
|
295
|
+
dec = dec[0,decimals]
|
296
|
+
while dec.size < decimals do dec += '0' end
|
297
|
+
# slice whole on chunks of 3
|
298
|
+
ar = []
|
299
|
+
while whole.size > 0 do
|
300
|
+
n = whole.size >=3 ? 3 : whole.size
|
301
|
+
ar << whole.slice!(n*-1,n)
|
302
|
+
end
|
303
|
+
# put it all back and format
|
304
|
+
"#{sign}#{ar.reverse.join(delimiter)}#{separator}#{dec}"
|
305
|
+
end
|
306
|
+
|
307
|
+
def dc_format_number(value=0, decimals=nil, separator=nil, delimiter=nil, currency=nil) #:nodoc:
|
308
|
+
CmsCommonHelper.dc_format_number(value, decimals, separator, delimiter, currency)
|
309
|
+
end
|
310
|
+
|
311
|
+
end
|