lipsiadmin 2.9 → 3.0

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/CHANGELOG CHANGED
@@ -1,4 +1,17 @@
1
+ 2009-02-28
2
+ * Fixed a small js error on dblclick on grids
3
+ * Added for Ext::Component a new method for remove listener, remove_listener
4
+ * Added for Ext::Component a new alias for grid.on, called add_listener
5
+ * Fixed problem with generation of template for boolean cols
6
+ * Improvement in Backend.js, now mask() when clean()
7
+ * Fixed Attachment for get many styles
8
+ * Added a new method in Ext::Component for generate on the fly extjs objects
9
+ * Small refactoring in Ext::Component
10
+ * Small refactoring in Ext::Grid
11
+ * Fixed a small errror in Ext::Store
12
+
1
13
  2009-02-27
14
+ * Added as default sm :checkbox
2
15
  * Fixed a litte padding in firefox for datetimefield
3
16
  * Fixed a typo in account.rb
4
17
  * Fixed attachment creation for new records
data/README CHANGED
@@ -24,18 +24,20 @@ Haml 2+
24
24
 
25
25
  ==Installation
26
26
 
27
- script/plugin install git://github.com/Lipsiasoft/lipsiadmin.git
27
+ $ sudo gem install lipsiadmin
28
+
29
+ Then in your config/environment.rb
30
+
31
+ config.gem "lipsiadmin", :version => "< 4.0"
32
+
33
+ Why we need to specify version?
28
34
 
29
- The version 2.9 version is an alpha relase and the gem will be aviable from 3.0
35
+ Simply because we mantain backward compatibility until a 4.0 version.
36
+ This mean that before v 4.0 we only do small improvemets, bug fix, doc etc...
30
37
 
31
- In future you can simply do:
38
+ If you want install the edge version you can simply do:
32
39
 
