spiderfw 0.6.23 → 0.6.24

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.
Files changed (74) hide show
  1. data/CHANGELOG +10 -1
  2. data/README.rdoc +1 -1
  3. data/VERSION +1 -1
  4. data/apps/config_editor/_init.rb +1 -2
  5. data/apps/config_editor/controllers/config_editor_controller.rb +1 -7
  6. data/apps/core/admin/controllers/admin_controller.rb +1 -1
  7. data/apps/core/admin/public/css/sass/admin.css +35 -31
  8. data/apps/core/admin/public/sass/admin.scss +6 -1
  9. data/apps/core/components/widgets/crud/crud.shtml +2 -2
  10. data/apps/core/components/widgets/table/table.rb +5 -5
  11. data/apps/core/forms/tags/element_row.erb +15 -10
  12. data/apps/core/forms/widgets/form/form.rb +35 -22
  13. data/apps/core/forms/widgets/inputs/checkbox/checkbox.shtml +2 -2
  14. data/apps/core/forms/widgets/inputs/date_time/date_time.shtml +2 -2
  15. data/apps/core/forms/widgets/inputs/file_input/file_input.shtml +2 -2
  16. data/apps/core/forms/widgets/inputs/html_area/html_area.shtml +2 -2
  17. data/apps/core/forms/widgets/inputs/input/input.shtml +2 -2
  18. data/apps/core/forms/widgets/inputs/password/password.shtml +2 -2
  19. data/apps/core/forms/widgets/inputs/search_select/search_select.shtml +1 -1
  20. data/apps/core/forms/widgets/inputs/select/select.shtml +2 -2
  21. data/apps/core/forms/widgets/inputs/text/text.shtml +2 -2
  22. data/apps/core/forms/widgets/inputs/text_area/text_area.shtml +2 -2
  23. data/apps/core/forms/widgets/inputs/time_span/time_span.shtml +1 -1
  24. data/blueprints/home/config.ru +8 -0
  25. data/lib/spiderfw/app.rb +416 -224
  26. data/lib/spiderfw/cmd/commands/app.rb +243 -239
  27. data/lib/spiderfw/cmd/commands/cert.rb +421 -417
  28. data/lib/spiderfw/cmd/commands/config.rb +85 -82
  29. data/lib/spiderfw/cmd/commands/console.rb +64 -40
  30. data/lib/spiderfw/cmd/commands/content.rb +29 -25
  31. data/lib/spiderfw/cmd/commands/create.rb +58 -54
  32. data/lib/spiderfw/cmd/commands/model.rb +118 -114
  33. data/lib/spiderfw/cmd/commands/setup.rb +55 -51
  34. data/lib/spiderfw/cmd/commands/test.rb +63 -59
  35. data/lib/spiderfw/cmd/commands/webserver.rb +56 -51
  36. data/lib/spiderfw/config/options/spider.rb +4 -3
  37. data/lib/spiderfw/controller/controller.rb +2 -0
  38. data/lib/spiderfw/controller/http_controller.rb +1 -2
  39. data/lib/spiderfw/controller/mixins/static_content.rb +3 -3
  40. data/lib/spiderfw/controller/mixins/visual.rb +30 -15
  41. data/lib/spiderfw/controller/response.rb +84 -0
  42. data/lib/spiderfw/controller/session/file_session.rb +2 -2
  43. data/lib/spiderfw/http/adapters/rack.rb +12 -13
  44. data/lib/spiderfw/http/server.rb +80 -46
  45. data/lib/spiderfw/i18n/cldr.rb +6 -9
  46. data/lib/spiderfw/model/base_model.rb +103 -23
  47. data/lib/spiderfw/model/condition.rb +110 -25
  48. data/lib/spiderfw/model/mappers/db_mapper.rb +14 -6
  49. data/lib/spiderfw/model/mappers/mapper.rb +440 -197
  50. data/lib/spiderfw/model/model.rb +105 -21
  51. data/lib/spiderfw/model/model_hash.rb +9 -1
  52. data/lib/spiderfw/model/query.rb +50 -9
  53. data/lib/spiderfw/model/query_set.rb +211 -44
  54. data/lib/spiderfw/model/request.rb +28 -21
  55. data/lib/spiderfw/model/storage/base_storage.rb +125 -10
  56. data/lib/spiderfw/model/storage/db/db_storage.rb +7 -4
  57. data/lib/spiderfw/model/storage.rb +8 -1
  58. data/lib/spiderfw/setup/spider_setup_wizard.rb +9 -7
  59. data/lib/spiderfw/spider.rb +270 -43
  60. data/lib/spiderfw/templates/layout.rb +9 -4
  61. data/lib/spiderfw/templates/resources/sass.rb +3 -2
  62. data/lib/spiderfw/templates/template.rb +1 -0
  63. data/lib/spiderfw/utils/annotations.rb +3 -1
  64. data/lib/spiderfw/utils/logger.rb +1 -1
  65. data/lib/spiderfw/utils/monkey/symbol.rb +4 -2
  66. data/lib/spiderfw/utils/shared_store/file_shared_store.rb +2 -2
  67. data/lib/spiderfw/utils/thread_out.rb +3 -1
  68. data/public/css/error_page.css +83 -0
  69. data/public/js/error_page.js +5 -0
  70. data/spider.gemspec +4 -1
  71. data/templates/email/error.erb +9 -0
  72. metadata +28 -12
  73. data/apps/config_editor/widgets/edit_bool/edit_bool.rb +0 -8
  74. data/apps/config_editor/widgets/edit_bool/edit_bool.shtml +0 -5
