drg_cms 0.7.0.2 → 0.7.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +110 -35
  3. data/app/assets/javascripts/drg_cms/jquery.bpopup.js +372 -0
  4. data/app/assets/javascripts/drg_cms_application.js +1 -1
  5. data/app/assets/javascripts/drg_cms_cms.js +1 -1
  6. data/app/assets/stylesheets/drg_cms/drg_cms.css +126 -36
  7. data/app/assets/stylesheets/drg_cms/select-multiple.css +6 -7
  8. data/app/controllers/cmsedit_controller.rb +78 -47
  9. data/app/controllers/dc_application_controller.rb +22 -25
  10. data/app/controllers/dc_common_controller.rb +9 -6
  11. data/app/controllers/dc_main_controller.rb +0 -1
  12. data/app/controls/{dc_category_control.rb → dc_gallery_control.rb} +15 -30
  13. data/app/controls/dc_image_control.rb +180 -0
  14. data/app/controls/dc_page_control.rb +3 -3
  15. data/app/controls/dc_poll_result_control.rb +38 -39
  16. data/app/controls/dc_report.rb +9 -4
  17. data/app/controls/dc_setup_control.rb +53 -0
  18. data/app/controls/design_element_settings_control.rb +88 -37
  19. data/app/forms/all_options.yml +20 -9
  20. data/app/forms/cms_menu.yml +14 -2
  21. data/app/forms/dc_gallery.yml +1 -1
  22. data/app/forms/dc_image.yml +122 -0
  23. data/app/forms/dc_image_search.yml +72 -0
  24. data/app/forms/dc_page.yml +11 -8
  25. data/app/forms/dc_poll.yml +2 -1
  26. data/app/forms/dc_poll_result.yml +10 -7
  27. data/app/forms/dc_setup.yml +45 -0
  28. data/app/forms/dc_steps_template.yml +6 -2
  29. data/app/helpers/cms_common_helper.rb +36 -24
  30. data/app/helpers/cms_edit_helper.rb +26 -33
  31. data/app/helpers/cms_helper.rb +29 -12
  32. data/app/helpers/cms_index_helper.rb +109 -80
  33. data/app/helpers/dc_application_helper.rb +108 -86
  34. data/app/helpers/dc_image_helper.rb +127 -0
  35. data/app/models/concerns/dc_policy_rule_concern.rb +1 -1
  36. data/app/models/concerns/dc_user_concern.rb +13 -5
  37. data/app/models/dc_big_table.rb +1 -1
  38. data/app/models/dc_category.rb +12 -0
  39. data/app/models/dc_design.rb +5 -4
  40. data/app/models/dc_filter.rb +24 -27
  41. data/app/models/dc_image.rb +237 -0
  42. data/app/models/dc_internals.rb +5 -9
  43. data/app/models/dc_memory.rb +2 -2
  44. data/app/models/dc_policy_role.rb +8 -8
  45. data/app/models/dc_setup.rb +111 -0
  46. data/app/models/drgcms_form_fields/datetime_picker.rb +1 -1
  47. data/app/models/drgcms_form_fields/drgcms_field.rb +9 -26
  48. data/app/models/drgcms_form_fields/embedded.rb +28 -17
  49. data/app/models/drgcms_form_fields/journal_diff.rb +2 -2
  50. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +88 -76
  51. data/app/models/drgcms_form_fields/select.rb +41 -19
  52. data/app/models/drgcms_form_fields/text_with_select.rb +5 -9
  53. data/app/renderers/dc_big_menu_renderer.rb +18 -20
  54. data/app/renderers/dc_gallery_renderer.rb +10 -4
  55. data/app/renderers/dc_menu_renderer.rb +21 -58
  56. data/app/renderers/dc_page_renderer.rb +7 -7
  57. data/app/renderers/dc_poll_renderer.rb +13 -12
  58. data/app/renderers/dc_simple_menu_renderer.rb +1 -1
  59. data/app/views/cmsedit/_edit_stuff.html.erb +4 -1
  60. data/app/views/cmsedit/edit.html.erb +1 -1
  61. data/app/views/cmsedit/index.html.erb +1 -1
  62. data/app/views/cmsedit/new.html.erb +1 -0
  63. data/config/locales/drgcms_en.yml +22 -2
  64. data/config/locales/drgcms_sl.yml +25 -6
  65. data/config/locales/models_en.yml +50 -1
  66. data/config/locales/models_sl.yml +60 -1
  67. data/drg_cms.gemspec +1 -1
  68. data/lib/drg_cms/version.rb +1 -1
  69. data/lib/drg_cms.rb +40 -27
  70. data/lib/generators/convert_to_ar/USAGE +8 -0
  71. data/lib/generators/convert_to_ar/convert_to_ar_generator.rb +158 -0
  72. data/lib/generators/new_drg_form/new_drg_form_generator.rb +32 -14
  73. metadata +19 -10
  74. data/app/assets/javascripts/drg_cms/jquery.bpopup.min.js +0 -7
  75. data/app/views/layouts/__cmsedit.html.erb +0 -16