33
- in config/environments.rb
34
- config.gem "lipsiadmin"
35
-
36
- then (if you don't have it already)
37
-
38
- $ rake gems:install
40
+ script/plugin install git://github.com/Lipsiasoft/lipsiadmin.git
39
41
 
40
42
  ==Examples
41
43
 
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ require 'rake/gempackagetask'
7
7
  require 'rake/contrib/sshpublisher'
8
8
 
9
9
  PKG_NAME = 'lipsiadmin'
10
- PKG_VERSION = "2.9"
10
+ PKG_VERSION = "3.0"
11
11
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
12
12
 
13
13
  $LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
@@ -174,7 +174,8 @@ module Lipsiadmin
174
174
  # inside the dimensions and then crop the rest off (weighted at the center). The
175
175
  # default value is to generate no thumbnails.
176
176
  def attachment_styles_for(name, style_name, styles)
177
- attachment_definitions[name][:styles] = { style_name => styles }
177
+ attachment_definitions[name][:styles] ||= {}
178
+ attachment_definitions[name][:styles].merge!(style_name => styles)
178
179
  end
179
180
 
180
181
  # The thumbnail style that will be used by default URLs.
@@ -216,7 +217,8 @@ module Lipsiadmin
216
217
  # attachment_convert_options :avatar, :all, "-strip"
217
218
  # attachment_convert_options :avatar, :negative, "-negate"
218
219
  def attachment_convert_options_for(name, convert_name, convert_options)
219
- attachment_definitions[name][:convert_options] = { convert_name => convert_options}
220
+ attachment_definitions[name][:convert_options] ||= {}
221
+ attachment_definitions[name][:convert_options].merge!(convert_name => convert_options)
220
222
  end
221
223
 
222
224
  # When processing, if the spawn plugin is installed, processing can be done in
@@ -265,7 +267,8 @@ module Lipsiadmin
265
267
  # options "{ :quality => :better }". This parameter may not mean anything to one
266
268
  # or more or the processors, and they are free to ignore it.
267
269
  def attachment_processors_for(name, processor_name, processors)
268
- attachment_definitions[name][:processors] = { processor_name => processor_processors }
270
+ attachment_definitions[name][:processors] ||= {}
271
+ attachment_definitions[name][:processors].merge!(processor_name => processor_processors)
269
272
  end
270
273
 
271
274
  # Places ActiveRecord-style validations on the size of the file assigned. The
@@ -45,7 +45,6 @@ module Lipsiadmin
45
45
  # search for images src, append full-path.
46
46
  input.gsub!('src="/', 'src="' + RAILS_ROOT + '/public/')
47
47
  input.gsub!('url(','url('+RAILS_ROOT+'/public')
48
- #RAILS_DEFAULT_LOGGER.debug ('input: ' + input)
49
48
 
50
49
  cmd = "java -Xmx512m -Djava.awt.headless=true -cp pd4ml.jar:.:#{File.dirname(__FILE__)}/#{JARPATH} Pd4Ruby '#{input}' 950 A4 #{landescape}"
51
50
 
data/lib/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Lipsiadmin
2
2
  module VERSION #:nodoc:
3
- MAJOR = 2
4
- MINOR = 2
5
- TINY = 9
3
+ MAJOR = 3
4
+ MINOR = 0
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -29,7 +29,8 @@ module Lipsiadmin
29
29
  #
30
30
  class ColumnModel < Component
31
31
  def initialize(options={}, &block)#:nodoc:
32
- super("Ext.grid.ColumnModel", { :columns => [] }.merge(options), &block)
32
+ super("Ext.grid.ColumnModel", { :columns => [] }.merge(options))
33
+ yield self if block_given?
33
34
  end
34
35
 
35
36
  # This add automatically fields from an array
@@ -20,7 +20,10 @@ module Lipsiadmin#:nodoc:
20
20
  @klass = klass
21
21
  @config = Configuration.new(options)
22
22
  @before, @after = [], []
23
- yield self if block_given?
23
+
24
+ if self.class == Component && block_given?
25
+ yield self
26
+ end
24
27
  end
25
28
 
26
29
  # The id of the component
@@ -64,7 +67,7 @@ module Lipsiadmin#:nodoc:
64
67
  if method.to_s.start_with?("get_")
65
68
  @config[method.to_s.gsub("get_", "").to_sym]
66
69
  else
67
- @config[method.to_sym] = arg
70
+ add_object(method, arg)
68
71
  end
69
72
  end
70
73
 
@@ -73,12 +76,6 @@ module Lipsiadmin#:nodoc:
73
76
  def before
74
77
  @before
75
78
  end
76
-
77
- # Returns the javascript to add before component is rendered.
78
- #
79
- def before_js
80
- @before.uniq.compact.join("\n\n") + "\n\n"
81
- end
82
79
 
83
80
  # Returns an array of javascripts to add afters component is rendered.
84
81
  #
@@ -86,13 +83,6 @@ module Lipsiadmin#:nodoc:
86
83
  @after
87
84
  end
88
85
 
89
- # Returns the javascript to add after component is rendered.
90
- #
91
- def after_js
92
- "\n\n" + @after.uniq.compact.join("\n\n")
93
- end
94
-
95
-
96
86
  # Generates a new handler for the given component
97
87
  #
98
88
  # Examples:
@@ -111,28 +101,55 @@ module Lipsiadmin#:nodoc:
111
101
  # end
112
102
  def on(event, function=nil, scope=nil, &block)
113
103
  # Remove old handlers
114
- @after.delete_if { |s| s.start_with?("#{get_var}.on(#{event.to_json}") if s.is_a?(String) }
115
- scope = ", #{scope}" unless scope.blank?
104
+ remove_listener(event)
105
+ scope = ", #{l(scope)}" unless scope.blank?
116
106
  if function
117
107
  after << "#{get_var}.on(#{event.to_json}, #{function}#{scope});"
118
108
  else
119
109
  generator = ActionView::Helpers::PrototypeHelper::JavaScriptGenerator.new(self, &block)
120
- after << "#{get_var}.on(#{event.to_json}, function() { \n #{generator.to_s.gsub("\n", "\n ")}\n}#{scope});"
110
+ after << "#{get_var}.on(#{event.to_json}, function() { #{generator.to_s.gsub("\n", "\n ")}\n}#{scope});"
121
111
  end
122
112
  end
113
+ alias_method :add_listener, :on
114
+
115
+ # Remove a listener
116
+ #
117
+ # Example: grid.remove_listener(:dblclick)
118
+ def remove_listener(event)
119
+ @after.delete_if { |s| s.start_with?("#{get_var}.on(#{event.to_json}") if s.is_a?(String) }
120
+ end
123
121
 
122
+ # Generates a new Component for generate on the fly ExtJs Objects
123
+ #
124
+ # Examples:
125
+ #
126
+ # # Generates:
127
+ # # var myComponent = new MyComponent({
128
+ # # default: true
129
+ # # });
130
+ # grid.my_component grid.new_component("MyComponent") { |p| p.default true }
131
+ #
132
+ def new_component(klass, options={}, &block)
133
+ Component.new(klass, options, &block)
134
+ end
135
+
136
+ # Used by ActionView::Helpers::PrototypeHelper::JavaScriptGenerator
124
137
  def with_output_buffer(buf = '')#:nodoc:
125
138
  yield
126
139
  end
127
140
 
128
141
 
129
- # Returns the javascript example
142
+ # Returns the javascript for current component
130
143
  #
131
144
  # # Generates: var rowSelectionModel = Ext.grid.RowSelectionModel();
132
145
  # Component.new("Ext.grid.RowSelectionModel")
133
146
  #
134
147
  def to_s
135
- "var #{get_var} = new #{@klass}(#{config.to_s});"
148
+ script = []
149
+ script << @before.uniq.compact.join("\n\n")
150
+ script << "var #{get_var} = new #{@klass}(#{config.to_s});"
151
+ script << @after.uniq.compact.join("\n\n")
152
+ script.delete_if { |s| s.blank? }.join("\n\n")
136
153
  end
137
154
 
138
155
  def raise_error(error)#:nodoc:
@@ -158,6 +175,15 @@ module Lipsiadmin#:nodoc:
158
175
  template = File.read("#{File.dirname(__FILE__)}/templates/#{template}.js.erb")
159
176
  return ERB.new(template).result(binding)
160
177
  end
178
+
179
+ def add_object(name, object)
180
+ if object.class == Component || object.class.superclass == Component
181
+ @before << object.to_s
182
+ @config[name.to_sym] = l(object.get_var)
183
+ else
184
+ @config[name.to_sym] = object
185
+ end
186
+ end
161
187
  end
162
188
  end
163
189
  end
@@ -42,19 +42,24 @@ module Lipsiadmin
42
42
  def initialize(options={}, &block)#:nodoc:
43
43
  # Call Super Class for initialize configuration
44
44
  super("Ext.grid.GridPanel", options)
45
-
45
+
46
46
  # Write default configuration if not specified
47
47
  config[:plugins] ||= []
48
- viewConfig l("{ forceFit: true }")
49
- clicksToEdit l(1)
50
- border l(false)
51
- bodyBorder l(false)
52
- region "center"
53
- sm :checkbox
54
- add_plugin l("new Ext.grid.Search()")
55
- view :default
56
- on(:dblclick, :edit, l("this"))
48
+ viewConfig :forceFit => true
49
+ clicksToEdit 1
50
+ border false
51
+ bodyBorder false
52
+ region "center"
53
+ sm :checkbox
54
+ add_plugin l("new Ext.grid.Search()")
55
+ view :default
57
56
 
57
+ # We need to add a setTimeout because, we destroy
58
+ # the grid before loading a new page/js.
59
+ on(:dblclick) do |p|
60
+ p.delay(0.2) { p.call :edit }
61
+ end
62
+
58
63
  yield self if block_given?
59
64
  end
60
65
 
@@ -69,15 +74,14 @@ module Lipsiadmin
69
74
  #
70
75
  # new Ext.grid.CheckboxSelectionModel()
71
76
  #
72
- def sm(value)
73
- selmodel = case value
77
+ def sm(object)
78
+ selmodel = case object
74
79
  when :default then Component.new("Ext.grid.CheckboxSelectionModel")
75
80
  when :checkbox then Component.new("Ext.grid.CheckboxSelectionModel")
76
81
  when :row then Component.new("Ext.grid.RowSelectionModel")
77
- when Component then value
82
+ else object
78
83
  end
79
- before << selmodel.to_s
80
- config[:sm] = l(selmodel.get_var)
84
+ add_object(:sm, selmodel)
81
85
  end
82
86
 
83
87
  # Define the title of the grid
@@ -125,18 +129,16 @@ module Lipsiadmin
125
129
  #
126
130
  # tbar :default
127
131
  #
128
- def tbar(obj=nil, &block)
129
- tbar = obj.is_a?(ToolBar) ? obj : ToolBar.new
130
- if obj == :default
132
+ def tbar(object=nil, &block)
133
+ tbar = object.is_a?(ToolBar) ? object : ToolBar.new
134
+ if object == :default
131
135
  tbar.add l("Backend.locale.buttons.add"), :id => "add", :disabled => literal(false), :cls => "x-btn-text-icon add", :handler => l("add")
132
136
  tbar.add l("Backend.locale.buttons.edit"), :id => "edit", :disabled => literal(true), :cls => "x-btn-text-icon edit", :handler => l("edit")
133
137
  tbar.add l("Backend.locale.buttons.remove"), :id => "remove", :disabled => literal(true), :cls => "x-btn-text-icon remove", :handler => l("remove")
134
138
  @default_tbar = true
135
139
  end
136
140
  yield tbar if block_given?
137
- before << tbar.to_s
138
- after << tbar.after
139
- config[:tbar] = l(tbar.get_var)
141
+ add_object(:tbar, tbar)
140
142
  end
141
143
 
142
144
  # Generate or set a new Ext.Toolbar
@@ -149,11 +151,9 @@ module Lipsiadmin
149
151
  # })
150
152
  # bbar :pageSize => params[:limit], :store => store.get_var, displayInfo: true
151
153
  #
152
- def bbar(value=nil, &block)
153
- bbar = value.is_a?(Hash) ? Component.new("Ext.PagingToolbar", value) : value
154
- before << bbar.to_s
155
- after << bbar.after
156
- config[:bbar] = l(bbar.get_var)
154
+ def bbar(object=nil, &block)
155
+ bbar = object.is_a?(Hash) ? Component.new("Ext.PagingToolbar", object) : object
156
+ add_object(:bbar, bbar)
157
157
  end
158
158
 
159
159
  # Generate or set a new Ext.grid.GroupingView
@@ -166,38 +166,31 @@ module Lipsiadmin
166
166
  # })
167
167
  # view :forceFit => true, :groupTextTpl => "{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Foo" : "Bar"]})"
168
168
  #
169
- def view(value=nil, &block)
170
- if value.is_a?(Symbol) && (value == :default)
169
+ def view(object=nil, &block)
170
+ if object == :default
171
171
  view = Component.new("Ext.grid.GroupingView", { :forceFit => true })
172
172
  elsif value.is_a?(Hash)
173
- view = Component.new("Ext.grid.GroupingView", { :forceFit => true })
173
+ view = Component.new("Ext.grid.GroupingView", { :forceFit => true }.merge(object))
174
174
  else
175
- view = value
175
+ view = object
176
176
  end
177
-
178
- before << view.to_s
179
- after << view.after
180
- config[:view] = l(view.get_var)
177
+ add_object(:view, view)
181
178
  end
182
179
 
183
180
  # Generate or set a new Ext.data.GroupingStore
184
- def store(value=nil, url=nil, &block)
185
- datastore = value.is_a?(Store) ? value : Store.new(&block)
186
- before << datastore.to_s
187
- after << datastore.after
188
- config[:store] = l(datastore.get_var)
181
+ def store(object=nil, &block)
182
+ store = object.is_a?(Store) ? object : Store.new(&block)
183
+ add_object(:store, store)
189
184
  end
190
185
 
191
186
  # Generate or set new Ext.grid.ColumnModel
192
- def columns(value=nil, &block)
187
+ def columns(object=nil, &block)
193
188
  options = { :columns => [] }
194
189
  if config[:sm] && before.find { |js| js.start_with?("var #{config[:sm]} = new Ext.grid.CheckboxSelectionModel") }
195
190
  options[:columns] << config[:sm]
196
191
  end
197
- columnmodel = value.is_a?(ColumnModel) ? value : ColumnModel.new(options, &block)
198
- before << columnmodel.to_s
199
- after << columnmodel.after
200
- config[:cm] = l(columnmodel.get_var)
192
+ cm = object.is_a?(ColumnModel) ? value : ColumnModel.new(options, &block)
193
+ add_object(:cm, cm)
201
194
  end
202
195
 
203
196
  # The base_path used for ToolBar, it's used for generate [:new, :edit, :destory] urls
@@ -274,7 +267,8 @@ module Lipsiadmin
274
267
  end
275
268
 
276
269
  after << "Backend.app.addItem(#{get_var})"
277
- "#{before_js}var #{get_var} = new Ext.grid.GridPanel(#{config.to_s});#{after_js}"
270
+
271
+ super
278
272
  end
279
273
  end
280
274
  end
@@ -40,9 +40,10 @@ module Lipsiadmin#:nodoc:
40
40
 
41
41
  def initialize(options={}, &block)#:nodoc:
42
42
  @items = []
43
- super("Ext.data.GroupingStore", options, &block)
44
- remoteSort l(true) if config[:remoteSort].blank?
43
+ super("Ext.data.GroupingStore", options)
44
+ remoteSort true if config[:remoteSort].blank?
45
45
  baseParams("_method" => "GET") if config[:baseParams].blank?
46
+ yield self if block_given?
46
47
  end
47
48
 
48
49
  # The url for getting the json data
@@ -23,7 +23,8 @@ module Lipsiadmin
23
23
  class ToolBar < Component
24
24
  attr_accessor :items
25
25
  def initialize(options={}, &block)#:nodoc:
26
- super("Ext.Toolbar", { :items => [] }.merge(options), &block)
26
+ super("Ext.Toolbar", { :items => [] }.merge(options))
27
+ yield self if block_given?
27
28
  end
28
29
 
29
30
  # Add new items to a Ext.Toolbar
@@ -48,7 +48,7 @@ Backend.app = function(){
48
48
  items: header ? [header, this.contentDynamic] : [this.contentDynamic]
49
49
  });
