drg_cms 0.5.8.2 → 0.5.9

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.
@@ -68,7 +68,6 @@ def self.get_filter(filter)
68
68
  value = BSON::ObjectId.from_string(value) rescue nil
69
69
  end
70
70
  #
71
- p yaml,'***************'
72
71
  if ['eq','like'].include?(yaml['operation'])
73
72
  model.where(field => value)
74
73
  # TODO in operator
@@ -84,13 +83,13 @@ end
84
83
  def self.get_field_form_definition(name, parent) #:nodoc:
85
84
  form = parent.form
86
85
  form['form']['tabs'].each do |tab|
87
- tab.each do |field|
88
- next if field.class == String # tab name
89
- field.each {|k,v| return v if v['name'] == name }
90
- end
86
+ # Array with 2 elements. First is tabname, second is data
87
+ fields = tab.last
88
+ fields.each {|k,v| return v if (k.class == Fixnum and v['name'] == name) }
91
89
  end if form['form']['tabs'] # I know. But nice.
92
90
  #
93
91
  form['form']['fields'].each do |field|
92
+ next unless field.first.class == Fixnum # options
94
93
  return field.last if field.last['name'] == name
95
94
  end if form['form']['fields']
96
95
  nil
@@ -106,33 +105,40 @@ def self.get_filter_field(parent)
106
105
  #
107
106
  filter = YAML.load(filter) rescue nil
108
107
  return '' if filter.nil?
109
- # return '' if filter['input'].nil?
110
108
  #
111
- p filter
112
109
  field = get_field_form_definition(filter['field'], parent)
113
110
  return '' if field.nil? and filter['input'].nil?
114
111
  field = {} if field.nil?
115
- # field redefined with input keyword
116
- field['name'] = 'filter_field'
117
- field['type'] = filter['input'] if filter['input'].size > 5
118
- field['html'] = {} if field['html'].nil?
112
+ # If field has choices available in labels, use them. This is most likely select input field.
113
+ if field['name']
114
+ choices = parent.t('helpers.label.' + parent.form['table'] + '.choices4_' + field['name'] )
115
+ unless choices.match( 'translation missing' ) or choices.match('helpers.label')
116
+ field['choices'] = choices
117
+ end
118
+ end
119
+ # field redefined with input keyword. Name must start with _
120
+ field['name'] = '_filter_field'
121
+ field['type'] = filter['input'] if filter['input'].to_s.size > 5
122
+ field['type'] ||= 'text_field'
123
+ field['html'] ||= {}
119
124
  field['html']['size'] = 20
125
+ # Start with last entered value
120
126
  field['html']['value'] = filter['value'] unless filter['value'] == '#NIL'
121
-
127
+ field['html']['selected'] = field['html']['value'] # for select field
128
+ # url for filter ON action
122
129
  field['html']['data-url'] = parent.url_for(
123
130
  controller: 'cmsedit',action: :index, filter: 'on',
124
131
  table: parent.form['table'], formname: parent.form['formname'])
125
132
  url = field['html']['data-url']
126
- #
127
- field_type = filter['input'].size > 5 ? filter['input'] : field['type']
128
- klas_string = field_type.camelize
133
+ # create input field object
134
+ klas_string = field['type'].camelize
129
135
  klas = DrgcmsFormFields::const_get(klas_string) rescue nil
130
136
  return '' if klas.nil?
131
- #
137
+ # return data from object and create html code to display field
132
138
  object = klas.new(parent, nil, field).render
133
139
  js = object.js
134
140
  "<span class=\"filter_field\" data-url=\"#{url}\">#{object.html} " <<
135
- parent.fa_icon('filter lg dc-green', class: 'record_filter_field_icon') <<
141
+ parent.fa_icon('filter lg dc-green', class: 'record_filter_field_icon dc-link dc-animate') <<
136
142
  (js.size > 2 ? parent.javascript_tag(js) : '') << '</span>'
137
143
  end
138
144
 
@@ -80,6 +80,10 @@ def initialize( parent, record, yaml )
80
80
  @yaml = yaml
81
81
  @form = parent.form
82
82
  @readonly = (@yaml and @yaml['readonly']) || (@form and @form['readonly'])
83
+ if @yaml['size'] # move size to html element if not already there
84
+ @yaml['html'] ||= {}
85
+ @yaml['html']['size'] ||= @yaml['size']
86
+ end
83
87
  @html = ''
84
88
  @js = ''
85
89
  self
@@ -123,11 +127,21 @@ end
123
127
  #
124
128
  # Example: Form has field named picture. Field can be initialized by
125
129
  # setting value of param p_picture.