data/CHANGELOG CHANGED
@@ -1,5 +1,14 @@
1
+ = 0.6.24
2
+ == 24 February, 2012
3
+ * Use Rack instead of custom adapters for all servers
4
+ * Use Pry for spider console if available
5
+ * Input widgets are no longer wrapped in divs
6
+ * #before and #after are no longer executed for static files
7
+ * Various fixes, some api documentation
8
+
9
+
1
10
  = 0.6.23
2
- == 6 February, 2011
11
+ == 6 February, 2012
3
12
  * Config options can now have a Proc for :choices; new :fallback param to reuse other config
4
13
  * Added new-link, edit-link attributes to Crud
5
14
  * Added Twitter Bootstrap 2 to core components
data/README.rdoc CHANGED
@@ -4,7 +4,7 @@ Spider is a Model-View-Controller application framework, mainly intended for Web
4
4
 
5
5
  Its main features are:
6
6
 
7
- * A model layer that is easy to use, yet flexible enough to adapt to legacy schemas.
7
+ * A Model layer that is easy to use, yet flexible enough to adapt to legacy schemas.
8
8
  Models are defined in Ruby: schemas are autogenerated, but can be specified manually when needed.
9
9
  Direct sql is almost never used, but you can embed custom sql behaviour per model for each storage.
10
10
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.23
1
+ 0.6.24
@@ -11,5 +11,4 @@ Spider::Template.register_namespace('config_editor', Spider::ConfigEditor)
11
11
 
12
12
 
13
13
  require 'apps/config_editor/controllers/config_editor_controller'
14
- require 'apps/config_editor/widgets/edit/edit'
15
- require 'apps/config_editor/widgets/edit_bool/edit_bool'
14
+ require 'apps/config_editor/widgets/edit/edit'
@@ -75,13 +75,7 @@ module Spider; module ConfigEditor
75
75
  end
76
76
 
77
77
  def create_edit_widget(key, option)
78
- wclass = case option[:params][:type].name
79
- when 'Spider::Bool', 'Spider::DataTypes::Bool'
80
- EditBool
81
- else
82
- Edit
83
- end
84
- w = wclass.new(@request, @response, @scene)
78
+ w = Edit.new(@request, @response, @scene)
85
79
  w.attributes[:name] = key
86
80
  w.attributes[:option] = option
87
81
  w.widget_init
@@ -49,7 +49,7 @@ module Spider; module Admin
49
49
  end
50
50
  url = self.class.http_url(short_name)