data/lib/drg_cms.rb CHANGED
@@ -27,9 +27,9 @@ end
27
27
 
28
28
  ###############################################################################
29
29
  # When new plugin with its own DRG forms is added to application, path to
30
- # forms directory must be send to DrgCms module. Paths are saved into @@paths hash variable.
30
+ # forms directory must be send to DrgCms module. Paths are saved into internal @@paths variable.
31
31
  #
32
- # Adding path is best done in plugin mudule initialization code.
32
+ # Adding path is best done in plugin module initialization code.
33
33
  #
34
34
  # Parameters:
35
35
  # [path] String. Path to forms directory
@@ -40,21 +40,18 @@ end
40
40
  # module MyPlugin
41
41
  # end
42
42
  #
43
- # DrgCms.add_forms_path File.expand_path("../../app/forms", __FILE__)
43
+ # DrgCms.add_forms_path(Rails.root.join('app/forms'), Rails.root.join('app/reports/forms'))
44
44
  ###############################################################################
45
- def self.add_forms_path(path)
45
+ def self.add_forms_path(*paths)
46
46
  if @@paths[:forms].nil?
47
- @@paths[:forms] = []
48
- # default application forms path
49
- # @@paths[:forms] << Rails.root.join('app/forms')
50
- # DrgCms forms path
51
- @@paths[:forms] << File.expand_path("../../app/forms", __FILE__)
47
+ # DrgCms own forms path by default
48
+ @@paths[:forms] = [File.expand_path("../../app/forms", __FILE__)]
52
49
  end
53
- @@paths[:forms] << path
50
+ @@paths[:forms] += paths
54
51
  end
55
52
 
56
53
  ###############################################################################
57
- # Patching is one of the rubies best strenghts and also its curse. Loading
54
+ # Patching is one of the rubies best strengths and also its curse. Loading
58
55
  # patches in development has become real problem for developers. This is my
59
56
  # way of patch loading.
60
57
  #
@@ -77,15 +74,13 @@ end
77
74
  ###############################################################################
78
75
  def self.add_patches_path(path)
79
76
  self.add_path(:patches, path)
80
- # Dir["#{path}/**/*.rb"].each { |path| p path; require_dependency path }
81
- # Dir["#{path}/**/*.rb"].each { |file| p file; require file }
82
77
  end
83
78
 
84
79
  ###############################################################################
85
80
  # General add path method. Paths are saved into @@paths hash variable. Paths can
86
81
  # then be reused in different parts of application.
87
82
  #
88
- # Adding paths is best done in plugin mudule initialization code.
83
+ # Adding paths is best done in plugin module initialization code.
89
84
  #
90
85
  # Parameters:
91
86
  # [type] Symbol. Defines type of data. Current used values are :forms, :patches
@@ -120,9 +115,9 @@ end
120
115
 
121
116
  ####################################################################
122
117
  # Checks if any errors exist on document and writes error log. It can also
123
- # crash if requested. This is mostly usefull in development for debuging
118
+ # crash if requested. This is mostly useful in development for debugging
124
119
  # model errors or when updating multiple collections and each save must be
125
- # checked if succesfull.
120
+ # checked if successful.
126
121
  #
127
122
  # @param [Document] Document object which will be checked
128
123
  # @param [Boolean] If true method should end in runtime error. Default = false.
@@ -165,6 +160,7 @@ end
165
160
  # @param [String] Optional key to be deleted
166
161
  ####################################################################
167
162
  def self.cache_clear(key = nil)
