thecore_ui_rails_admin 2.1.3 → 2.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee +233 -0
- data/app/assets/javascripts/thecore_ui_rails_admin/thecore_rails_admin.js +78 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/animate.css +3458 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/apexcharts.scss +7 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/common.scss +36 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/devise.scss +248 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/flashing.scss +28 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/mixins.scss +18 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/thecore.scss +25 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/thecore_rails_admin.scss +204 -0
- data/app/assets/stylesheets/thecore_ui_rails_admin/togglable-sidebar.scss +90 -0
- data/app/controllers/pages_controller.rb +43 -0
- data/app/helpers/devise_bootstrap_errors_helper.rb +20 -0
- data/app/helpers/thecore_helper.rb +54 -0
- data/app/views/layouts/rails_admin/_navigation.html.haml +13 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +3 -0
- data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +4 -0
- data/app/views/layouts/rails_admin/_user_navigation.html.haml +7 -0
- data/app/views/layouts/rails_admin/application.html.haml +59 -0
- data/app/views/layouts/rails_admin/pjax.html.haml +25 -0
- data/app/views/rails_admin/main/_card.html.haml +17 -0
- data/app/views/rails_admin/main/_modal_interaction.html.erb +53 -0
- data/app/views/rails_admin/main/dashboard.html.haml +43 -0
- data/app/views/rails_admin/main/index.html.haml +90 -0
- data/app/views/shared/_flash.html.erb +10 -0
- data/config/initializers/rails_admin.rb +73 -0
- data/config/initializers/thecore_concern.rb +130 -0
- data/config/initializers/thecore_ui_rails_admin_app_configs.rb +17 -0
- data/config/locales/en.index_cards.custom.yml +8 -0
- data/config/locales/en.main.yml +27 -0
- data/config/locales/en.rails_admin.yml +34 -0
- data/config/locales/en.rollincode.yml +5 -0
- data/config/locales/it.index_cards.custom.yml +20 -0
- data/config/locales/it.main.yml +27 -0
- data/config/locales/it.rails_admin.yml +4 -0
- data/config/locales/it.rollincode.yml +5 -0
- data/config/locales/thecore_settings.en.yml +31 -0
- data/config/locales/thecore_settings.it.yml +31 -0
- data/config/routes.rb +10 -0
- data/db/migrate/20161227101954_create_rails_admin_settings.rb +25 -0
- data/db/migrate/20161227101956_add_app_name.rb +5 -0
- data/lib/abilities/thecore_ui_rails_admin.rb +12 -0
- data/lib/concerns/rails_admin_requirements.rb +19 -0
- data/lib/concerns/thecore_rails_admin_bulk_delete_concern.rb +16 -0
- data/lib/concerns/thecore_rails_admin_export_concern.rb +16 -0
- data/lib/concerns/thecore_ui_rails_admin_permission.rb +32 -0
- data/lib/concerns/thecore_ui_rails_admin_role.rb +36 -0
- data/lib/concerns/thecore_ui_rails_admin_user.rb +75 -0
- data/lib/thecore_ui_rails_admin.rb +21 -3
- data/lib/thecore_ui_rails_admin/version.rb +1 -1
- metadata +147 -2
@@ -0,0 +1,90 @@
|
|
1
|
+
:ruby
|
2
|
+
query = params[:query]
|
3
|
+
params = request.params.except(:authenticity_token, :action, :controller, :utf8, :bulk_export, :_pjax)
|
4
|
+
params.delete(:query) if params[:query].blank?
|
5
|
+
params.delete(:sort_reverse) unless params[:sort_reverse] == 'true'
|
6
|
+
sort_reverse = params[:sort_reverse]
|
7
|
+
sort = params[:sort]
|
8
|
+
params.delete(:sort) if params[:sort] == @model_config.list.sort_by.to_s
|
9
|
+
export_action = RailsAdmin::Config::Actions.find(:export, { controller: self.controller, abstract_model: @abstract_model })
|
10
|
+
export_action = nil unless export_action && authorized?(export_action.authorization_key, @abstract_model)
|
11
|
+
description = RailsAdmin.config(@abstract_model.model_name).description
|
12
|
+
properties = @model_config.list.with(controller: self.controller, view: self, object: @abstract_model.model.new).visible_fields
|
13
|
+
checkboxes = @model_config.list.checkboxes?
|
14
|
+
# columns paginate
|
15
|
+
unless (frozen_columns = @model_config.list.sidescroll_frozen_columns)
|
16
|
+
sets = get_column_sets(properties)
|
17
|
+
properties = sets[params[:set].to_i] || []
|
18
|
+
other_left = ((params[:set].to_i - 1) >= 0) && sets[params[:set].to_i - 1].present?
|
19
|
+
other_right = sets[params[:set].to_i + 1].present?
|
20
|
+
end
|
21
|
+
|
22
|
+
- content_for :contextual_tabs do
|
23
|
+
- if checkboxes
|
24
|
+
= bulk_menu
|
25
|
+
- if filterable_fields.present?
|
26
|
+
%li.dropdown{style: 'float:right'}
|
27
|
+
%a.dropdown-toggle{href: '#', :'data-toggle' => "dropdown"}
|
28
|
+
= t('admin.misc.add_filter')
|
29
|
+
%b.caret
|
30
|
+
%ul.dropdown-menu#filters{style: 'left:auto; right:0;'}
|
31
|
+
- filterable_fields.each do |field|
|
32
|
+
- field_options = case field.type
|
33
|
+
- when :enum
|
34
|
+
- options_for_select(field.with(object: @abstract_model.model.new).enum)
|
35
|
+
- else
|
36
|
+
- ''
|
37
|
+
%li
|
38
|
+
%a{href: '#', :"data-field-label" => field.label, :"data-field-name" => field.name, :"data-field-options" => field_options.html_safe, :"data-field-type" => field.type, :"data-field-value" => "", :"data-field-datetimepicker-format" => (field.try(:parser) && field.parser.to_momentjs)}= capitalize_first_letter(field.label)
|
39
|
+
|
40
|
+
%style
|
41
|
+
- properties.select{ |p| p.column_width.present? }.each do |property|
|
42
|
+
= "#list th.#{property.css_class} { width: #{property.column_width}px; min-width: #{property.column_width}px; }"
|
43
|
+
= "#list td.#{property.css_class} { max-width: #{property.column_width}px; }"
|
44
|
+
|
45
|
+
#list
|
46
|
+
= form_tag(index_path(params.except(*%w[page f query])), method: :get, class: "pjax-form form-inline") do
|
47
|
+
.well
|
48
|
+
%span#filters_box{data: {options: ordered_filter_options.to_json}}
|
49
|
+
%hr.filters_box{style: "display:#{ordered_filters.empty? ? 'none' : 'block'}"}
|
50
|
+
.input-group
|
51
|
+
%input.form-control.input-small{name: "query", type: "search", value: query, placeholder: t("admin.misc.filter")}
|
52
|
+
%span.input-group-btn
|
53
|
+
%button.btn.btn-primary{type: 'submit', :'data-disable-with' => '<i class="icon-white icon-refresh"></i> '.html_safe + t('admin.misc.refresh')}
|
54
|
+
%i.icon-white.icon-refresh
|
55
|
+
= t('admin.misc.refresh')
|
56
|
+
%button#remove_filter.btn.btn-info{title: "Reset filters"}
|
57
|
+
%i.icon-white.icon-remove
|
58
|
+
- if export_action
|
59
|
+
%span{style: 'float:right'}= link_to wording_for(:link, export_action), export_path(params.except('set').except('page')), class: 'btn btn-info'
|
60
|
+
|
61
|
+
- unless @model_config.list.scopes.empty?
|
62
|
+
%ul.nav.nav-tabs#scope_selector
|
63
|
+
- @model_config.list.scopes.each_with_index do |scope, index|
|
64
|
+
- scope = '_all' if scope.nil?
|
65
|
+
%li{class: "#{'active' if scope.to_s == params[:scope] || (params[:scope].blank? && index == 0)}"}
|
66
|
+
%a{href: index_path(params.merge(scope: scope, page: nil)), class: 'pjax'}= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize))
|
67
|
+
|
68
|
+
= form_tag bulk_action_path(model_name: @abstract_model.to_param), method: :post, id: "bulk_form", class: ["form", frozen_columns ? 'ra-sidescroll' : nil], data: (frozen_columns ? {ra_sidescroll: frozen_columns} : {}) do
|
69
|
+
= hidden_field_tag :bulk_action
|
70
|
+
- if description.present?
|
71
|
+
%p
|
72
|
+
%strong= description
|
73
|
+
|
74
|
+
- @objects.each do |object|
|
75
|
+
= render partial: "card", locals: {object: object, properties: properties, sort: sort, sort_reverse: sort_reverse}
|
76
|
+
|
77
|
+
- if @model_config.list.limited_pagination
|
78
|
+
.row
|
79
|
+
.col-md-6= paginate(@objects, theme: 'ra-twitter-bootstrap/without_count', total_pages: Float::INFINITY, remote: true)
|
80
|
+
|
81
|
+
- elsif @objects.respond_to?(:total_count)
|
82
|
+
- total_count = @objects.total_count.to_i
|
83
|
+
.row
|
84
|
+
.col-md-6= paginate(@objects, theme: 'ra-twitter-bootstrap', remote: true)
|
85
|
+
.row
|
86
|
+
.col-md-6= link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "show-all btn btn-default clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size
|
87
|
+
.clearfix.total-count= "#{total_count} #{@model_config.pluralize(total_count).downcase}"
|
88
|
+
|
89
|
+
- else
|
90
|
+
.clearfix.total-count= "#{@objects.size} #{@model_config.pluralize(@objects.size).downcase}"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% flash.each do |type, message| %>
|
2
|
+
<%-unless [true, "true", :true].include? message%>
|
3
|
+
<div class="alert <%= bootstrap_class_for(type) %> fade in" role='alert'>
|
4
|
+
<button class="close" data-dismiss="alert">×</button>
|
5
|
+
<span class="glyphicon <%= bootstrap_glyphs_icon(type)%>" aria-hidden="true"></span>
|
6
|
+
<span class="sr-only"><%= type.capitalize%>:</span>
|
7
|
+
<%= message %>
|
8
|
+
</div>
|
9
|
+
<%-end%>
|
10
|
+
<% end %>
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'rails_admin'
|
2
|
+
|
3
|
+
RailsAdmin.config do |config|
|
4
|
+
# Link for background Job
|
5
|
+
(config.navigation_static_links ||= {}).merge! "Background Monitor" => "#{ENV['RAILS_RELATIVE_URL_ROOT']}/app/sidekiq"
|
6
|
+
|
7
|
+
### Popular gems integration
|
8
|
+
config.model "RoleUser" do
|
9
|
+
visible false
|
10
|
+
end
|
11
|
+
|
12
|
+
config.model "Predicate" do
|
13
|
+
visible false
|
14
|
+
end
|
15
|
+
|
16
|
+
config.model "Target" do
|
17
|
+
visible false
|
18
|
+
end
|
19
|
+
|
20
|
+
config.model "Action" do
|
21
|
+
visible false
|
22
|
+
end
|
23
|
+
|
24
|
+
config.model "PermissionRole" do
|
25
|
+
visible false
|
26
|
+
end
|
27
|
+
|
28
|
+
config.model "Permission" do
|
29
|
+
visible false
|
30
|
+
end
|
31
|
+
|
32
|
+
config.model "ActionText::RichText" do
|
33
|
+
visible false
|
34
|
+
end
|
35
|
+
|
36
|
+
config.model "ActiveStorage::Blob" do
|
37
|
+
visible false
|
38
|
+
end
|
39
|
+
|
40
|
+
config.model "ActiveStorage::Attachment" do
|
41
|
+
visible false
|
42
|
+
end
|
43
|
+
|
44
|
+
## == Devise ==
|
45
|
+
config.authenticate_with do
|
46
|
+
warden.authenticate! scope: :user
|
47
|
+
end
|
48
|
+
config.current_user_method(&:current_user)
|
49
|
+
|
50
|
+
## == Cancan ==
|
51
|
+
config.authorize_with :cancancan
|
52
|
+
|
53
|
+
## == PaperTrail ==
|
54
|
+
# config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0
|
55
|
+
config.show_gravatar = false
|
56
|
+
### More at https://github.com/sferik/rails_admin/wiki/Base-configuration
|
57
|
+
config.label_methods.unshift(:display_name)
|
58
|
+
|
59
|
+
config.actions do
|
60
|
+
# show_in_app
|
61
|
+
dashboard # mandatory
|
62
|
+
index # mandatory
|
63
|
+
new
|
64
|
+
export
|
65
|
+
bulk_delete
|
66
|
+
show
|
67
|
+
edit
|
68
|
+
delete
|
69
|
+
toggle
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# require "thecore_rails_admin_main_controller_concern"
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module ThecoreConcern
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
# Prevent CSRF attacks by raising an exception.
|
8
|
+
# For APIs, you may want to use :null_session instead.
|
9
|
+
layout 'thecore'
|
10
|
+
protect_from_forgery with: :exception, prepend: true
|
11
|
+
rescue_from CanCan::AccessDenied do |exception|
|
12
|
+
redirect_to main_app.root_url, :alert => exception.message
|
13
|
+
end
|
14
|
+
include HttpAcceptLanguage::AutoLocale
|
15
|
+
before_action :store_user_location!, if: :storable_location?
|
16
|
+
before_action :configure_permitted_parameters, if: :devise_controller?
|
17
|
+
before_action :reject_locked!, if: :devise_controller?
|
18
|
+
|
19
|
+
helper_method :reject_locked!
|
20
|
+
helper_method :require_admin!
|
21
|
+
helper_method :line_break
|
22
|
+
helper_method :title
|
23
|
+
helper_method :bootstrap_class_for
|
24
|
+
|
25
|
+
# Redirects on successful sign in
|
26
|
+
def after_sign_in_path_for resource
|
27
|
+
# Rails.logger.debug("SUCCESFULL SIGNIN, USER IS ADMIN? #{current_user.admin?}")
|
28
|
+
#if current_user.admin?
|
29
|
+
# GETTING JUST THE ROOT ACTIONS I (CURRENT_USER) CAN MANAGE
|
30
|
+
root_actions = RailsAdmin::Config::Actions.all(:root).select {|action| can? action.action_name, :all }
|
31
|
+
# Rails.logger.debug "ROOT ACTIONS: #{root_actions.inspect}"
|
32
|
+
# GETTING THE FIRST ACTION I CAN MANAGE
|
33
|
+
action = root_actions.collect(&:action_name).first
|
34
|
+
# Rails.logger.debug "FIRST ACTION: #{action}"
|
35
|
+
# REDIRECT TO THAT ACTION
|
36
|
+
stored_location_for(resource) || rails_admin.send("#{action}_path").sub("#{ENV['RAILS_RELATIVE_URL_ROOT']}#{ENV['RAILS_RELATIVE_URL_ROOT']}", "#{ENV['RAILS_RELATIVE_URL_ROOT']}")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def title value = "Thecore"
|
41
|
+
@title = value
|
42
|
+
end
|
43
|
+
|
44
|
+
def bootstrap_class_for flash_type
|
45
|
+
case flash_type
|
46
|
+
when 'success'
|
47
|
+
'alert-success'
|
48
|
+
when 'error'
|
49
|
+
'alert-danger'
|
50
|
+
when 'alert'
|
51
|
+
'alert-warning'
|
52
|
+
when 'notice'
|
53
|
+
'alert-info'
|
54
|
+
else
|
55
|
+
flash_type.to_s
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def line_break s
|
60
|
+
s.gsub("\n", "<br/>")
|
61
|
+
end
|
62
|
+
# Devise permitted params
|
63
|
+
def configure_permitted_parameters
|
64
|
+
devise_parameter_sanitizer.permit(:sign_in) {
|
65
|
+
|u| u.permit(
|
66
|
+
:username,
|
67
|
+
:password,
|
68
|
+
:email,
|
69
|
+
:login,
|
70
|
+
:password_confirmation,
|
71
|
+
:remember_me)
|
72
|
+
}
|
73
|
+
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(
|
74
|
+
:username,
|
75
|
+
:password,
|
76
|
+
:email,
|
77
|
+
:login,
|
78
|
+
:password_confirmation)
|
79
|
+
}
|
80
|
+
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(
|
81
|
+
:username,
|
82
|
+
:email,
|
83
|
+
:login,
|
84
|
+
:password,
|
85
|
+
:password_confirmation,
|
86
|
+
:current_password)
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
# Auto-sign out locked users
|
91
|
+
def reject_locked!
|
92
|
+
if current_user && current_user.locked?
|
93
|
+
sign_out current_user
|
94
|
+
user_session = nil
|
95
|
+
current_user = nil
|
96
|
+
flash[:alert] = "Your account is locked."
|
97
|
+
flash[:notice] = nil
|
98
|
+
redirect_to root_url
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# Only permits admin users
|
103
|
+
def require_admin!
|
104
|
+
authenticate_user!
|
105
|
+
|
106
|
+
if current_user && !current_user.admin?
|
107
|
+
redirect_to inside_path
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Its important that the location is NOT stored if:
|
112
|
+
# - The request method is not GET (non idempotent)
|
113
|
+
# - The request is handled by a Devise controller such as
|
114
|
+
# Devise::SessionsController as that could cause an
|
115
|
+
# infinite redirect loop.
|
116
|
+
# - The request is an Ajax request as this can lead to very unexpected
|
117
|
+
# behaviour.
|
118
|
+
def storable_location?
|
119
|
+
request.get? && is_navigational_format? && !devise_controller? && !request.xhr?
|
120
|
+
end
|
121
|
+
|
122
|
+
def store_user_location!
|
123
|
+
# :user is the scope we are authenticating
|
124
|
+
store_location_for(:user, request.fullpath)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# include the extension
|
129
|
+
ActionController::Base.send(:include, ThecoreConcern)
|
130
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Rails.application.configure do
|
2
|
+
# config.assets.paths << root.join("app", "assets", "stylesheets", "thecore_ui_rails_admin")
|
3
|
+
# config.assets.paths << root.join("app", "assets", "javascripts", "thecore_ui_rails_admin")
|
4
|
+
# Login Page and pages not in RailsAdmin
|
5
|
+
config.assets.precompile += %w( thecore_ui_rails_admin/thecore.css thecore_ui_rails_admin/thecore.js )
|
6
|
+
# Pages under Rails Admin
|
7
|
+
config.assets.precompile += %w( thecore_ui_rails_admin/thecore_rails_admin.css thecore_ui_rails_admin/thecore_rails_admin.js )
|
8
|
+
|
9
|
+
config.after_initialize do
|
10
|
+
RailsAdmin::Config::Actions::Export.send(:include, ExportConcern)
|
11
|
+
RailsAdmin::Config::Actions::BulkDelete.send(:include, BulkDeleteConcern)
|
12
|
+
RailsAdminSettings::Setting.send(:include, RailsAdminSettings::RailsAdminExtensionConfig)
|
13
|
+
User.send(:include, ThecoreUiRailsAdminUser)
|
14
|
+
Role.send(:include, ThecoreUiRailsAdminRole)
|
15
|
+
Permission.send(:include, ThecoreUiRailsAdminPermission)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
it:
|
2
|
+
yes: Yes
|
3
|
+
no: Cancel
|
4
|
+
error: Error
|
5
|
+
question: Question
|
6
|
+
root_actions: Root Actions
|
7
|
+
admin:
|
8
|
+
js:
|
9
|
+
true: True
|
10
|
+
false: False
|
11
|
+
is_present: Is present
|
12
|
+
is_blank: Is blank
|
13
|
+
date: Date ...
|
14
|
+
between_and_: Between ... and ...
|
15
|
+
today: Today
|
16
|
+
yesterday: Yesterday
|
17
|
+
this_week: This week
|
18
|
+
last_week: Last week
|
19
|
+
number: Number ...
|
20
|
+
contains: Contains
|
21
|
+
is_exactly: Is exactly
|
22
|
+
starts_with: Starts with
|
23
|
+
ends_with: Ends with
|
24
|
+
too_many_objects: "Too many objects, use search box above"
|
25
|
+
no_objects: "No objects found"
|
26
|
+
loading: "Loading..."
|
27
|
+
toggle_navigation: Toggle navigation
|
@@ -0,0 +1,34 @@
|
|
1
|
+
en:
|
2
|
+
admin:
|
3
|
+
misc:
|
4
|
+
scopes: Fast Filters
|
5
|
+
scopes:
|
6
|
+
all: All
|
7
|
+
order_by_name: Order By Name
|
8
|
+
order_by_insert_date: Order By Date
|
9
|
+
starts_with_a: Starts with A
|
10
|
+
starts_with_b: Starts with B
|
11
|
+
starts_with_c: Starts with C
|
12
|
+
starts_with_d: Starts with D
|
13
|
+
starts_with_e: Starts with E
|
14
|
+
starts_with_f: Starts with F
|
15
|
+
starts_with_g: Starts with G
|
16
|
+
starts_with_h: Starts with H
|
17
|
+
starts_with_i: Starts with I
|
18
|
+
starts_with_j: Starts with J
|
19
|
+
starts_with_k: Starts with K
|
20
|
+
starts_with_l: Starts with L
|
21
|
+
starts_with_m: Starts with M
|
22
|
+
starts_with_n: Starts with N
|
23
|
+
starts_with_o: Starts with O
|
24
|
+
starts_with_p: Starts with P
|
25
|
+
starts_with_q: Starts with Q
|
26
|
+
starts_with_r: Starts with R
|
27
|
+
starts_with_s: Starts with S
|
28
|
+
starts_with_t: Starts with T
|
29
|
+
starts_with_u: Starts with U
|
30
|
+
starts_with_v: Starts with V
|
31
|
+
starts_with_w: Starts with W
|
32
|
+
starts_with_x: Starts with X
|
33
|
+
starts_with_y: Starts with Y
|
34
|
+
starts_with_z: Starts with Z
|
@@ -0,0 +1,27 @@
|
|
1
|
+
it:
|
2
|
+
yes: Si
|
3
|
+
no: Annulla
|
4
|
+
error: Errore
|
5
|
+
question: Domanda
|
6
|
+
root_actions: "Operazioni"
|
7
|
+
admin:
|
8
|
+
js:
|
9
|
+
true: Vero
|
10
|
+
false: Falso
|
11
|
+
is_present: Is present
|
12
|
+
is_blank: Is blank
|
13
|
+
date: Date ...
|
14
|
+
between_and_: Between ... and ...
|
15
|
+
today: Today
|
16
|
+
yesterday: Yesterday
|
17
|
+
this_week: This week
|
18
|
+
last_week: Last week
|
19
|
+
number: Number ...
|
20
|
+
contains: Contains
|
21
|
+
is_exactly: Is exactly
|
22
|
+
starts_with: Starts with
|
23
|
+
ends_with: Ends with
|
24
|
+
too_many_objects: "Too many objects, use search box above"
|
25
|
+
no_objects: "No objects found"
|
26
|
+
loading: "Loading..."
|
27
|
+
toggle_navigation: Toggle navigation
|