51
51
  @scene.apps << {
52
- :icon => app[:module].pub_url+'/'+app[:options][:icon],
52
+ :icon => app[:options][:icon] ? app[:module].pub_url+'/'+app[:options][:icon] : nil,
53
53
  :url => self.class.http_url(short_name),
54
54
  :name => app[:module].full_name,
55
55
  :description => app[:module].description,
@@ -23,27 +23,31 @@ body:after {
23
23
  background-position: 0 0;
24
24
  }
25
25
 
26
- /* line 17, ../../sass/admin.scss */
27
- #admin form.form-horizontal input,
26
+ /* line 14, ../../sass/admin.scss */
27
+ #admin form.form-horizontal .help-block {
28
+ max-width: 550px;
29
+ }
30
+ /* line 22, ../../sass/admin.scss */
31
+ #admin form.form-horizontal input[type="text"],
28
32
  #admin form.form-horizontal textarea,
29
33
  #admin form.form-horizontal select,
30
34
  #admin form.form-horizontal .uneditable-input {
31
35
  width: 300px;
32
36
  }
33
- /* line 21, ../../sass/admin.scss */
37
+ /* line 26, ../../sass/admin.scss */
34
38
  #admin form.form-horizontal select {
35
39
  width: 310px;
36
40
  }
37
- /* line 25, ../../sass/admin.scss */
41
+ /* line 30, ../../sass/admin.scss */
38
42
  #admin form.form-horizontal input.btn {
39
43
  width: auto;
40
44
  }
41
- /* line 29, ../../sass/admin.scss */
45
+ /* line 34, ../../sass/admin.scss */
42
46
  #admin form.form-horizontal .form-actions {
43
47
  padding-left: 250px;
44
48
  }
45
49
 
46
- /* line 39, ../../sass/admin.scss */
50
+ /* line 44, ../../sass/admin.scss */
47
51
  #header {
48
52
  padding-bottom: 10px;
49
53
  background: url('../../img/css/header_bg.png?1321971233') repeat-x scroll center top;
@@ -51,27 +55,27 @@ body:after {
51
55
  position: relative;
52
56
  border-bottom: 2px solid #555555;
53
57
  }
54
- /* line 46, ../../sass/admin.scss */
58
+ /* line 51, ../../sass/admin.scss */
55
59
  #header #header_top {
56
60
  overflow: hidden;
57
61
  *zoom: 1;
58
62
  }
59
- /* line 50, ../../sass/admin.scss */
63
+ /* line 55, ../../sass/admin.scss */
60
64
  #header h1 {
61
65
  font-size: 27px;
62
66
  color: #444444;
63
67
  }
64
- /* line 55, ../../sass/admin.scss */
68
+ /* line 60, ../../sass/admin.scss */
65
69
  #header #main_title {
66
70
  float: left;
67
71
  margin-top: 8px;
68
72
  margin-left: 40px;
69
73
  }
70
- /* line 60, ../../sass/admin.scss */
74
+ /* line 65, ../../sass/admin.scss */
71
75
  #header #main_title h1 {
72
76
  margin-bottom: 8px;
73
77
  }
74
- /* line 64, ../../sass/admin.scss */
78
+ /* line 69, ../../sass/admin.scss */
75
79
  #header #admin_controls {
76
80
  font-size: .95em;
77
81
  float: right;
@@ -79,21 +83,21 @@ body:after {
79
83
  margin-right: 30px;
80
84
  color: white;
81
85
  }
82
- /* line 71, ../../sass/admin.scss */
86
+ /* line 76, ../../sass/admin.scss */
83
87
  #header #admin_controls a {
84
88
  color: white;
85
89
  }
86
- /* line 75, ../../sass/admin.scss */
90
+ /* line 80, ../../sass/admin.scss */
87
91
  #header #admin_controls .welcome {
88
92
  margin-right: 6px;
89
93
  }
90
- /* line 79, ../../sass/admin.scss */
94
+ /* line 84, ../../sass/admin.scss */
91
95
  #header #admin_controls .logout_link {
92
96
  background-position: right;
93
97
  padding-right: 25px;
94
98
  margin-left: 6px;
95
99
  }
96
- /* line 88, ../../sass/admin.scss */
100
+ /* line 93, ../../sass/admin.scss */
97
101
  #header #app_buttons {
98
102
  height: 68px;
99
103
  min-width: 200px;
@@ -121,11 +125,11 @@ body:after {
121
125
  #header #app_buttons {
122
126
  *display: inline;
123
127
  }
124
- /* line 99, ../../sass/admin.scss */
128
+ /* line 104, ../../sass/admin.scss */
125
129
  #header #app_buttons a {
126
130
  color: #222222;
127
131
  }
