drg_cms 0.6.0.6 → 0.6.0.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|