lolita 3.1.17 → 3.1.18
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/controllers/lolita/field_data_controller.rb +36 -0
- data/app/controllers/lolita/info_controller.rb +12 -1
- data/app/controllers/lolita/rest_controller.rb +8 -3
- data/app/helpers/lolita_helper.rb +12 -1
- data/app/views/components/lolita/configuration/column/_display.html.erb +1 -1
- data/app/views/components/lolita/configuration/column/_header.html.erb +1 -1
- data/app/views/components/lolita/configuration/column/_sort.html.erb +7 -4
- data/app/views/components/lolita/configuration/field/array/_display.html.erb +1 -1
- data/app/views/components/lolita/configuration/field/array/autocomplete/_display.html.haml +11 -0
- data/app/views/components/lolita/configuration/field/array/checkbox/_display.html.haml +8 -0
- data/app/views/components/lolita/configuration/field/array/polymorphic/_display.html.haml +6 -0
- data/app/views/components/lolita/configuration/field/array/polymorphic/_options_for_select.html.haml +1 -0
- data/app/views/components/lolita/configuration/field/array/select/_display.html.erb +1 -1
- data/app/views/components/lolita/configuration/field/string/_display.html.erb +1 -5
- data/app/views/components/lolita/configuration/field/string/disabled/_display.html.erb +1 -1
- data/app/views/components/lolita/configuration/field/string/text/_display.html.erb +1 -1
- data/app/views/components/lolita/configuration/list/_paginator.html.erb +1 -1
- data/app/views/components/lolita/configuration/list/_title.html.erb +6 -1
- data/app/views/components/lolita/configuration/nested_form/_display.html.erb +8 -6
- data/app/views/components/lolita/configuration/search/_display.html.haml +2 -0
- data/app/views/components/lolita/navigation/_tree.html.erb +18 -25
- data/app/views/components/lolita/shared/_header.html.erb +1 -1
- data/app/views/components/lolita/shared/_right_sidebar.html.erb +1 -6
- data/app/views/components/lolita/shared/_save_button.html.erb +6 -0
- data/config/locales/en.yml +9 -1
- data/config/locales/lv.yml +6 -5
- data/config/routes.rb +3 -1
- data/lib/lolita.rb +52 -35
- data/lib/lolita/adapter/abstract_adapter.rb +5 -5
- data/lib/lolita/adapter/active_record.rb +190 -84
- data/lib/lolita/adapter/field_helper.rb +19 -0
- data/lib/lolita/adapter/mongoid.rb +217 -64
- data/lib/lolita/builder.rb +1 -1
- data/lib/lolita/configuration/base.rb +17 -4
- data/lib/lolita/configuration/column.rb +47 -28
- data/lib/lolita/configuration/columns.rb +1 -1
- data/lib/lolita/configuration/factory/field.rb +45 -0
- data/lib/lolita/configuration/factory/tab.rb +18 -0
- data/lib/lolita/configuration/field.rb +30 -115
- data/lib/lolita/configuration/field/array.rb +126 -41
- data/lib/lolita/configuration/field/big_decimal.rb +2 -2
- data/lib/lolita/configuration/field/boolean.rb +2 -2
- data/lib/lolita/configuration/field/date.rb +2 -2
- data/lib/lolita/configuration/field/date_time.rb +2 -2
- data/lib/lolita/configuration/field/float.rb +9 -0
- data/lib/lolita/configuration/field/hash.rb +9 -0
- data/lib/lolita/configuration/field/hidden.rb +2 -2
- data/lib/lolita/configuration/field/integer.rb +2 -3
- data/lib/lolita/configuration/field/range.rb +9 -0
- data/lib/lolita/configuration/field/string.rb +5 -2
- data/lib/lolita/configuration/field/symbol.rb +9 -0
- data/lib/lolita/configuration/field/time.rb +2 -2
- data/lib/lolita/configuration/list.rb +41 -8
- data/lib/lolita/configuration/nested_form.rb +2 -2
- data/lib/lolita/configuration/search.rb +91 -0
- data/lib/lolita/configuration/tab.rb +11 -14
- data/lib/lolita/configuration/tab/content.rb +1 -2
- data/lib/lolita/configuration/tab/default.rb +0 -1
- data/lib/lolita/configuration/tabs.rb +17 -11
- data/lib/lolita/controller_additions.rb +15 -0
- data/lib/lolita/controllers/authorization_helpers.rb +56 -0
- data/lib/lolita/controllers/component_helpers.rb +1 -1
- data/lib/lolita/controllers/internal_helpers.rb +18 -4
- data/lib/lolita/controllers/url_helpers.rb +5 -1
- data/lib/lolita/controllers/user_helpers.rb +23 -11
- data/lib/lolita/dbi/base.rb +7 -1
- data/lib/lolita/hooks.rb +163 -120
- data/lib/lolita/lazy_loader.rb +3 -0
- data/lib/lolita/mapping.rb +25 -2
- data/lib/lolita/modules/rest.rb +1 -1
- data/lib/lolita/navigation/branch.rb +52 -1
- data/lib/lolita/navigation/tree.rb +10 -0
- data/lib/lolita/rails.rb +1 -2
- data/lib/lolita/rails/routes.rb +4 -5
- data/lib/lolita/search/simple.rb +76 -0
- data/lib/lolita/system_configuration/application.rb +7 -1
- data/lolita.gemspec +33 -13
- data/public/stylesheets/lolita/style.css +21 -0
- data/spec/configuration/column_spec.rb +2 -2
- data/spec/configuration/columns_spec.rb +1 -1
- data/spec/configuration/field_spec.rb +14 -43
- data/spec/configuration/list_spec.rb +24 -20
- data/spec/configuration/search_spec.rb +44 -0
- data/spec/configuration/tab_spec.rb +21 -31
- data/spec/configuration/tabs_spec.rb +2 -2
- data/spec/dbi/base_spec.rb +3 -9
- data/spec/rails_app/app/mongoid/post.rb +4 -0
- data/spec/rails_app/config/application.rb +12 -1
- data/spec/rails_app/config/environments/development.rb +6 -2
- data/spec/rails_app/config/environments/production.rb +5 -1
- data/spec/rails_app/config/environments/test.rb +5 -1
- data/spec/search/simple_spec.rb +48 -0
- data/spec/spec_helper.rb +29 -18
- metadata +55 -38
- data/spec/configuration/page_spec.rb +0 -20
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.
|
1
|
+
3.1.18
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Lolita::FieldDataController < ApplicationController
|
2
|
+
include Lolita::Controllers::UserHelpers
|
3
|
+
|
4
|
+
before_filter :authenticate_lolita_user!
|
5
|
+
before_filter :find_field, :except => [:autocomplete_field]
|
6
|
+
|
7
|
+
def array_polymorphic
|
8
|
+
klass = params[:class].camelize.constantize
|
9
|
+
data_collection = @field.polymorphic_association_values(:klass => klass)
|
10
|
+
@id = params[:id].to_s.to_i
|
11
|
+
@collection = [[]]+data_collection
|
12
|
+
render_component(*@field.build(:state => :options_for_select, :collection => @collection, :id => @id))
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_field
|
16
|
+
@field = params[:field_class].camelize.constantize.lolita.tabs.fields.detect{|field|
|
17
|
+
field.name.to_s == params[:name].to_s
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def autocomplete_field
|
22
|
+
klass = params[:field_class].camelize.constantize
|
23
|
+
field = klass.lolita.tabs.fields.detect{|field| field.name.to_s == params[:field_name]}
|
24
|
+
data = if field
|
25
|
+
(field.search || field.create_search(true)).run(params[:term],request).map do |record|
|
26
|
+
{
|
27
|
+
:id => record.id,
|
28
|
+
:value => record.send(field.current_text_method(field.association.klass)),
|
29
|
+
:name => "#{params[:field_class].downcase}[#{params[:field_name].singularize}_ids][]",
|
30
|
+
:delete_link => I18n.t("lolita.shared.delete")
|
31
|
+
}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
render :json => data || {}
|
35
|
+
end
|
36
|
+
end
|
@@ -1,9 +1,16 @@
|
|
1
1
|
class Lolita::InfoController < ApplicationController
|
2
2
|
@@properties = []
|
3
|
+
include Lolita::Controllers::UserHelpers
|
4
|
+
include Lolita::Controllers::AuthorizationHelpers
|
5
|
+
before_filter :authenticate_lolita_user!, :only => [:index]
|
3
6
|
|
4
7
|
def index
|
5
8
|
if Lolita.mappings.any?
|
6
|
-
|
9
|
+
available_mapping = Lolita.mappings.detect{|name,mapping|
|
10
|
+
can?(:read,mapping.to)
|
11
|
+
}
|
12
|
+
available_mapping &&= available_mapping.last
|
13
|
+
return redirect_to(lolita_resources_path(available_mapping)) if available_mapping
|
7
14
|
end
|
8
15
|
render :layout => false
|
9
16
|
end
|
@@ -16,6 +23,10 @@ class Lolita::InfoController < ApplicationController
|
|
16
23
|
end
|
17
24
|
end
|
18
25
|
|
26
|
+
def is_lolita_resource?
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
19
30
|
private
|
20
31
|
|
21
32
|
def self.property(name, value = nil)
|
@@ -1,6 +1,5 @@
|
|
1
1
|
class Lolita::RestController < ApplicationController
|
2
|
-
include Lolita::
|
3
|
-
include Lolita::Controllers::InternalHelpers
|
2
|
+
include Lolita::ControllerAdditions
|
4
3
|
|
5
4
|
include Lolita::Hooks
|
6
5
|
add_hook :before_new, :after_new, :before_create,:after_create,:before_edit,:after_edit
|
@@ -12,12 +11,14 @@ class Lolita::RestController < ApplicationController
|
|
12
11
|
|
13
12
|
def new
|
14
13
|
self.run(:before_new)
|
14
|
+
authorize!(:create,self.resource_class)
|
15
15
|
build_resource
|
16
16
|
show_form
|
17
17
|
end
|
18
18
|
|
19
19
|
def create
|
20
20
|
self.run(:before_create)
|
21
|
+
authorize!(:create,self.resource_class)
|
21
22
|
build_resource
|
22
23
|
save_and_redirect
|
23
24
|
end
|
@@ -25,12 +26,14 @@ class Lolita::RestController < ApplicationController
|
|
25
26
|
def edit
|
26
27
|
self.run(:before_edit)
|
27
28
|
get_resource
|
29
|
+
authorize!(:update,self.resource)
|
28
30
|
show_form
|
29
31
|
end
|
30
32
|
|
31
33
|
def update
|
32
34
|
self.run(:before_update)
|
33
35
|
get_resource
|
36
|
+
authorize!(:update,self.resource)
|
34
37
|
if self.resource
|
35
38
|
self.resource=resource_with_attributes(self.resource,resource_attributes)
|
36
39
|
save_and_redirect
|
@@ -41,6 +44,7 @@ class Lolita::RestController < ApplicationController
|
|
41
44
|
def destroy
|
42
45
|
self.run(:before_destroy)
|
43
46
|
get_resource
|
47
|
+
authorize!(:destroy, self.resource)
|
44
48
|
if self.resource && self.resource.destroy
|
45
49
|
flash[:notice] = ::I18n.t "lolita.shared.destroy_notice"
|
46
50
|
else
|
@@ -52,6 +56,7 @@ class Lolita::RestController < ApplicationController
|
|
52
56
|
|
53
57
|
def index
|
54
58
|
self.run(:before_index)
|
59
|
+
authorize!(:read,self.resource_class)
|
55
60
|
respond_to do |format|
|
56
61
|
format.html do
|
57
62
|
build_response_for(:list,:page=>page)
|
@@ -125,6 +130,6 @@ class Lolita::RestController < ApplicationController
|
|
125
130
|
end
|
126
131
|
|
127
132
|
def page
|
128
|
-
resource_class.lolita.list.paginate(params[:page],
|
133
|
+
resource_class.lolita.list.paginate(params[:page],request)
|
129
134
|
end
|
130
135
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module LolitaHelper
|
2
|
-
|
3
2
|
# Classes for div block that is located to the right of menu
|
4
3
|
# This is helpful because different positionings within it exist depending on action
|
5
4
|
def content_classes
|
@@ -9,4 +8,16 @@ module LolitaHelper
|
|
9
8
|
end
|
10
9
|
classes.join(" ")
|
11
10
|
end
|
11
|
+
|
12
|
+
def include_application_assets
|
13
|
+
result = ""
|
14
|
+
Lolita.application.assets.each do |asset_name|
|
15
|
+
if attr_name.match(/\.js(\.|$)/)
|
16
|
+
result << javascript_include_tag(asset_name)
|
17
|
+
elsif attr_name.match(/\.css(\.|$)/)
|
18
|
+
result << stylesheet_link_tag(asset_name)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
raw(result)
|
22
|
+
end
|
12
23
|
end
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<%
|
2
|
+
sort_mapping = {"desc" => '⇓', "asc" => '⇑'}
|
3
|
+
new_params = params.reject{|k,v| ["controller","action"].include?(k.to_s)}
|
4
|
+
direction_indicator = raw(sort_mapping[column.current_sort_state(new_params)[1]])
|
5
|
+
new_params[:s] = column.sort_params(new_params)
|
6
|
+
%>
|
7
|
+
<%= link_to raw("#{column.title.to_s.capitalize} #{direction_indicator}"), lolita_resources_path(new_params) %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% if field.
|
1
|
+
<% if field.association && field.association.macro == :one %>
|
2
2
|
<%= render_component :"lolita/configuration/field/array/select", :display, :field=>field %>
|
3
3
|
<% else %>
|
4
4
|
<%= render_component :"lolita/configuration/field/array/habtm", :display, :field=>field %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
- ids_method = field.name.to_s.match(/_ids$/) ? field.name : "#{field.name.to_s.singularize}_ids"
|
2
|
+
|
3
|
+
.autocomplete-container
|
4
|
+
= hidden_field_tag "#{resource_name}[#{ids_method}][]",""
|
5
|
+
= text_field_tag :"autocomplete-#{resource_name}", nil, :"data-autocomplete-url" => autocomplete_field_path(:field_class => tab_form.object.class.to_s, :field_name => field.name)
|
6
|
+
%ul
|
7
|
+
- resource.persisted? && resource.send(field.name).each do |element|
|
8
|
+
%li
|
9
|
+
= element.send(element.class.lolita.tabs.first.fields.first.name.to_sym)
|
10
|
+
= link_to I18n.t("lolita.shared.delete").downcase, nil
|
11
|
+
= hidden_field_tag "#{resource_name}[#{ids_method}][]", element.id
|
@@ -0,0 +1,8 @@
|
|
1
|
+
- ids_method = field.name.to_s.match(/_ids$/) ? field.name : "#{field.name.to_s.singularize}_ids"
|
2
|
+
= hidden_field_tag "#{resource_name}[#{ids_method}][]",""
|
3
|
+
- field.view_values(self).each do |value|
|
4
|
+
- editors = resource.send(:"#{ids_method}")
|
5
|
+
.habtm-container
|
6
|
+
= label_tag "#{resource_name}_#{field.name}_#{value.last}",value.first, :class => "habtm-label"
|
7
|
+
= check_box_tag "#{resource_name}[#{ids_method}][]", value.last, resource.send("#{ids_method}").include?(value.last), :id => "#{resource_name}_#{field.name}_#{value.last}", :class => "habtm-checkbox"
|
8
|
+
.clear
|
@@ -0,0 +1,6 @@
|
|
1
|
+
- record = tab_form.object
|
2
|
+
- type_name = field.association.name.to_s + "_type"
|
3
|
+
- id_name = field.association.name.to_s + "_id"
|
4
|
+
|
5
|
+
= tab_form.select(type_name,field.polymorphic_classes, {:include_blank => true},{:"data-polymorphic-url" => array_field_data_collector_path(:name => field.name, :field_class => record.class.to_s, :class => "klass", :id =>record.send(id_name) || 0) })
|
6
|
+
= tab_form.select(id_name, field.polymorphic_association_values(:record => record))
|
data/app/views/components/lolita/configuration/field/array/polymorphic/_options_for_select.html.haml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
= options_for_select(collection,id)
|
@@ -1,5 +1 @@
|
|
1
|
-
|
2
|
-
<%= render_component :"lolita/configuration/field/string/text", :display, :field=>field %>
|
3
|
-
<% else %>
|
4
|
-
<%= tab_form.text_field field.name, field.html_options %>
|
5
|
-
<% end %>
|
1
|
+
<%= tab_form.text_field field.name, field.html_options %>
|
@@ -1 +1 @@
|
|
1
|
-
<div class="disabled-field"><%=
|
1
|
+
<div class="disabled-field"><%= raw(tab_form.object.send(field.name)) %></div>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<% end %>
|
6
6
|
<% end %>
|
7
7
|
|
8
|
-
<%=
|
8
|
+
<%= text_area resource_name, field.name, :rows=>(field.rows || 20), :"data-simple"=>field.simple %>
|
9
9
|
<% if @textarea_component_include_tinymce_once.nil? %>
|
10
10
|
<script type="text/javascript">
|
11
11
|
$(document).ready(
|
@@ -1 +1 @@
|
|
1
|
-
<%= paginate page, :theme => "lolita" %>
|
1
|
+
<%= paginate page, :theme => "lolita", :params => params %>
|
@@ -1,5 +1,10 @@
|
|
1
1
|
<div class="boxtitle">
|
2
|
-
<h1 class="black"
|
2
|
+
<h1 class="black">
|
3
|
+
<%= resource_class.model_name.human(:count=>2) %>
|
4
|
+
<% if list.search %>
|
5
|
+
<%= render_component list.search, :display %>
|
6
|
+
<% end %>
|
7
|
+
</h1>
|
3
8
|
<div class="arrow">
|
4
9
|
</div>
|
5
10
|
</div>
|
@@ -1,12 +1,14 @@
|
|
1
|
-
<div class="nested_form" id=<%= "nested_form_#{nested_form.__id__}" %>>
|
1
|
+
<div class="nested_form <%=nested_form.field_style%>" id=<%= "nested_form_#{nested_form.__id__}" %>>
|
2
2
|
<% unless nested_form.field_style == :normal %>
|
3
3
|
<%= render_component *nested_form.as_field.build(:name=>"/lolita/configuration/field", :state => :"label") %>
|
4
4
|
<% end %>
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
<div class="nested-form-fields-container">
|
6
|
+
<%= tab_form.fields_for nested_form.name, resource.send(nested_form.build_method) do |form| %>
|
7
|
+
<% tab_form(form) do %>
|
8
|
+
<%= render_component nested_form, :fields %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
</div>
|
10
12
|
<% if nested_form.expandable? && !nested_form.update_only? %>
|
11
13
|
<p><%= link_to_add_fields ::I18n.t("lolita.nested_form.add", :resource_name => nested_form.klass.model_name.human.downcase), tab_form, nested_form %> </p>
|
12
14
|
<% end %>
|
@@ -11,29 +11,22 @@
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end %>
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
}
|
30
|
-
end
|
31
|
-
%>
|
32
|
-
<li class="<%=active ? "active" : ""%> <%=branch.children.branches.any? ? "with-subtree" : ""%> <%=!tree.root? && branch==last_branch ? "last-in-subtree" : ""%>">
|
33
|
-
<%= link_to branch.title, branch.options[:url] || "#" %>
|
34
|
-
<% if branch.children.branches.any? %>
|
35
|
-
<%= render_component(:"lolita/navigation",:tree,:tree=>branch.children) %>
|
14
|
+
|
15
|
+
<% visible ||= (tree.root? || nil) %>
|
16
|
+
|
17
|
+
<% if tree.visible?(self) %>
|
18
|
+
<ul <%= !tree.root? ? "class='subtree'" : ""%> style="display:<%=visible ? "block" : "none"%>" >
|
19
|
+
<% last_branch=tree.branches.last %>
|
20
|
+
<%tree.branches.each do |branch|
|
21
|
+
if branch.visible?(self)
|
22
|
+
active = branch.active?(self) %>
|
23
|
+
<li class="<%=active ? "active" : ""%> <%=branch.subtree? ? "with-subtree" : ""%> <%=!tree.root? && branch==last_branch ? "last-in-subtree" : ""%>">
|
24
|
+
<%= link_to branch.title, branch.options[:url] || "#", :onclick => branch.subtree? ? "$(this).next().toggle();return false;" : "" %>
|
25
|
+
<% if branch.subtree? %>
|
26
|
+
<%= render_component(:"lolita/navigation",:tree,:tree=>branch.children, :visible => active) %>
|
27
|
+
<% end %>
|
28
|
+
</li>
|
36
29
|
<% end %>
|
37
|
-
|
38
|
-
|
39
|
-
|
30
|
+
<% end %>
|
31
|
+
</ul>
|
32
|
+
<% end %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<% if lolita_current_user %>
|
4
4
|
<nav>
|
5
5
|
<a href="<%=send(:"edit_#{lolita_current_user.class.to_s.downcase}_password_path")%>" class="username"><%=lolita_current_user.email%></a>
|
6
|
-
|
6
|
+
<%= link_to ::I18n.t("lolita.shared.log_out"), send(:"destroy_#{lolita_current_user.class.to_s.downcase}_session_path"), :class => "button grey", :method => Devise.sign_out_via %>
|
7
7
|
</nav>
|
8
8
|
<% end %>
|
9
9
|
</header>
|
@@ -4,11 +4,6 @@
|
|
4
4
|
<h1><%= t "lolita.tabs.save" %></h1>
|
5
5
|
<div class="arrow"></div>
|
6
6
|
</div>
|
7
|
-
|
8
|
-
<div class="last-save">
|
9
|
-
<%= resource.updated_at.strftime("#{t("lolita.tabs.last_save")}: %m/%d/%Y %H:%M ") if resource.respond_to?(:updated_at) && resource.updated_at %>
|
10
|
-
</div>
|
11
|
-
<button class="save-all"><%=::I18n.t("lolita.tabs.save")%></button>
|
12
|
-
</div>
|
7
|
+
<%= render_component "lolita/shared", :save_button%>
|
13
8
|
</div>
|
14
9
|
</div>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<div class="save black">
|
2
|
+
<div class="last-save">
|
3
|
+
<%= resource.updated_at.strftime("#{t("lolita.tabs.last_save")}: %m/%d/%Y %H:%M ") if resource.respond_to?(:updated_at) && resource.updated_at %>
|
4
|
+
</div>
|
5
|
+
<button class="save-all"><%=::I18n.t("lolita.tabs.save")%></button>
|
6
|
+
</div>
|
data/config/locales/en.yml
CHANGED
@@ -22,4 +22,12 @@ en:
|
|
22
22
|
confirm: Are you sure you want to delete record?
|
23
23
|
filter:
|
24
24
|
apply_button: Apply
|
25
|
-
include_blank_by_title: " -- Filter by %{title} -- "
|
25
|
+
include_blank_by_title: " -- Filter by %{title} -- "
|
26
|
+
search: "Search"
|
27
|
+
views:
|
28
|
+
pagination:
|
29
|
+
previous: "« Previous"
|
30
|
+
next: "Next »"
|
31
|
+
last: "Last"
|
32
|
+
first: "First"
|
33
|
+
truncate: "..."
|
data/config/locales/lv.yml
CHANGED
@@ -7,7 +7,7 @@ lv:
|
|
7
7
|
edit: Labot
|
8
8
|
delete: Dzēst
|
9
9
|
and: un
|
10
|
-
powered:
|
10
|
+
powered: Tiek darbināta ar Lolita (2010-%{year})
|
11
11
|
nested_form:
|
12
12
|
add: "Pievienot %{resource_name}"
|
13
13
|
tabs:
|
@@ -23,10 +23,11 @@ lv:
|
|
23
23
|
filter:
|
24
24
|
apply_button: Pielietot
|
25
25
|
include_blank_by_title: " -- Filtrēt pēc %{title} -- "
|
26
|
+
search: "Meklēt"
|
26
27
|
views:
|
27
28
|
pagination:
|
28
|
-
previous: "«
|
29
|
-
next: "
|
30
|
-
last: "
|
31
|
-
first: "
|
29
|
+
previous: "« Iepriekšējā"
|
30
|
+
next: "Nākošā »"
|
31
|
+
last: "Pēdējā"
|
32
|
+
first: "Pirmā"
|
32
33
|
truncate: "..."
|
data/config/routes.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
match '/lolita' => "lolita/info#index"
|
3
3
|
match '/lolita/info/properties' => "lolita/info#properties"
|
4
|
-
|
4
|
+
match "/lolita/array_field/:name/:field_class/:class/:id" => "lolita/field_data#array_polymorphic", :as => "array_field_data_collector"
|
5
|
+
match "/lolita/autocomplete_field/:field_class/:field_name" => "lolita/field_data#autocomplete_field", :as => "autocomplete_field"
|
6
|
+
end
|
data/lib/lolita.rb
CHANGED
@@ -1,29 +1,23 @@
|
|
1
1
|
|
2
2
|
$:<<File.dirname(__FILE__) unless $:.include?(File.dirname(__FILE__))
|
3
3
|
LOLITA_VERSION=File.read(File.expand_path("../../VERSION",__FILE__)).gsub(/[^.\w]/,"")
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# require "ruby-debug"
|
9
|
-
# Debugger.settings[:autoeval]=true
|
10
|
-
# else
|
11
|
-
# unless self.respond_to?(:debugger)
|
12
|
-
# def debugger
|
13
|
-
# warn "Debugger called at #{caller.first} was ignored, run lolita with -d to attatch debugger."
|
14
|
-
# end
|
15
|
-
# end
|
16
|
-
# end
|
4
|
+
FRAMEWORK = if defined?(Rails)
|
5
|
+
" with Rails #{::Rails::VERSION::STRING}"
|
6
|
+
end
|
7
|
+
puts "=> Lolita #{LOLITA_VERSION} starting#{FRAMEWORK}"
|
17
8
|
|
9
|
+
require "rubygems"
|
18
10
|
require 'abstract'
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
11
|
+
|
12
|
+
require 'active_support'
|
13
|
+
require 'active_support/core_ext/numeric/time'
|
14
|
+
require 'active_support/core_ext/date_time/conversions'
|
15
|
+
require 'active_support/concern'
|
16
|
+
require 'active_support/callbacks'
|
17
|
+
require 'active_support/dependencies'
|
18
|
+
require 'active_support/inflector'
|
19
|
+
|
20
|
+
|
27
21
|
require 'lolita/errors'
|
28
22
|
require "lolita/hooks"
|
29
23
|
# Require all ruby extensions
|
@@ -39,6 +33,7 @@ module Lolita
|
|
39
33
|
autoload(:VERSION,'lolita/version')
|
40
34
|
autoload(:ObservedArray,'lolita/observed_array')
|
41
35
|
autoload(:Builder,'lolita/builder')
|
36
|
+
autoload(:ControllerAdditions,'lolita/controller_additions')
|
42
37
|
module Builder
|
43
38
|
autoload(:Custom, 'lolita/builder')
|
44
39
|
end
|
@@ -49,6 +44,7 @@ module Lolita
|
|
49
44
|
end
|
50
45
|
|
51
46
|
module Adapter
|
47
|
+
autoload :FieldHelper, 'lolita/adapter/field_helper'
|
52
48
|
autoload :AbstractAdapter, 'lolita/adapter/abstract_adapter'
|
53
49
|
autoload :ActiveRecord, 'lolita/adapter/active_record'
|
54
50
|
autoload :Mongoid, 'lolita/adapter/mongoid'
|
@@ -62,34 +58,36 @@ module Lolita
|
|
62
58
|
autoload :NamedHook, "lolita/hooks/named_hook"
|
63
59
|
end
|
64
60
|
|
65
|
-
|
61
|
+
# Keep all configuration classes and modules, that is used to configure classes with lolita.
|
66
62
|
module Configuration
|
67
|
-
|
68
|
-
autoload :Factory, 'lolita/configuration/factory'
|
63
|
+
|
69
64
|
autoload :Base, 'lolita/configuration/base'
|
70
65
|
autoload :Column, 'lolita/configuration/column'
|
71
66
|
autoload :Columns, 'lolita/configuration/columns'
|
72
67
|
autoload :Fields, 'lolita/configuration/fields'
|
73
68
|
autoload :FieldSet, 'lolita/configuration/field_set'
|
74
69
|
autoload :List, 'lolita/configuration/list'
|
75
|
-
autoload :Page, 'lolita/configuration/page'
|
76
70
|
autoload :Tabs, 'lolita/configuration/tabs'
|
77
71
|
autoload :Filter, 'lolita/configuration/filter'
|
78
72
|
autoload :NestedForm, 'lolita/configuration/nested_form'
|
73
|
+
autoload :Search, 'lolita/configuration/search'
|
79
74
|
|
75
|
+
# Module contains classes that is used to create specific type class based on given arguments.
|
76
|
+
module Factory
|
77
|
+
autoload :Field, "lolita/configuration/factory/field"
|
78
|
+
autoload :Tab, "lolita/configuration/factory/tab"
|
79
|
+
end
|
80
|
+
|
81
|
+
# Contains all supported field types. Class name is Lolita::Configuration::Field::[FieldType]
|
80
82
|
module Field
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
base_name=File.basename(path,".rb")
|
86
|
-
autoload :"#{base_name.camelize}", "lolita/configuration/#{type}/#{base_name}"
|
87
|
-
end
|
83
|
+
autoload :Base,'lolita/configuration/field'
|
84
|
+
Dir["#{File.dirname(__FILE__)}/lolita/configuration/field/**/*.*"].each do |path|
|
85
|
+
base_name=File.basename(path,".rb")
|
86
|
+
autoload :"#{base_name.camelize}", "lolita/configuration/field/#{base_name}"
|
88
87
|
end
|
89
88
|
end
|
90
|
-
|
89
|
+
|
91
90
|
module Tab
|
92
|
-
extend Lolita::Configuration::Factory
|
93
91
|
autoload :Base, 'lolita/configuration/tab'
|
94
92
|
["tab"].each do |type|
|
95
93
|
Dir["#{File.dirname(__FILE__)}/lolita/configuration/#{type}/**/*.*"].each do |path|
|
@@ -101,6 +99,9 @@ module Lolita
|
|
101
99
|
|
102
100
|
def self.included(base)
|
103
101
|
base.class_eval do
|
102
|
+
include Lolita::Hooks
|
103
|
+
add_hook :after_lolita_loaded
|
104
|
+
|
104
105
|
extend ClassMethods
|
105
106
|
def lolita
|
106
107
|
self.class.lolita
|
@@ -112,6 +113,7 @@ module Lolita
|
|
112
113
|
def lolita(&block)
|
113
114
|
Lolita::LazyLoader.lazy_load(self,:@lolita,Lolita::Configuration::Base,self,&block)
|
114
115
|
end
|
116
|
+
|
115
117
|
def lolita=(value)
|
116
118
|
if value.is_a?(Lolita::Configuration::Base)
|
117
119
|
@lolita=value
|
@@ -131,7 +133,7 @@ module Lolita
|
|
131
133
|
autoload :UserHelpers, 'lolita/controllers/user_helpers'
|
132
134
|
autoload :UrlHelpers, 'lolita/controllers/url_helpers'
|
133
135
|
autoload :ComponentHelpers, 'lolita/controllers/component_helpers'
|
134
|
-
autoload :
|
136
|
+
autoload :AuthorizationHelpers, 'lolita/controllers/authorization_helpers'
|
135
137
|
end
|
136
138
|
|
137
139
|
module Navigation
|
@@ -146,6 +148,10 @@ module Lolita
|
|
146
148
|
end
|
147
149
|
end
|
148
150
|
|
151
|
+
module Search
|
152
|
+
autoload :Simple, 'lolita/search/simple'
|
153
|
+
end
|
154
|
+
|
149
155
|
@@scopes={}
|
150
156
|
|
151
157
|
def self.scope name=nil
|
@@ -173,6 +179,13 @@ module Lolita
|
|
173
179
|
end
|
174
180
|
|
175
181
|
def self.method_missing method_name, *args, &block
|
182
|
+
self.class_eval <<-LOLITA_SETUP,__FILE__,__LINE__+1
|
183
|
+
class << self
|
184
|
+
def #{method_name}(*args,&block)
|
185
|
+
scope.send(:#{method_name},*args,&block)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
LOLITA_SETUP
|
176
189
|
scope.send(method_name,*args,&block)
|
177
190
|
end
|
178
191
|
|
@@ -187,5 +200,9 @@ module Lolita
|
|
187
200
|
end
|
188
201
|
|
189
202
|
if Lolita.rails3?
|
203
|
+
require "base64"
|
204
|
+
require 'kaminari'
|
205
|
+
# require 'tinymce-rails'
|
206
|
+
# require 'jquery-rails'
|
190
207
|
require 'lolita/rails/all'
|
191
208
|
end
|