128
- /* line 103, ../../sass/admin.scss */
132
+ /* line 108, ../../sass/admin.scss */
129
133
  #header #app_buttons div {
130
134
  width: 55px;
131
135
  height: 55px;
@@ -135,7 +139,7 @@ body:after {
135
139
  float: left;
136
140
  background-color: #EEEEEE;
137
141
  }
138
- /* line 112, ../../sass/admin.scss */
142
+ /* line 117, ../../sass/admin.scss */
139
143
  #header #app_buttons div img {
140
144
  margin-left: auto;
141
145
  margin-right: auto;
@@ -143,40 +147,40 @@ body:after {
143
147
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
144
148
  opacity: 0.8;
145
149
  }
146
- /* line 119, ../../sass/admin.scss */
150
+ /* line 124, ../../sass/admin.scss */
147
151
  #header #app_buttons div span.name {
148
152
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=90);
149
153
  opacity: 0.9;
150
154
  display: block;
151
155
  font-size: 0.8em;
152
156
  }
153
- /* line 126, ../../sass/admin.scss */
157
+ /* line 131, ../../sass/admin.scss */
154
158
  #header #app_buttons a.active div {
155
159
  border: 1px solid #DDDD00;
156
160
  }
157
- /* line 128, ../../sass/admin.scss */
161
+ /* line 133, ../../sass/admin.scss */
158
162
  #header #app_buttons a.active div img {
159
163
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70);
160
164
  opacity: 0.7;
161
165
  }
162
- /* line 131, ../../sass/admin.scss */
166
+ /* line 136, ../../sass/admin.scss */
163
167
  #header #app_buttons a.active div span.name {
164
168
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
165
169
  opacity: 0.8;
166
170
  }
167
171
 
168
- /* line 139, ../../sass/admin.scss */
172
+ /* line 144, ../../sass/admin.scss */
169
173
  #admin-switcher-menu .section_title {
170
174
  font-size: 14px;
171
175
  line-height: 36px;
172
176
  }
173
177
 
174
- /* line 149, ../../sass/admin.scss */
178
+ /* line 154, ../../sass/admin.scss */
175
179
  #spider-admin .container-fluid .content {
176
180
  background-color: white;
177
181
  }
178
182
 
179
- /* line 156, ../../sass/admin.scss */
183
+ /* line 161, ../../sass/admin.scss */
180
184
  #container, .spider-admin-container {
181
185
  background: url('../../img/css/side_bg.png?1321971233') repeat-y;
182
186
  position: relative;
@@ -188,7 +192,7 @@ body:after {
188
192
  overflow: hidden;
189
193
  *zoom: 1;
190
194
  }
191
- /* line 166, ../../sass/admin.scss */
195
+ /* line 171, ../../sass/admin.scss */
192
196
  #container #sidebar, #container > .spider-admin-sidebar, .spider-admin-container #sidebar, .spider-admin-container > .spider-admin-sidebar {
193
197
  position: absolute;
194
198
  top: 0;
@@ -196,27 +200,27 @@ body:after {
196
200
  width: 220px;
197
201
  padding: 20px 10px;
198
202
  }
199
- /* line 173, ../../sass/admin.scss */
203
+ /* line 178, ../../sass/admin.scss */
200
204
  #container #sidebar li.active a, #container > .spider-admin-sidebar li.active a, .spider-admin-container #sidebar li.active a, .spider-admin-container > .spider-admin-sidebar li.active a {
201
205
  text-decoration: underline;
202
206
  }
203
- /* line 177, ../../sass/admin.scss */
207
+ /* line 182, ../../sass/admin.scss */
204
208
  #container #sidebar li, #container > .spider-admin-sidebar li, .spider-admin-container #sidebar li, .spider-admin-container > .spider-admin-sidebar li {
205
209
  margin-bottom: 1px;
206
210
  }
207
- /* line 182, ../../sass/admin.scss */
211
+ /* line 187, ../../sass/admin.scss */
208
212
  #container #content, #container > .spider-admin-content, .spider-admin-container #content, .spider-admin-container > .spider-admin-content {
209
213
  margin-left: 240px;
210
214
  }
211
215
 
212
- /* line 187, ../../sass/admin.scss */
216
+ /* line 192, ../../sass/admin.scss */
213
217
  .crud .table {
214
218
  width: auto;
215
219
  min-width: 400px;
216
220
  }