130
+ # params['p_picture'] = '/path/to_picture'
131
+ #
132
+ # When multiple initial values are assigned it is more convinient to assign them
133
+ # through flash method.
134
+ # flash[:record] = {}
135
+ # flash[:record]['picture'] = '/path/to_picture'
126
136
  ####################################################################
127
137
  def set_initial_value(opt1='html', opt2='value')
128
138
  @yaml['html'] ||= {}
129
139
  value_send_as = 'p_' + @yaml['name']
130
- @yaml[opt1][opt2] = @parent.params[value_send_as] if @parent.params[value_send_as]
140
+ if @parent.params[value_send_as]
141
+ @yaml[opt1][opt2] = @parent.params[value_send_as]
142
+ elsif @parent.flash[:record] and @parent.flash[:record][@yaml['name']]
143
+ @yaml[opt1][opt2] = @parent.flash[:record][@yaml['name']]
144
+ end
131
145
  end
132
146
 
133
147
  ####################################################################
@@ -1187,10 +1201,11 @@ end
1187
1201
  ###########################################################################
1188
1202
  def render
1189
1203
  return ro_standard if @readonly
1204
+ set_initial_value
1190
1205
  #
1191
- @yaml['html'] ||= {}
1192
- value_send_as = 'p_' + @yaml['name']
1193
- @yaml['html']['value'] = @parent.params[value_send_as] if @parent.params[value_send_as]
1206
+ # @yaml['html'] ||= {}
1207
+ # value_send_as = 'p_' + @yaml['name']
1208
+ # @yaml['html']['value'] = @parent.params[value_send_as] if @parent.params[value_send_as]
1194
1209
 
1195
1210
  record = record_text_for(@yaml['name'])
1196
1211
  @html << @parent.text_area(record, @yaml['name'], @yaml['html'])
data/drg_cms.gemspec CHANGED
@@ -10,10 +10,10 @@ Gem::Specification.new do |s|
10
10
  s.authors = ["Damjan Rems"]
11
11
  s.email = ["damjan.rems@gmail.com"]
12
12
  s.homepage = "http://www.drgcms.org"
13
- s.summary = "DRG CMS: Content management system for Ruby, Rails and MongoDB"
14
- s.description = "DRG CMS can be used for rapid building of complex, data-entry intensive web sites as well as building your private Intranet applications."
13
+ s.summary = "DRG CMS: Rapid web application development tool for Ruby, Rails and MongoDB"
14
+ s.description = "DRG CMS can be used for rapid building of complex, data-entry intensive web sites as well as building your in-house private cloud applications."
15
15
  s.license = "MIT-LICENSE"
16
- s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.md", "drg_cms.gemspec"]
16
+ s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.md", "History.log", "drg_cms.gemspec"]
17
17
  s.test_files = Dir["test/**/*"]
18
18
 
19
19
  s.add_dependency 'rails' #, '~> 3.2.16'
@@ -1,4 +1,4 @@
1
1
  module DrgCms #:nodoc:
2
2
  # drg_cms gem version
3
- VERSION = "0.5.8.2"
3
+ VERSION = "0.5.9"
4
4
  end
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.5.8.2
4
+ version: 0.5.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damjan Rems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-02 00:00:00.000000000 Z
11
+ date: 2015-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -123,13 +123,14 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  description: DRG CMS can be used for rapid building of complex, data-entry intensive
126
- web sites as well as building your private Intranet applications.
126
+ web sites as well as building your in-house private cloud applications.
127
127
  email:
128
128
  - damjan.rems@gmail.com
129
129
  executables: []
130
130
  extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
+ - History.log
133
134
  - MIT-LICENSE
134
135
  - README.md
135
136
  - Rakefile
@@ -155,8 +156,8 @@ files:
155
156
  - app/assets/images/drg_cms/x.png
156
157
  - app/assets/javascripts/drg_cms/drg_cms.js
157
158
  - app/assets/javascripts/drg_cms/jquery-migrate.js
159
+ - app/assets/javascripts/drg_cms/jquery.bpopup.min.js
158
160
  - app/assets/javascripts/drg_cms/jquery.datetimepicker.js
159
- - app/assets/javascripts/drg_cms/jquery.the-modal.js
160
161
  - app/assets/javascripts/drg_cms/some_scripts.js
161
162
  - app/assets/javascripts/drg_cms_application.js
162
163
  - app/assets/javascripts/drg_cms_cms.js
@@ -164,7 +165,6 @@ files:
164
165
  - app/assets/stylesheets/drg_cms/jquery-ui.css
165
166
  - app/assets/stylesheets/drg_cms/jquery.datetimepicker.css
166
167
  - app/assets/stylesheets/drg_cms/th-bg.png
167
- - app/assets/stylesheets/drg_cms/the-modal.css
168
168
  - app/assets/stylesheets/drg_cms/theme.css
169
169
  - app/assets/stylesheets/drg_cms_application.css