163
+ return unless Rails.cache
168
164
  return Rails.cache.clear if key.nil?
169
165
 
170
166
  if redis_cache_store?
@@ -182,14 +178,18 @@ end
182
178
  # @return [Object] Data returned from cache
183
179
  ####################################################################
184
180
  def self.cache_read(keys)
185
- if redis_cache_store?
186
- keys = keys.dup
187
- first = keys.shift
188
- data = Rails.cache.redis.hget(first, keys.join(''))
189
- data ? Marshal.load(data) : nil
190
- else
191
- Rails.cache.read(keys.join(''))
192
- end
181
+ data = if redis_cache_store?
182
+ tmp_keys = keys.dup
183
+ first_key = tmp_keys.shift
184
+ cached = Rails.cache.redis.hget(first_key, tmp_keys.join(''))
185
+ cached ? Marshal.load(cached) : nil
186
+ else
187
+ Rails.cache.read(keys.join(''))
188
+ end
189
+ return data if data
190
+ return nil unless block_given?
191
+
192
+ self.cache_write(keys, yield)
193
193
  end
194
194
 
195
195
  ####################################################################
@@ -202,15 +202,28 @@ end
202
202
  ####################################################################
203
203
  def self.cache_write(keys, data)
204
204
  if redis_cache_store?
205
- keys = keys.dup
206
- first = keys.shift
207
- Rails.cache.redis.hset(first, keys.join(''), Marshal.dump(data))
205
+ tmp_keys = keys.dup
206
+ first_key = tmp_keys.shift
207
+ Rails.cache.redis.hset(first_key, tmp_keys.join(''), Marshal.dump(data))
208
208
  else
209
209
  Rails.cache.write(keys.join(''), data)
210
210
  end
211
211
  data
212
212
  end
213
213
 
214
+ ####################################################################
215
+ # Reads data from mongoid cache. Mongoid has it's own cache, which can be
216
+ # used to cache results on single request.
217
+ #
218
+ # @param [model] class: Model name
219
+ # @param [id] String || BSON::ObjectId : Id
220
+ #
221
+ # @return [Object] data document.
222
+ ####################################################################
223
+ def self.cached(model, id)
224
+ id ? Mongo::QueryCache.cache { model.find(id) } : nil
225
+ end
226
+
214
227
  ###############################################################################
215
228
  # All Routes required by DrgCms.
216
229
  #