217
221
 
218
222
  @media screen and (max-width: 500px) {
219
- /* line 196, ../../sass/admin.scss */
223
+ /* line 201, ../../sass/admin.scss */
220
224
  #header #main_title {
221
225
  font-size: 10px;
222
226
  }
@@ -11,7 +11,12 @@ $sidebar_color: #DFDFDF;
11
11
  #admin {
12
12
  form.form-horizontal {
13
13
 
14
- input,
14
+ .help-block {
15
+ max-width: 550px;
16
+ }
17
+
18
+
19
+ input[type="text"],
15
20
  textarea,
16
21
  select,
17
22
  .uneditable-input {
@@ -1,10 +1,10 @@
1
1
  <div class="{ @widget[:css_class] }">
2
2
  <tpl:assets widgets="core:table,forms:form" />
3
3
  <tpl:asset type="css" src="css/crud.css" />
4
- <div sp:if="@saved" class="flash">
4
+ <div sp:if="@saved" class="alert alert-success">
5
5
  Salvataggio effettuato
6
6
  </div>
7
- <div sp:if="@deleted" class="flash">
7
+ <div sp:if="@deleted" class="alert alert-success">
8
8
  Cancellazione effettuata
9
9
  </div>
10
10
  <core:confirm id="ask_delete" sp:if="@ask_delete">
@@ -179,21 +179,21 @@ module Spider; module Components
179
179
  return list
180
180
  end
181
181
  else
182
- format_value(element.type, row[el])
182
+ format_value(element.type, row[el], element.attributes)
183
183
  end
184
184
  end
185
185
 
186
- def format_value(type, value)
186
+ def format_value(type, value, attributes={})
187
187
  if type <= Spider::Bool
188
- return row[el] ? _('Yes') : _('No')
188
+ return value ? _('Yes') : _('No')
189
189
  elsif !value
190
190
  return ''
191
191
  elsif type <= Date || type <= Time
192
192
  return Spider::I18n.localize_date_time(@request.locale, value, :short)
193
193
  elsif type <= Float || type <= BigDecimal
194
194
  str = Spider::I18n.localize_number(@request.locale, value)
195
- if element.attributes[:currency]
196
- str = "&#{element.attributes[:currency]}; #{str}"
195
+ if attributes[:currency]
196
+ str = "&#{attributes[:currency]}; #{str}"
197
197
  end
198
198
  return str
199
199
  elsif value.respond_to?(:format)
@@ -6,14 +6,19 @@
6
6
  %>
7
7
  <forms:row error_condition="<%=error_condition%>" required="<%=required%>" element="<%=@attributes['element']%>">
8
8
  <forms:element_label element="<%=@attributes['element']%>" required="<%=required%>" inputs_hash="<%=inputs_hash%>"/>
9
- <sp:run obj="@<%=inputs_hash%>[<%=@attributes['element']%>]" widget="<%=@attributes['element']%>">
10
- <sp:attribute widget="<%=@attributes['element'][1..-1]%>" name="required" value="<%=(@attributes['required']=='true')? 'true' : ''%>" />
11
- <%
12
- (@attributes.keys - tag_attrs).each do |k|
13
- %>
14
- <sp:attribute widget="<%=@attributes['element'][1..-1]%>" name="<%=k%>" value="<%=@attributes[k]%>" />
15
- <%
16
- end
17
- %>
18
- </sp:run>
9
+ <div class="controls">
10
+ <sp:run obj="@<%=inputs_hash%>[<%=@attributes['element']%>]" widget="<%=@attributes['element']%>">
11
+ <sp:attribute widget="<%=@attributes['element'][1..-1]%>" name="required" value="<%=(@attributes['required']=='true')? 'true' : ''%>" />
12
+ <%
13
+ (@attributes.keys - tag_attrs).each do |k|
14
+ %>
15
+ <sp:attribute widget="<%=@attributes['element'][1..-1]%>" name="<%=k%>" value="<%=@attributes[k]%>" />
16
+ <%
17
+ end
18
+ %>
19
+ </sp:run>
20
+ <p sp:if="!@model.elements[<%=@attributes['element']%>].attributes[:description].blank?" class="help-block">
21
+ { @model.elements[<%=@attributes['element']%>].attributes[:description] }
22
+ </p>
23
+ </div>
19
24
  </forms:row>
@@ -84,6 +84,7 @@ module Spider; module Forms
84
84
  @model = @obj.class
85
85
  end
86
86
  end
87
+ @scene.model = @model
87
88
  if (@elements.is_a?(String))
88
89
  @elements = @elements.split(',').map{ |e| @model.elements[e.strip.to_sym] }.reject{ |i| i.nil? }
89
90
  @requested_elements = @elements
@@ -147,30 +148,42 @@ module Spider; module Forms
147
148
 
148
149
  def load_widgets(template=@template)
149
150
  super
150
- if (@action == :sub)
151
- @crud = Spider::Components::Crud.new(@request, @response)
152
- @crud.id = "crud_#{@sub_element.name.to_s}"
153
- @crud.model = @sub_element.model
154
- add_widget(@crud)
155
- @scene.crud = @crud
156
- @obj = load
157
- cond = {}
158
- if @sub_element.integrated?
159
- @sub_element.integrated_from.model.primary_keys.each do |key|
160
- cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get("#{@sub_element.integrated_from.name}.#{key.name}")
151
+ if @action == :sub
152
+ if @sub_element.multiple?
153
+ @crud = Spider::Components::Crud.new(@request, @response)
154
+ @crud.id = "crud_#{@sub_element.name.to_s}"
155
+ @crud.model = @sub_element.model
156
+ add_widget(@crud)
157
+ @scene.crud = @crud
158
+ @obj = load
159
+ cond = {}
160
+ debugger
161
+ if @sub_element.integrated?
162
+ @sub_element.integrated_from.model.primary_keys.each do |key|
163
+ cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get("#{@sub_element.integrated_from.name}.#{key.name}")
164
+ end
165
+ else
166
+ @model.primary_keys.each do |key|
167
+ cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get(key)
168
+ end
161
169
  end
162
- else
163
- @model.primary_keys.each do |key|
164
- cond[@sub_element.reverse.to_s+'.'+key.name.to_s] = @obj.get(key)
170
+ @crud.fixed = cond
171
+ sub_elements = []
172
+ #sub_elements += @sub_element.model.primary_keys.map{ |k| k.name }
173
+ @sub_element.model.elements_array.each do |el|
174
+ sub_elements << el.name unless el.integrated? || el.model == @model
165
175
  end
176
+ @crud.attributes[:table_elements] = sub_elements
177
+ # else
178
+ # @crud = Spider::Forms::Form.new(@request, @response)
179
+ # @form.id = "crud_#{@sub_element.name.to_s}"
180
+ # @form.model = @sub_element.model
181
+ # add_widget(@crud)
182
+ # @scene.crud = @crud
183
+ # @obj.load
184
+ # debugger
185
+ # @form.pk = @obj.get(@sub_element).id
166
186
  end
167
- @crud.fixed = cond
168
- sub_elements = []
169
- #sub_elements += @sub_element.model.primary_keys.map{ |k| k.name }
170
- @sub_element.model.elements_array.each do |el|
171
- sub_elements << el.name unless el.integrated? || el.model == @model
172
- end
173
- @crud.attributes[:table_elements] = sub_elements
174
187
  else
175
188
  create_inputs
176
189
  end
@@ -250,7 +263,7 @@ module Spider; module Forms
250
263
  if ([:choice, :multiple_choice, :state, :multiple_state].include?(el.association) && !el.extended?)
251
264
  widget_type = el.type.attributes[:estimated_size] && el.type.attributes[:estimated_size] > 30 ?
252
265
  SearchSelect : Select
253
- elsif @attributes[:show_related] && @pk && el.multiple?
266
+ elsif @attributes[:show_related] && @pk
254
267
  @sub_links[el.name] = sub_link(el)
255
268
  end
256
269
  end
@@ -1,3 +1,3 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  <input type="checkbox" name="{ @name }" id="input" value="1" size="{ @size }" sp:attr-if="@value,checked">
3
- </div>
3
+ </sp:template>
@@ -1,6 +1,6 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  <tpl:asset type="js" src="input.js" />
3
3
  <tpl:asset name="jquery-ui-datepicker" />
4
4
  <tpl:asset type="js" src="date_time.js" />
5
5
  <input type="text" name="{ @name }" id="input" value="{ @formatted_value }" size="{ @size }" class="{ @mode } { @additional_classes.join(' ') }">
6
- </div>
6
+ </sp:template>
@@ -1,4 +1,4 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  <tpl:asset type="css" src="css/file_input.css" />
3
3
  <tpl:asset type="js" src="input.js" />
4
4
  <tpl:asset type="js" src="file_input.js" />
@@ -9,4 +9,4 @@
9
9
  <div class="change"><span sp:if="@value && !@value.to_s.empty?"><span class="change-label">_(Change)</span>:</span>
10
10
  <input type="file" name="{ @name }[file]" id="input" value="{ @value }" size="{ @size }">
11
11
  </div>
12
- </div>
12
+ </sp:template>
@@ -1,4 +1,4 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  <tpl:asset type="js" src="ckeditor/ckeditor.js" compressed="true" copy_dir="true"/>
3
3
  <tpl:asset type="js" src="ckeditor/adapters/jquery.js" compressed="true" />
4
4
  <tpl:asset name="jquery" />
@@ -11,4 +11,4 @@
11
11
  <div class="css" style="display:none">{ @css }</div>
12
12
  <div class="options" style="display:none">{ @options }</div>
13
13
  <textarea name="{ @name }" id="input" rows="{ @rows }" cols="{ @cols }">{ @value }</textarea>
14
- </div>
14
+ </sp:template>
@@ -1,3 +1,3 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  { @value }
3
- </div>
3
+ </sp:template>
@@ -1,5 +1,5 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  <input type="password" name="{ @name }[pwd1]" id="input" value="" size="{ @size }"><br>
3
3
  <div class="help-block">Ripeti la password:</div>
4
4
  <input type="password" name="{ @name }[pwd2]" id="input2" value="" size="{ @size }"><br>
5
- </div>
5
+ </sp:template>
@@ -1,4 +1,4 @@
1
- <div class="controls{ @multiple ? ' multiple' : '' }">
1
+ <div class="{ @multiple ? ' multiple' : '' }">
2
2
  <tpl:asset type="js" name="jquery-ui-autocomplete" />
3
3
  <tpl:asset type="js" src="input.js" />
4
4
  <tpl:asset type="js" src="search_select.js" />
@@ -1,4 +1,4 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  <tpl:asset type="js" src="input.js" />
3
3
  <tpl:asset type="js" src="select.js" />
4
4
  <tpl:asset type="js" app="core/components" src="js/jquery/plugins/bsmselect/js/jquery.bsmselect.js" if="@multiple" />
@@ -13,4 +13,4 @@
13
13
  { @data[i].to_s }
14
14
  </option>
15
15
  </select>
16
- </div>
16
+ </sp:template>
@@ -1,3 +1,3 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  <input type="text" id="input" name="{ @name }" value="{ @formatted_value }" size="{ @size }">
3
- </div>
3
+ </sp:template>
@@ -1,5 +1,5 @@
1
- <div class="controls">
1
+ <sp:template>
2
2
  <tpl:asset type="js" src="input.js" /><tpl:asset type="js" src="text_area.js" />
3
3
  <tpl:asset type="js" app="core/components" src="js/jquery/plugins/autogrow/jquery.autogrow.js" />
4
4
  <textarea name="{ @name }" id="input" rows="{ @rows }" cols="{ @cols }">{ @value }</textarea>
5
- </div>
5
+ </sp:template>
@@ -1,4 +1,4 @@
1
- <div class="controls">
1
+ <div class="time-span-input">
2
2
  <input type="text" name="{ @name }[val]" id="input" value="{ @formatted_value }" size="8" >
3
3
  <select name="{ @name }[unit]">
4
4
  <option value="sec" sp:attr-if="(@unit == 'sec'),selected">_(Seconds)</option>
@@ -0,0 +1,8 @@
1
+ require 'spiderfw/init'
2
+ require 'spiderfw/http/adapters/rack'
3
+ if defined?(PhusionPassenger)
4
+ PhusionPassenger.on_event(:starting_worker_process) do
5
+ Spider.startup
6
+ end
7
+ end
8
+ run Spider::HTTP::RackApplication.new