50
50
 
51
- this.contentDynamic.getUpdater().on('beforeupdate', function(){ this.clean(); this.mask(); }, this);
51
+ this.contentDynamic.getUpdater().on('beforeupdate', function(){ this.clean(); }, this);
52
52
  this.contentDynamic.getUpdater().on('update', this.inspectContent, this);
53
53
  this.load(loadUrl ? loadUrl : '/backend/base/welcome');
54
54
  setTimeout(function(){
@@ -104,6 +104,7 @@ Backend.app = function(){
104
104
  }, // update
105
105
 
106
106
  clean : function(){
107
+ this.mask();
107
108
  this.contentDynamic.body.update('');
108
109
  this.contentDynamic.removeAll(true);
109
110
  this.contentDynamic.doLayout();
@@ -48,6 +48,10 @@ class ActionView::Helpers::InstanceTag
48
48
  def to_time_select_tag(options = {})
49
49
  "=time_select :#{@object_name}, :#{@method_name}#{options.empty? ? '' : ', '+ options.inspect}"
50
50
  end
51
+
52
+ def to_boolean_select_tag(options = {})
53
+ "=check_box :#{@object_name}, :#{@method_name}#{options.empty? ? '' : ', '+ options.inspect}"
54
+ end
51
55
  end
52
56
 
53
57
  class BackendPageGenerator < Rails::Generator::NamedBase
@@ -5,6 +5,7 @@ page.grid do |grid|
5
5
  grid.forgery_protection_token request_forgery_protection_token
6
6
  grid.authenticity_token form_authenticity_token
7
7
  grid.tbar :default
8
+ grid.sm :checkbox
8
9
  grid.store do |store|
9
10
  store.url "/backend/<%= plural_name %>.json"
10
11
  store.fields @column_store.store_fields
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lipsiadmin
3
3
  version: !ruby/object:Gem::Version
4
- version: "2.9"
4
+ version: "3.0"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Davide D'Agostino
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-27 00:00:00 +01:00
12
+ date: 2009-03-02 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15