@@ -0,0 +1,8 @@
1
+ Description:
2
+ new_drg_form_generator will create DRG form from model description.
3
+
4
+ Example:
5
+ rails generate new_drg_form model_name
6
+
7
+ This will create:
8
+ forms/model_name.yml
@@ -0,0 +1,158 @@
1
+ class ConvertToArGenerator < Rails::Generators::NamedBase
2
+
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ desc "This generator converts mongoid model to active_record migration"
5
+ argument :model_name, :type => :string, :default => 'dc_*'
6
+ argument :migration_name, :type => :string, :default => 'initial_migration'
7
+
8
+ TYPES = {
9
+ String => :string,
10
+ Time => :datetime,
11
+ DateTime => :datetime,
12
+ Object => :integer,
13
+ Integer => :integer,
14
+ BSON::ObjectId => :integer,
15
+ Mongoid::Boolean => :boolean,
16
+ BigDecimal => [:decimal, :precision => 8, :scale => 2, :default => 0.00],
17
+ Date => :date,
18
+ Hash => :text,
19
+ Array => :text
20
+ }
21
+
22
+ ###########################################################################
23
+ #
24
+ ###########################################################################
25
+ def create_migration
26
+ p model_name, migration_name
27
+
28
+ code = model_name.match(/\*/) ? migrate_many(model_name) : migrate_one(model_name)
29
+ code = top(migration_name) + code + bottom
30
+ create_file "db/#{source_file_name(migration_name).underscore}.rb", code
31
+ end
32
+
33
+ private
34
+
35
+ ###########################################################################
36
+ #
37
+ ###########################################################################
38
+ def source_file_name(migration)
39
+ "#{Time.now.strftime("%Y%m%d%H%M%S")}_#{migration}"
40
+ end
41
+
42
+ ###########################################################################
43
+ #
44
+ ###########################################################################
45
+ def migrate_one(model_name)
46
+ mongo_model = model_name.classify.constantize
47
+ new_model_name = model_name.start_with?('dc_') ? model_name.sub('dc_', 'ar_') : model_name
48
+ code = %( create_table :#{new_model_name.pluralize} do |t|\n)
49
+ left = ' t.'
50
+ timestamps = false
51
+ # fields
52
+ document = mongo_model.new
53
+ document.attribute_names.each do |attribute_name|
54
+ next if attribute_name == '_id'
55
+ if %w[created_at updated_at].include?(attribute_name)
56
+ timestamps = true
57
+ next
58
+ end
59
+
60
+ options = mongo_model.fields[attribute_name].options
61
+ pp "Undefined type #{options[:type]} for #{mongo_model}.#{attribute_name}" unless TYPES[options[:type]]
62
+ att_name = attribute_name.sub(/^dc_/,'ar_')
63
+ code << %(#{left}#{TYPES[options[:type]]} :#{att_name})
64
+ code << %(, default: #{get_default(options[:default], options[:type])}) if options[:default]
65
+ code << "\n"
66
+ end
67
+ code << %(\n#{left}timestamps\n) if timestamps
68
+
69
+ # indexes
70
+ if document.index_specifications.any?
71
+ code << "\n"
72
+ document.index_specifications.each do |index|
73
+ code << "#{left}index "
74
+ code << (index.fields.size > 1 ? "[:#{index.fields.join(', :')}]" : ":#{index.fields.first}")
75
+ code << ", #{index.options.to_s.gsub(/\{|\}/, '')}" if index.options.size > 0
76
+ code << "\n"
77
+ end
78
+ end
79
+
80
+ # export some test data
81
+ data = []
82
+ mongo_model.all.limit(5).each do |doc|
83
+ #data << doc.as_document.inject([]) { |r, e| [e.first.sub(/^dc_/,'ar_'), e.last] }
84
+ data << doc.as_document.map { |e| [e.first.sub(/^dc_/,'ar_'), e.last] }
85
+ end
86
+ File.write("db/#{new_model_name}.json", data.to_json)
87
+
88
+ code << " end\n\n"
89
+ end
90
+
91
+ ###########################################################################
92
+ #
93
+ ###########################################################################
94
+ def get_default(default, type)
95
+ case type.to_s
96
+ when 'String' then "'#{default}'"
97
+ else default
98
+ end
99
+ end
100
+
101
+ #########################################################################
102
+ # Return array of all models found in application.
103
+ #########################################################################
104
+ def all_collections
105
+ collections = []
106
+ DrgCms.paths(:forms).each do |path|
107
+ models_dir = File.expand_path("../models", path)
108
+ Dir["#{models_dir}/*.rb"].each do |model_file|
109
+ model_file =~ /(.*)\/(.*).rb/
110
+ # check if model exists
111
+ collection = $2.camelize.constantize.new rescue nil
112
+ collections << collection.class.to_s.underscore if collection&.respond_to?(:_id)
113
+ end
114
+ end
115
+ collections.sort
116
+ end
117
+
118
+ ###########################################################################
119
+ #
120
+ ###########################################################################
121
+ def migrate_many(model_name)
122
+ selector = model_name[0, model_name.index('*') - 1].downcase
123
+ p selector
124
+
125
+ list = all_collections.select { |name| name.starts_with?(selector) }
126
+ list.inject('') { |r, e| r << migrate_one(e) }
127
+ end
128
+
129
+ ###########################################################################
130
+ #class #{migration_name} < ActiveRecord::Migration[7.0]
131
+ # def change
132
+ # create_table :products do |t|
133
+ # t.string :name
134
+ # t.text :description
135
+ #
136
+ # t.timestamps = true
137
+ # end
138
+ # end
139
+ # end
140
+ ###########################################################################
141
+ def top(migration_name)
142
+ <<EOT
143
+ class #{migration_name.classify} < ActiveRecord::Migration[7.0]
144
+ def change
145
+ EOT
146
+ end
147
+
148
+ ###########################################################################
149
+ #
150
+ ###########################################################################
151
+ def bottom
152
+ <<EOT
153
+ end
154
+ end
155
+ EOT
156
+ end
157
+
158
+ end
@@ -147,22 +147,24 @@ end
147
147
  ###########################################################################
148
148
  #
149
149
  ###########################################################################
150
- def form_field(field, index, offset)
151
- helper = I18n.t("helpers.label.#{@file_name}.choices4_#{field}")
150
+ def form_field(field_name, index, offset, field_type)
151
+ helper = I18n.t("helpers.label.#{@file_name}.choices4_#{field_name}")
152
152
  type, eval = 'select',''
153
- if helper.class == Hash or helper.match( 'translation missing' )
154
- if field[-3,3] == '_id'
155
- eval = "eval: dc_choices4('#{field[0,field.size-3]}','change_to_description_field_name','_id')\n"
153
+ if helper.class == Hash || helper.match( 'Translation missing' )
154
+ if field_name[-3, 3] == '_id'
155
+ eval = "eval: dc_choices4('#{field_name[0, field_name.size - 3]}', 'description_field_name', 'id')\n"
156
+ elsif field_type.match('Boolean')
157
+ type = 'check_box'
156
158
  else
157
159
  type = 'text_field'
158
160
  end
159
161
  end
160
- #
162
+
161
163
  yml = ' '*offset
162
164
  yml << "#{index}:\n"
163
165
  offset += 2
164
- #
165
- yml << ' '*offset + "name: #{field}\n"
166
+
167
+ yml << ' '*offset + "name: #{field_name}\n"
166
168
  yml << ' '*offset + "type: #{type}\n"
167
169
  yml << ' '*offset + eval if eval.size > 0
168
170
  yml << ' '*offset + "size: 50\n" if type == 'text_field'
@@ -196,40 +198,56 @@ end
196
198
  #
197
199
  ###########################################################################
198
200
  def form_fields_options
199
- forbidden = ['_id','created_by','updated_by','created_at','updated_at']
201
+ forbidden = %w[_id created_by updated_by created_at updated_at]
200
202
  tab_index = 1
201
203
  field_index = 0
202
204
  if options.tabs?
203
205
  yml = " tabs:\n"
204
- @model.attribute_names.each do |attr_name|
206
+ @model.fields.each do |attr_name, field|
205
207
  next if forbidden.include?(attr_name)
208
+
206
209
  if field_index%100 == 0
207
210
  yml << " tab#{tab_index}:\n"
208
211
  field_index = 0
209
212
  tab_index += 1
210
213
  end
211
214
  field_index += 10
212
- yml << form_field(attr_name, field_index, 6)
215
+ yml << form_field(attr_name, field_index, 6, field.options[:type].to_s)
213
216
  end
214
217
  yml << " tab#{tab_index}:\n"
215
218
  yml << embedded_form_field(6)
219
+
216
220
  else
217
221
  yml = " fields:\n"
218
- @model.attribute_names.each do |attr_name|
222
+ @model.fields.each do |attr_name, field|
219
223
  next if forbidden.include?(attr_name)
224
+
220
225
  field_index += 10
221
- yml << form_field(attr_name, field_index, 4)
226
+ yml << form_field(attr_name, field_index, 4, field.options[:type].to_s)
222
227
  end
223
228
  yml << embedded_form_field(4)
224
229
  end
225
230
  yml
226
231
  end
227
232
 
233
+ ###########################################################################
234
+ #
235
+ ###########################################################################
236
+ def xform_fields_options
237
+ forbidden = %w[_id created_by updated_by created_at updated_at]
238
+ tab_index = 1
239
+ field_index = 0
240
+ @model.fields.each do |name, field|
241
+ pp [name, field.options[:type].to_s]
242
+ #pp [name, type]
243
+ end
244
+ end
245
+
228
246
  ###########################################################################
229
247
  #
230
248
  ###########################################################################
231
249
  def localize_options
232
- forbidden = ['_id','created_by','updated_by','created_at','updated_at']
250
+ forbidden = %w[_id created_by updated_by created_at updated_at]
233
251
  yml =<<EOT
234
252
 
235
253
  #################################################################
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drg_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0.2
4
+ version: 0.7.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damjan Rems
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-17 00:00:00.000000000 Z
11
+ date: 2024-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: non-stupid-digest-assets
56
+ name: non-digest-assets
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -196,7 +196,7 @@ files:
196
196
  - app/assets/images/throbber.gif
197
197
  - app/assets/javascripts/drg_cms/drg_cms.js
198
198
  - app/assets/javascripts/drg_cms/jquery-migrate.js
199
- - app/assets/javascripts/drg_cms/jquery.bpopup.min.js
199
+ - app/assets/javascripts/drg_cms/jquery.bpopup.js
200
200
  - app/assets/javascripts/drg_cms/jquery.datetimepicker.js
201
201
  - app/assets/javascripts/drg_cms/jstree.min.js
202
202
  - app/assets/javascripts/drg_cms/select-multiple.js
@@ -217,11 +217,13 @@ files:
217
217
  - app/controllers/dc_main_controller.rb
218
218
  - app/controls/browse_models_control.rb
219
219
  - app/controls/cmsedit_control.rb
220
- - app/controls/dc_category_control.rb
220
+ - app/controls/dc_gallery_control.rb
221
221
  - app/controls/dc_help_control.rb
222
+ - app/controls/dc_image_control.rb
222
223
  - app/controls/dc_page_control.rb
223
224
  - app/controls/dc_poll_result_control.rb
224
225
  - app/controls/dc_report.rb
226
+ - app/controls/dc_setup_control.rb
225
227
  - app/controls/design_element_settings_control.rb
226
228
  - app/forms/all_options.yml
227
229
  - app/forms/cms_forms.yml
@@ -240,6 +242,8 @@ files:
240
242
  - app/forms/dc_gallery.yml
241
243
  - app/forms/dc_help_1.yml
242
244
  - app/forms/dc_ident.yml
245
+ - app/forms/dc_image.yml
246
+ - app/forms/dc_image_search.yml
243
247
  - app/forms/dc_journal.yml
244
248
  - app/forms/dc_json_ld.yml
245
249
  - app/forms/dc_key_value.yml
@@ -261,6 +265,7 @@ files:
261
265
  - app/forms/dc_poll_result_export.yml
262
266
  - app/forms/dc_removed_url.yml
263
267
  - app/forms/dc_seo.yml
268
+ - app/forms/dc_setup.yml
264
269
  - app/forms/dc_simple_menu.yml
265
270
  - app/forms/dc_simple_menu_item.yml
266
271
  - app/forms/dc_site.yml
@@ -277,6 +282,7 @@ files:
277
282
  - app/helpers/cms_index_helper.rb
278
283
  - app/helpers/dc_application_helper.rb
279
284
  - app/helpers/dc_category_helper.rb
285
+ - app/helpers/dc_image_helper.rb
280
286
  - app/models/concerns/dc_page_concern.rb
281
287
  - app/models/concerns/dc_piece_concern.rb
282
288
  - app/models/concerns/dc_policy_rule_concern.rb
@@ -295,6 +301,7 @@ files:
295
301
  - app/models/dc_folder_permission.rb
296
302
  - app/models/dc_gallery.rb
297
303
  - app/models/dc_ident.rb
304
+ - app/models/dc_image.rb
298
305
  - app/models/dc_internals.rb
299
306
  - app/models/dc_journal.rb
300
307
  - app/models/dc_json_ld.rb
@@ -315,6 +322,7 @@ files:
315
322
  - app/models/dc_poll_item.rb
316
323
  - app/models/dc_poll_result.rb
317
324
  - app/models/dc_removed_url.rb
325
+ - app/models/dc_setup.rb
318
326
  - app/models/dc_simple_menu.rb
319
327
  - app/models/dc_simple_menu_item.rb
320
328
  - app/models/dc_site.rb
@@ -376,7 +384,6 @@ files:
376
384
  - app/views/dc_common/_help.html.erb
377
385
  - app/views/dc_common/_iframe_edit.html.erb
378
386
  - app/views/dc_common/paste_clipboard.html.erb
379
- - app/views/layouts/__cmsedit.html.erb
380
387
  - app/views/layouts/cms.html.erb
381
388
  - app/views/layouts/content.html.erb
382
389
  - app/views/layouts/models.html.erb
@@ -396,6 +403,8 @@ files:
396
403
  - lib/drg_cms.rb
397
404
  - lib/drg_cms/engine.rb
398
405
  - lib/drg_cms/version.rb
406
+ - lib/generators/convert_to_ar/USAGE
407
+ - lib/generators/convert_to_ar/convert_to_ar_generator.rb
399
408
  - lib/generators/new_drg_form/USAGE
400
409
  - lib/generators/new_drg_form/new_drg_form_generator.rb
401
410
  - lib/tasks/browse_models.rake
@@ -440,7 +449,7 @@ homepage: https://www.drgcms.org
440
449
  licenses:
441
450
  - MIT
442
451
  metadata: {}
443
- post_install_message:
452
+ post_install_message:
444
453
  rdoc_options: []
445
454
  require_paths:
446
455
  - lib
@@ -455,8 +464,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
455
464
  - !ruby/object:Gem::Version
456
465
  version: '0'
457
466
  requirements: []
458
- rubygems_version: 3.3.15
459
- signing_key:
467
+ rubygems_version: 3.4.10
468
+ signing_key:
460
469
  specification_version: 4
461
470
  summary: 'DRG: Rapid web application development tool and CMS for Ruby, Rails and
462
471
  MongoDB'
@@ -1,7 +0,0 @@
1
- /*================================================================================
2
- * @name: bPopup - if you can't get it up, use bPopup
3
- * @author: (c)Bjoern Klinggaard (twitter@bklinggaard)
4
- * @demo: http://dinbror.dk/bpopup
5
- * @version: 0.11.0.min
6
- ================================================================================*/
7
- (function(c){c.fn.bPopup=function(A,E){function L(){a.contentContainer=c(a.contentContainer||b);switch(a.content){case "iframe":var d=c('<iframe class="b-iframe" '+a.iframeAttr+"></iframe>");d.appendTo(a.contentContainer);t=b.outerHeight(!0);u=b.outerWidth(!0);B();d.attr("src",a.loadUrl);l(a.loadCallback);break;case "image":B();c("<img />").load(function(){l(a.loadCallback);F(c(this))}).attr("src",a.loadUrl).hide().appendTo(a.contentContainer);break;default:B(),c('<div class="b-ajax-wrapper"></div>').load(a.loadUrl,a.loadData,function(d,b,e){l(a.loadCallback,b);F(c(this))}).hide().appendTo(a.contentContainer)}}function B(){a.modal&&c('<div class="b-modal '+e+'"></div>').css({backgroundColor:a.modalColor,position:"fixed",top:0,right:0,bottom:0,left:0,opacity:0,zIndex:a.zIndex+v}).appendTo(a.appendTo).fadeTo(a.speed,a.opacity);C();b.data("bPopup",a).data("id",e).css({left:"slideIn"==a.transition||"slideBack"==a.transition?"slideBack"==a.transition?f.scrollLeft()+w:-1*(x+u):m(!(!a.follow[0]&&n||g)),position:a.positionStyle||"absolute",top:"slideDown"==a.transition||"slideUp"==a.transition?"slideUp"==a.transition?f.scrollTop()+y:z+-1*t:p(!(!a.follow[1]&&q||g)),"z-index":a.zIndex+v+1}).each(function(){a.appending&&c(this).appendTo(a.appendTo)});G(!0)}function r(){a.modal&&c(".b-modal."+b.data("id")).fadeTo(a.speed,0,function(){c(this).remove()});a.scrollBar||c("html").css("overflow","auto");c(".b-modal."+e).unbind("click");f.unbind("keydown."+e);k.unbind("."+e).data("bPopup",0<k.data("bPopup")-1?k.data("bPopup")-1:null);b.undelegate(".bClose, ."+a.closeClass,"click."+e,r).data("bPopup",null);clearTimeout(H);G();return!1}function I(d){y=k.height();w=k.width();h=D();if(h.x||h.y)clearTimeout(J),J=setTimeout(function(){C();d=d||a.followSpeed;var e={};h.x&&(e.left=a.follow[0]?m(!0):"auto");h.y&&(e.top=a.follow[1]?p(!0):"auto");b.dequeue().each(function(){g?c(this).css({left:x,top:z}):c(this).animate(e,d,a.followEasing)})},50)}function F(d){var c=d.width(),e=d.height(),f={};a.contentContainer.css({height:e,width:c});e>=b.height()&&(f.height=b.height());c>=b.width()&&(f.width=b.width());t=b.outerHeight(!0);u=b.outerWidth(!0);C();a.contentContainer.css({height:"auto",width:"auto"});f.left=m(!(!a.follow[0]&&n||g));f.top=p(!(!a.follow[1]&&q||g));b.animate(f,250,function(){d.show();h=D()})}function M(){k.data("bPopup",v);b.delegate(".bClose, ."+a.closeClass,"click."+e,r);a.modalClose&&c(".b-modal."+e).css("cursor","pointer").bind("click",r);N||!a.follow[0]&&!a.follow[1]||k.bind("scroll."+e,function(){if(h.x||h.y){var d={};h.x&&(d.left=a.follow[0]?m(!g):"auto");h.y&&(d.top=a.follow[1]?p(!g):"auto");b.dequeue().animate(d,a.followSpeed,a.followEasing)}}).bind("resize."+e,function(){I()});a.escClose&&f.bind("keydown."+e,function(a){27==a.which&&r()})}function G(d){function c(e){b.css({display:"block",opacity:1}).animate(e,a.speed,a.easing,function(){K(d)})}switch(d?a.transition:a.transitionClose||a.transition){case "slideIn":c({left:d?m(!(!a.follow[0]&&n||g)):f.scrollLeft()-(u||b.outerWidth(!0))-200});break;case "slideBack":c({left:d?m(!(!a.follow[0]&&n||g)):f.scrollLeft()+w+200});break;case "slideDown":c({top:d?p(!(!a.follow[1]&&q||g)):f.scrollTop()-(t||b.outerHeight(!0))-200});break;case "slideUp":c({top:d?p(!(!a.follow[1]&&q||g)):f.scrollTop()+y+200});break;default:b.stop().fadeTo(a.speed,d?1:0,function(){K(d)})}}function K(d){d?(M(),l(E),a.autoClose&&(H=setTimeout(r,a.autoClose))):(b.hide(),l(a.onClose),a.loadUrl&&(a.contentContainer.empty(),b.css({height:"auto",width:"auto"})))}function m(a){return a?x+f.scrollLeft():x}function p(a){return a?z+f.scrollTop():z}function l(a,e){c.isFunction(a)&&a.call(b,e)}function C(){z=q?a.position[1]:Math.max(0,(y-b.outerHeight(!0))/2-a.amsl);x=n?a.position[0]:(w-b.outerWidth(!0))/2;h=D()}function D(){return{x:w>b.outerWidth(!0),y:y>b.outerHeight(!0)}}c.isFunction(A)&&(E=A,A=null);var a=c.extend({},c.fn.bPopup.defaults,A);a.scrollBar||c("html").css("overflow","hidden");var b=this,f=c(document),k=c(window),y=k.height(),w=k.width(),N=/OS 6(_\d)+/i.test(navigator.userAgent),v=0,e,h,q,n,g,z,x,t,u,J,H;b.close=function(){r()};b.reposition=function(a){I(a)};return b.each(function(){c(this).data("bPopup")||(l(a.onOpen),v=(k.data("bPopup")||0)+1,e="__b-popup"+v+"__",q="auto"!==a.position[1],n="auto"!==a.position[0],g="fixed"===a.positionStyle,t=b.outerHeight(!0),u=b.outerWidth(!0),a.loadUrl?L():B())})};c.fn.bPopup.defaults={amsl:50,appending:!0,appendTo:"body",autoClose:!1,closeClass:"b-close",content:"ajax",contentContainer:!1,easing:"swing",escClose:!0,follow:[!0,!0],followEasing:"swing",followSpeed:500,iframeAttr:'scrolling="no" frameborder="0"',loadCallback:!1,loadData:!1,loadUrl:!1,modal:!0,modalClose:!0,modalColor:"#000",onClose:!1,onOpen:!1,opacity:.7,position:["auto","auto"],positionStyle:"absolute",scrollBar:!0,speed:250,transition:"fadeIn",transitionClose:!1,zIndex:9997}})(jQuery);
@@ -1,16 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title><%= @page_title %></title>
5
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
- <%= stylesheet_link_tag "cms", media: 'all' %>
7
- <style type="text/css" media="all"><%= "#{@site.css}#{@design.css}\n#{@page.css}".html_safe if @page %></style>
8
- <%= @site.header.html_safe if @site %>
9
- <%= javascript_include_tag "cms" %>
10
- <%= csrf_meta_tags %>
11
- </head>
12
-
13
- <body>
14
- <%= yield %>
15
- </body>
16
- </html>