170
170
  - app/assets/stylesheets/drg_cms_cms.css
@@ -354,7 +354,7 @@ rubyforge_project:
354
354
  rubygems_version: 2.2.5
355
355
  signing_key:
356
356
  specification_version: 4
357
- summary: 'DRG CMS: Content management system for Ruby, Rails and MongoDB'
357
+ summary: 'DRG CMS: Rapid web application development tool for Ruby, Rails and MongoDB'
358
358
  test_files:
359
359
  - test/test_helper.rb
360
360
  - test/lib/generators/new_drg_form_generator_test.rb
@@ -1,260 +0,0 @@
1
- /**
2
- * The Modal jQuery plugin
3
- *
4
- * @author Alexander Makarov <sam@rmcreative.ru>
5
- * @link https://github.com/samdark/the-modal
6
- * @version 0.0.14
7
- */
8
- ;(function($, window, document, undefined) {
9
- "use strict";
10
- /*jshint smarttabs:true*/
11
-
12
- // :focusable expression, needed for tabindexes in modal
13
- $.extend($.expr[':'],{
14
- focusable: function(element){
15
- var map, mapName, img,
16
- nodeName = element.nodeName.toLowerCase(),
17
- isTabIndexNotNaN = !isNaN($.attr(element,'tabindex'));
18
- if ('area' === nodeName) {
19
- map = element.parentNode;
20
- mapName = map.name;
21
- if (!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {
22
- return false;
23
- }
24
- img = $('img[usemap=#' + mapName + ']')[0];
25
- return !!img && visible(img);
26
- }
27
-
28
- var result = isTabIndexNotNaN;
29
- if (/input|select|textarea|button|object/.test(nodeName)) {
30
- result = !element.disabled;
31
- } else if ('a' === nodeName) {
32
- result = element.href || isTabIndexNotNaN;
33
- }
34
-
35
- return result && visible(element);
36
-
37
- function visible(element) {
38
- return $.expr.filters.visible(element) &&
39
- !$(element).parents().addBack().filter(function() {
40
- return $.css(this,'visibility') === 'hidden';
41
- }).length;
42
- }
43
- }
44
- });
45
-
46
- var pluginNamespace = 'the-modal',
47
- // global defaults
48
- defaults = {
49
- lockClass: 'themodal-lock',
50
- overlayClass: 'themodal-overlay',
51
-
52
- closeOnEsc: true,
53
- closeOnOverlayClick: true,
54
-
55
- onBeforeClose: null,
56
- onClose: null,
57
- onOpen: null,
58
-
59
- cloning: true
60
- };
61
- var oMargin = {};
62
- var ieBodyTopMargin = 0;
63
-
64
- function isIE() {
65
- return ((navigator.appName == 'Microsoft Internet Explorer') ||
66
- (navigator.userAgent.match(/MSIE\s+\d+\.\d+/)) ||
67
- (navigator.userAgent.match(/Trident\/\d+\.\d+/)));
68
- }
69
-
70
- function lockContainer(options, overlay) {
71
- var body = $('body');
72
- var oWidth = body.outerWidth(true);
73
- body.addClass(options.lockClass);
74
- var sbWidth = body.outerWidth(true) - oWidth;
75
- if (isIE()) {
76
- ieBodyTopMargin = body.css('margin-top');
77
- body.css('margin-top', 0);
78
- }
79
-
80
- if (sbWidth != 0) {
81
- var tags = $('html, body');
82
- tags.each(function () {
83
- var $this = $(this);
84
- oMargin[$this.prop('tagName').toLowerCase()] = parseInt($this.css('margin-right'));
85
- });
86
- $('html').css('margin-right', oMargin['html'] + sbWidth);
87
- overlay.css('left', 0 - sbWidth);
88
- }
89
- }
90
-
91
- function unlockContainer(options) {
92
- if (isIE()) {
93
- $('body').css('margin-top', ieBodyTopMargin);
94
- }
95
-
96
- var body = $('body');
97
- var oWidth = body.outerWidth(true);
98
- body.removeClass(options.lockClass);
99
- var sbWidth = body.outerWidth(true) - oWidth;
100
-
101
- if (sbWidth != 0) {
102
- $('html, body').each(function () {
103
- var $this = $(this);
104
- $this.css('margin-right', oMargin[$this.prop('tagName').toLowerCase()])
105
- });
106
- }
107
- }
108
-
109
- function init(els, options) {
110
- var modalOptions = options;
111
-
112
- if(els.length) {
113
- els.each(function(){
114
- $(this).data(pluginNamespace+'.options', modalOptions);
115
- });
116
- } else {
117
- $.extend(defaults, modalOptions);
118
- }
119
-
120
- // on Ctrl+A click fire `onSelectAll` event
121
- $(window).bind('keydown',function(e){
122
- if (!(e.ctrlKey && e.keyCode == 65)) {
123
- return true;
124
- }
125
-
126
- if ( $('input:focus, textarea:focus').length > 0 ) {
127
- return true;
128
- }
129
-
130
- var selectAllEvent = new $.Event('onSelectAll');
131
- selectAllEvent.parentEvent = e;
132
- $(window).trigger(selectAllEvent);
133
- return true;
134
- });
135
-
136
- els.bind('keydown',function(e){
137
- var modalFocusableElements = $(':focusable',$(this));
138
- if(modalFocusableElements.filter(':last').is(':focus') && (e.which || e.keyCode) == 9){
139
- e.preventDefault();
140
- modalFocusableElements.filter(':first').focus();
141
- }
142
- });
143
-
144
- return {
145
- open: function(options) {
146
- var el = els.get(0),
147
- localOptions = $.extend({}, defaults, $(el).data(pluginNamespace+'.options'), options);
148
-
149
- // close modal if opened
150
- if($('.'+localOptions.overlayClass).length) {
151
- $.modal().close();
152
- }
153
-
154
- var overlay = $('<div/>').addClass(localOptions.overlayClass).prependTo('body');
155
- overlay.data(pluginNamespace+'.options', localOptions);
156
-
157
- lockContainer(localOptions, overlay);
158
-
159
- if(el) {
160
- var openedModalElement = null;
161
- if (!localOptions.cloning) {
162
- overlay.data(pluginNamespace+'.el', el);
163
- $(el).data(pluginNamespace+'.parent', $(el).parent());
164
- openedModalElement = $(el).appendTo(overlay).show();
165
- } else {
166
- openedModalElement = $(el).clone(true).appendTo(overlay).show();
167
- }
168
- }
169
-
170
- if(localOptions.closeOnEsc) {
171
- $(document).bind('keyup.'+pluginNamespace, function(e){
172
- if(e.keyCode === 27) {
173
- $.modal().close(localOptions);
174
- }
175
- });
176
- }
177
-
178
- if(localOptions.closeOnOverlayClick) {
179
- overlay.children().on('click.' + pluginNamespace, function(e){
180
- e.stopPropagation();
181
- });
182
- $('.' + localOptions.overlayClass).on('click.' + pluginNamespace, function(e){
183
- $.modal().close(localOptions);
184
- });
185
- }
186
-
187
- $(document).bind('touchmove.'+pluginNamespace,function(e){
188
- if(!$(e).parents('.' + localOptions.overlayClass)) {
189
- e.preventDefault();
190
- }
191
- });
192
-
193
- if(el) {
194
- $(window).bind('onSelectAll',function(e){
195
- e.parentEvent.preventDefault();
196
-
197
- var range = null,
198
- selection = null,
199
- selectionElement = openedModalElement.get(0);
200
- if (document.body.createTextRange) { //ms
201
- range = document.body.createTextRange();
202
- range.moveToElementText(selectionElement);
203
- range.select();
204
- } else if (window.getSelection) { //all others
205
- selection = window.getSelection();
206
- range = document.createRange();
207
- range.selectNodeContents(selectionElement);
208
- selection.removeAllRanges();
209
- selection.addRange(range);
210
- }
211
- });
212
- }
213
-
214
- if(localOptions.onOpen) {
215
- localOptions.onOpen(overlay, localOptions);
216
- }
217
- },
218
- close: function(options) {
219
- var el = els.get(0),
220
- localOptions = $.extend({}, defaults, $(el).data(pluginNamespace+'.options'), options);
221
- var overlay = $('.' + localOptions.overlayClass);
222
-
223
- if ($.isFunction(localOptions.onBeforeClose)) {
224
- if (localOptions.onBeforeClose(overlay, localOptions) === false) {
225
- return;
226
- }
227
- }
228
-
229
- if (!localOptions.cloning) {
230
- if (!el) {
231
- el = overlay.data(pluginNamespace+'.el');
232
- }
233
- $(el).hide().appendTo($(el).data(pluginNamespace+'.parent'));
234
- }
235
-
236
- overlay.remove();
237
- unlockContainer(localOptions);
238
-
239
- if(localOptions.closeOnEsc) {
240
- $(document).unbind('keyup.'+pluginNamespace);
241
- }
242
-
243
- $(window).unbind('onSelectAll');
244
-
245
- if(localOptions.onClose) {
246
- localOptions.onClose(overlay, localOptions);
247
- }
248
- }
249
- };
250
- }
251
-
252
- $.modal = function(options){
253
- return init($(), options);
254
- };
255
-
256
- $.fn.modal = function(options) {
257
- return init(this, options);
258
- };
259
-
260
- })(jQuery, window, document);