lesli 5.0.12 → 5.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/lesli/brand/app-logo.png +0 -0
  3. data/app/assets/javascripts/lesli/templates/application.js +14 -0
  4. data/app/assets/javascripts/lesli/templates/public.js +14 -0
  5. data/app/assets/stylesheets/lesli/templates/application.css +851 -21432
  6. data/app/assets/stylesheets/lesli/templates/public.css +1 -19098
  7. data/app/controllers/lesli/application_controller.rb +1 -0
  8. data/app/controllers/lesli/interfaces/application/authorization.rb +1 -1
  9. data/app/helpers/lesli/assets_helper.rb +24 -6
  10. data/app/helpers/lesli/navigation_helper.rb +15 -11
  11. data/app/lib/date2.rb +8 -0
  12. data/app/lib/lesli/system.rb +13 -1
  13. data/app/models/concerns/user_extensions.rb +6 -0
  14. data/app/models/lesli/user.rb +2 -2
  15. data/app/operators/lesli/controller_operator.rb +4 -1
  16. data/app/services/lesli/user_service.rb +1 -1
  17. data/app/views/lesli/layouts/application-lesli.html.erb +2 -0
  18. data/app/views/lesli/partials/_application-data.html.erb +3 -3
  19. data/app/views/lesli/partials/_application-lesli-header.html.erb +47 -22
  20. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +2 -2
  21. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +8 -1
  22. data/app/views/lesli/partials/_application-lesli-scss.html.erb +2 -2
  23. data/app/views/lesli/wrappers/_application-devise-simple.erb +1 -1
  24. data/config/initializers/lesli.rb +7 -1
  25. data/config/locales/translations.en.yml +5 -3
  26. data/config/locales/translations.es.yml +5 -3
  27. data/config/locales/translations.fr.yml +5 -3
  28. data/config/locales/translations.it.yml +5 -3
  29. data/config/locales/translations.pt.yml +5 -3
  30. data/lib/generators/application_lesli_generator.rb +164 -0
  31. data/lib/generators/lesli/spec/USAGE +8 -0
  32. data/lib/generators/lesli/spec/spec_generator.rb +25 -0
  33. data/lib/generators/lesli/spec/templates/spec-factory.template +17 -0
  34. data/lib/generators/lesli/spec/templates/spec-model.template +70 -0
  35. data/lib/lesli/configuration.rb +1 -1
  36. data/lib/lesli/engine.rb +2 -3
  37. data/lib/lesli/r_spec.rb +40 -0
  38. data/lib/lesli/routing.rb +57 -0
  39. data/lib/lesli/version.rb +2 -2
  40. data/lib/lesli.rb +2 -0
  41. data/lib/scss/layouts/application-component.scss +1 -1
  42. data/lib/scss/layouts/application-content.scss +35 -0
  43. data/lib/scss/layouts/application-header.scss +37 -109
  44. data/lib/scss/layouts/{application-navbar.scss → application-navigation.scss} +21 -4
  45. data/lib/scss/layouts/application-search.scss +1 -1
  46. data/lib/scss/settings/variables.scss +1 -1
  47. data/lib/scss/templates/application.scss +8 -37
  48. data/lib/scss/templates/public.scss +6 -4
  49. data/lib/tasks/lesli_tasks.rake +3 -3
  50. data/lib/vue/application.js +6 -4
  51. data/lib/vue/layouts/application-component.vue +2 -2
  52. data/lib/vue/layouts/application-header.vue +108 -87
  53. data/lib/vue/panels/panel-support-tickets.vue +4 -2
  54. data/lib/vue/shared/dashboards/apps/edit.vue +1 -1
  55. data/lib/vue/shared/dashboards/components/form.vue +2 -2
  56. data/lib/vue/stores/translations.json +10 -0
  57. data/lib/webpack/base.js +11 -6
  58. data/lib/webpack/core.js +8 -6
  59. data/lib/webpack/engines.js +3 -1
  60. data/lib/webpack/root.js +105 -0
  61. data/lib/webpack/version.js +37 -0
  62. metadata +17 -24
  63. data/app/assets/stylesheets/lesli/users/confirmations.css +0 -19219
  64. data/app/assets/stylesheets/lesli/users/passwords.css +0 -19202
  65. data/app/assets/stylesheets/lesli/users/registrations.css +0 -19594
  66. data/app/assets/stylesheets/lesli/users/sessions.css +0 -19594
  67. data/lib/scss/bulma/loader.scss +0 -92
@@ -43,6 +43,7 @@ module Lesli
43
43
  end
44
44
 
45
45
  def language
46
+
46
47
  # check if param locale was sent by the user
47
48
  unless params[:locale].blank?
48
49
 
@@ -12,7 +12,7 @@ module Lesli
12
12
  engine_path = nil
13
13
 
14
14
  # check if the users is logged into the system
15
- unless user_signed_in?
15
+ unless user_signed_in?()
16
16
 
17
17
  message = "Please Login to view that page!"
18
18
 
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
@@ -39,9 +39,18 @@ module Lesli
39
39
  # lesli_application_stylesheet_path(:engine) (TODO) -> stylesheet from engine current
40
40
  # lesli_application_stylesheet_path(:cloud_driver) -> stylesheet from engine specific
41
41
  def lesli_application_stylesheet_path(engine = nil)
42
+
43
+ # Stylesheets from specific engine
42
44
  return "#{engine}/templates/application" if engine
43
45
 
44
- "#{lesli_engine(:code)}/application"
46
+ # Get current engine information
47
+ lesli_engine_code = lesli_engine(:code)
48
+
49
+ # Rails main host app stylesheets
50
+ return "application" if lesli_engine_code == "root"
51
+
52
+ # Rails engines stylesheets
53
+ "#{lesli_engine_code}/application"
45
54
  end
46
55
 
47
56
  # Return a string path to load the main engine stylesheet
@@ -57,12 +66,21 @@ module Lesli
57
66
  def lesli_application_javascript_path
58
67
  # get the namespace to load specific javascript file
59
68
  # for engine or specific javascript file for core controller
60
- path_segments = controller_path.split("/")
61
- lesli_engine = path_segments.shift
69
+ # path_segments = controller_path.split("/")
70
+ # lesli_engine = path_segments.shift
62
71
 
63
- return "onboardings/application" if is_lesli_onboarding?
72
+ # return "onboardings/application" if is_lesli_onboarding?
64
73
 
65
- "#{lesli_engine}/application"
74
+
75
+
76
+ # Get current engine information
77
+ lesli_engine_code = lesli_engine(:code)
78
+
79
+ # Rails main host app stylesheets
80
+ return "application" if lesli_engine_code == "root"
81
+
82
+ # Rails engines stylesheets
83
+ "#{lesli_engine_code}/application"
66
84
  end
67
85
 
68
86
  def javascript_googlemaps_sdk
@@ -42,9 +42,15 @@ module Lesli
42
42
 
43
43
  # Prints a html link inside a list item
44
44
  def navigation_item(path, label, icon = nil, reload: false)
45
+ content_tag(:li) do
46
+ navigation_link(path, label, icon, reload:reload)
47
+ end
48
+ end
49
+
50
+ def navigation_link(path, label, icon = nil, reload: false)
45
51
  # default vue router links for single page applications
46
52
  html_element = "router-link"
47
- html_options = { to: path }
53
+ html_options = { to: path, class: "navbar-item", 'active-class': "navigation-link-active" }
48
54
 
49
55
  # if reload is nedeed, we use a standard "a" tag
50
56
  if reload
@@ -52,16 +58,14 @@ module Lesli
52
58
  html_options = { href: path }
53
59
  end
54
60
 
55
- content_tag(:li) do
56
- content_tag(html_element, html_options) do
57
- # print a simple menu item (without icon)
58
- concat content_tag(:span, label, class: "text iconless") unless icon
59
-
60
- # print a full menu item if icon was requested
61
- if icon
62
- concat content_tag("span", nil, class: [icon, "icono"])
63
- concat content_tag(:span, label, class: "text")
64
- end
61
+ content_tag(html_element, html_options) do
62
+ # print a simple menu item (without icon)
63
+ concat content_tag(:span, label, class: "text iconless") unless icon
64
+
65
+ # print a full menu item if icon was requested
66
+ if icon
67
+ concat content_tag(:span, nil, class: icon)
68
+ concat content_tag(:span, label, class: "text")
65
69
  end
66
70
  end
67
71
  end
data/app/lib/date2.rb CHANGED
@@ -138,6 +138,11 @@ class Date2
138
138
  # get right format for dates
139
139
  format = self.db_format
140
140
 
141
+ # compatibility for SQLite
142
+ if ActiveRecord::Base.connection.adapter_name == "SQLite"
143
+ return "strftime('#{format}', #{table}#{column}) as #{column}_string"
144
+ end
145
+
141
146
  "TO_CHAR(#{table}#{column} at time zone 'utc' at time zone '#{@settings[:time_zone]}', '#{format}') as #{column}_string"
142
147
 
143
148
  end
@@ -175,6 +180,9 @@ class Date2
175
180
  def db_format
176
181
  format = @format
177
182
 
183
+ # SQLite format dates are the same of ruby format
184
+ return format if ActiveRecord::Base.connection.adapter_name == "SQLite"
185
+
178
186
  # Convert Ruby to postgresql date format
179
187
  format = format.gsub("%Y", "YYYY")
180
188
  format = format.gsub("%m", "MM")
@@ -42,6 +42,9 @@ module Lesli
42
42
 
43
43
  engines() if ENGINES.empty?
44
44
 
45
+ # the Root engine represents the host Rails app
46
+ engine = "Root" unless LESLI_ENGINES.include?(engine)
47
+
45
48
  # return specific property if requested
46
49
  return ENGINES[engine][property.to_sym] unless property.blank?
47
50
 
@@ -59,7 +62,7 @@ module Lesli
59
62
  LESLI_ENGINES.each do |engine|
60
63
  next unless Object.const_defined?(engine)
61
64
  engine_instance = "#{engine}".constantize
62
- ENGINES[engine]= {
65
+ ENGINES[engine] = {
63
66
  :code => engine.underscore,
64
67
  :name => lesli_engine_name(engine),
65
68
  :path => engine_instance::Engine.routes.find_script_name({}),
@@ -69,6 +72,15 @@ module Lesli
69
72
  }
70
73
  end
71
74
 
75
+ ENGINES["Root"] = {
76
+ :code => "root",
77
+ :name => "Root",
78
+ :path => "/",
79
+ :version => "1.0.0",
80
+ :build => "0000000",
81
+ :dir => Rails.root.to_s
82
+ }
83
+
72
84
  ENGINES
73
85
  end
74
86
 
@@ -57,6 +57,12 @@ module UserExtensions
57
57
  end
58
58
 
59
59
 
60
+ # @return [String] The first name of this user.
61
+ def name2
62
+ self.first_name
63
+ end
64
+
65
+
60
66
  # @return [String] The name of this user.
61
67
  # @description Retrieves and returns the name of the user depending on the available information.
62
68
  # The name can be a full name (first and last names), just the first name, or, in case the information
@@ -63,7 +63,7 @@ module Lesli
63
63
 
64
64
 
65
65
  # devise implementation
66
- if defined? LesliSecurity
66
+ #if !defined?(LesliSecurity)
67
67
  devise(
68
68
  :database_authenticatable,
69
69
  :registerable,
@@ -73,7 +73,7 @@ module Lesli
73
73
  :confirmable,
74
74
  :trackable);
75
75
  #:omniauthable, omniauth_providers: [:google_oauth2, :facebook]
76
- end
76
+ #end
77
77
 
78
78
 
79
79
  # users belongs to an account only... and must have a role
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
19
19
 
20
20
  Lesli · Ruby on Rails SaaS Development Framework.
21
21
 
22
- Made with ♥ by https://www.lesli.tech
22
+ Made with ♥ by LesliTech
23
23
  Building a better future, one line of code at a time.
24
24
 
25
25
  @contact hello@lesli.tech
@@ -120,6 +120,9 @@ module Lesli
120
120
  # Get the list of controllers and actions from engines
121
121
  Lesli::System.engines.each do |engine, engine_info|
122
122
 
123
+ # Do not process main Rails app
124
+ next if engine == "Root"
125
+
123
126
  # load and retrieve the list of controllers and actions from an engine
124
127
  routes = "#{engine}::Engine".constantize.routes.routes.each do |route|
125
128
  route = route.defaults
@@ -60,7 +60,7 @@ module Lesli
60
60
  :id,
61
61
  :email,
62
62
  "CONCAT_WS(' ', first_name, last_name) as name",
63
- "COALESCE(alias, email) as alias"
63
+ "COALESCE(NULLIF(alias,''), email) as alias"
64
64
  ).as_json
65
65
  end
66
66
  end
@@ -44,8 +44,10 @@ Building a better future, one line of code at a time.
44
44
  <%= render partial: "lesli/partials/application-lesli-header" %>
45
45
  <%= render partial: "lesli/partials/application-lesli-navigation" %>
46
46
  <%#= render partial: "lesli/partials/application-lesli-notices" %>
47
+ <section class="lesli-application-content">
47
48
  <%= render partial: "lesli/partials/application-lesli-sidebar" %>
48
49
  <%= render partial: "lesli/partials/application-lesli-content" %>
50
+ </section>
49
51
  <%= render partial: "lesli/partials/application-lesli-engines" %>
50
52
  <%= render partial: "lesli/partials/application-lesli-panels" %>
51
53
  <%#= render partial: "lesli/partials/application-lesli-footer" %>
@@ -18,9 +18,9 @@ GNU General Public License for more details.
18
18
  You should have received a copy of the GNU General Public License
19
19
  along with this program. If not, see http://www.gnu.org/licenses/.
20
20
 
21
- Lesli · Ruby on Rails SaaS development platform.
21
+ Lesli · Ruby on Rails SaaS Development Framework.
22
22
 
23
- Made with ♥ by https://www.lesli.tech
23
+ Made with ♥ by LesliTech
24
24
  Building a better future, one line of code at a time.
25
25
 
26
26
  @contact hello@lesli.tech
@@ -52,13 +52,13 @@ Building a better future, one line of code at a time.
52
52
  @lesli[:instance] = Rails.application.credentials.dig(:instance) || lesli_instance_code
53
53
  @lesli[:engine] = lesli_engine.dig(:code) # use into url plugin to for dynamic search
54
54
  @lesli[:url] = request.base_url.to_s # use as base for url plugin
55
- @lesli[:engine_paths] = {}
56
55
 
57
56
  %>
58
57
 
59
58
 
60
59
  <%
61
60
  # Dynamic build the engines mouted path
61
+ @lesli[:engine_paths] = {}
62
62
  Lesli::System.engines.each do |engine, engine_info|
63
63
  @lesli[:engine_paths][engine] = engine_info[:path]
64
64
  end
@@ -32,41 +32,66 @@ Building a better future, one line of code at a time.
32
32
  =end
33
33
  %>
34
34
 
35
+ <%# check if custom navigation partial exists, getting the path from application helper %>
36
+ <% custom_navigation_path = "partials/application-lesli-header" %>
37
+
38
+ <%# validate the path to be sure the partial exists when trying to render it %>
39
+ <% custom_navigation_exists = lookup_context.exists?(custom_navigation_path, nil, true) %>
40
+
41
+ <%# render navigation partial %>
42
+ <% if custom_navigation_exists %>
43
+
44
+ <%= render partial: custom_navigation_path %>
45
+
46
+ <% else %>
47
+
35
48
  <lesli-application-header
36
- :show-engines="true"
37
- <%= "show-bell" if defined?(LesliBell) %>
49
+ engine-path="<%= "/dashboard" if defined?(LesliDashboard) %>"
38
50
  <%= "show-focus" if defined?(LesliFocus) %>
39
- <%= "show-support-tickets" if defined?(LesliSupport) %>
40
- engine-path="<%= defined?(LesliDashboard) ? lesli_dashboard.root_path : lesli_engine(:path)%>">
51
+ show-profile
52
+ show-engines
53
+ show-bell
54
+ show-support>
41
55
 
42
56
  <template v-slot:brand>
43
57
  <%= customization_instance_logo_tag(logo: "app-icon", options: { alt: "Lesli app logo", class: "is-hidden-desktop" }) %>
44
58
  <%= customization_instance_logo_tag(logo: "app-logo", options: { alt: "Lesli app logo", class: "is-hidden-touch" }) %>
45
59
  </template>
46
60
 
47
- <template>
61
+ <template v-slot:end>
62
+
48
63
  <%# language selector %>
49
- <% if I18n.available_locales.length > 1 %>
50
- <div class="dropdown is-hoverable header-language-selector">
51
- <div class="dropdown-trigger">
52
- <span class="icon has-text-link">
53
- <%= lesli_svg("locale-#{locale}") %>
54
- </span>
55
- </div>
56
- <div class="dropdown-menu" id="dropdown-menu-locale" role="menu">
57
- <div class="dropdown-content">
58
- <% I18n.available_locales.each do |locale| %>
59
- <% next if locale == I18n.locale %>
60
- <%= link_to language_url(locale), { :class => "dropdown-item" } do %>
61
- <span class="icon has-text-grey-light">
62
- <%= lesli_svg("locale-#{locale}") %>
63
- </span>
64
- <span><%= language_name(locale) %></span>
64
+ <% if Lesli.config.layout.dig(:locale) && I18n.available_locales.length > 1 %>
65
+ <div class="navbar-item">
66
+ <div class="dropdown is-hoverable">
67
+ <div class="dropdown-trigger">
68
+ <button
69
+ class="button is-ghost"
70
+ aria-haspopup="true"
71
+ aria-controls="dropdown-menu"
72
+ @click="storeLayout.showProfile = true">
73
+ <span class="icon is-size-5">
74
+ <%= lesli_svg("locale-#{locale}") %>
75
+ </span>
76
+ </button>
77
+ </div>
78
+ <div class="dropdown-menu" id="dropdown-menu-locale" role="menu">
79
+ <div class="dropdown-content">
80
+ <% I18n.available_locales.each do |locale| %>
81
+ <% next if locale == I18n.locale %>
82
+ <%= link_to language_url(locale), { :class => "dropdown-item" } do %>
83
+ <span class="icon has-text-grey-light">
84
+ <%= lesli_svg("locale-#{locale}") %>
85
+ </span>
86
+ <span><%= language_name(locale) %></span>
87
+ <% end %>
65
88
  <% end %>
66
- <% end %>
89
+ </div>
67
90
  </div>
68
91
  </div>
69
92
  </div>
70
93
  <% end %>
71
94
  </template>
72
95
  </lesli-application-header>
96
+
97
+ <% end %>
@@ -18,9 +18,9 @@ GNU General Public License for more details.
18
18
  You should have received a copy of the GNU General Public License
19
19
  along with this program. If not, see http://www.gnu.org/licenses/.
20
20
 
21
- Lesli · Ruby on Rails SaaS development platform.
21
+ Lesli · Ruby on Rails SaaS Development Framework.
22
22
 
23
- Made with ♥ by https://www.lesli.tech
23
+ Made with ♥ by LesliTech
24
24
  Building a better future, one line of code at a time.
25
25
 
26
26
  @contact hello@lesli.tech
@@ -33,7 +33,14 @@ Building a better future, one line of code at a time.
33
33
  %>
34
34
 
35
35
  <%# check if custom navigation partial exists, getting the path from application helper %>
36
- <% custom_sidebar_path = "#{lesli_engine.dig(:code)}/partials/engine-navigation" %>
36
+ <%
37
+ engine = lesli_engine.dig(:code)
38
+ custom_sidebar_path = if engine == "root"
39
+ "partials/engine-navigation"
40
+ else
41
+ "#{engine}/partials/engine-navigation"
42
+ end
43
+ %>
37
44
 
38
45
 
39
46
  <%# validate the path to be sure the partial exists when trying to render it %>
@@ -18,9 +18,9 @@ GNU General Public License for more details.
18
18
  You should have received a copy of the GNU General Public License
19
19
  along with this program. If not, see http://www.gnu.org/licenses/.
20
20
 
21
- Lesli · Ruby on Rails SaaS development platform.
21
+ Lesli · Ruby on Rails SaaS Development Framework.
22
22
 
23
- Made with ♥ by https://www.lesli.tech
23
+ Made with ♥ by LesliTech
24
24
  Building a better future, one line of code at a time.
25
25
 
26
26
  @contact hello@lesli.tech
@@ -44,7 +44,7 @@ Building a better future, one line of code at a time.
44
44
  :class => "#{lesli_instance_code}-logo", # dynamic class according to the instance
45
45
  :alt => "Main logo")
46
46
  %>
47
- <h1 class="title has-text-primary">
47
+ <h1 class="title is-size-4 has-text-primary">
48
48
  <%#= I18n.t("core.users/sessions.view_text_welcome") %>
49
49
  <%= title %>
50
50
  </h1>
@@ -45,7 +45,7 @@ Lesli.configure do |config|
45
45
  config.company = {
46
46
  name: "Lesli",
47
47
  email: "hello@lesli.tech",
48
- tagline: "Ruby on Rails SaaS Development Platform."
48
+ tagline: "The Open SaaS Development Platform."
49
49
  }
50
50
 
51
51
 
@@ -105,6 +105,12 @@ Lesli.configure do |config|
105
105
  color_sidebar_hover: "#dee7ec"
106
106
  }
107
107
 
108
+
109
+ #
110
+ config.layout = {
111
+ locale: false
112
+ }
113
+
108
114
  config.path_after_login = "/"
109
115
  config.path_after_login = "/dashboard" if defined?(LesliDashboard)
110
116
  end
@@ -16,6 +16,11 @@
16
16
  button_settings: Settings
17
17
  button_show: Show
18
18
  toolbar_search: Search...
19
+ message_operation_success: Operation completed successfully
20
+ message_operation_error: Operation failed. Please try again.
21
+ application:
22
+ navigation_logout: Logout
23
+ navigation_my_profile: My profile
19
24
  users/sessions:
20
25
  view_username: Username
21
26
  dashboards:
@@ -23,6 +28,3 @@
23
28
  column_name: Name
24
29
  column_default: Default
25
30
  view_add_component: Add component
26
- application:
27
- navigation_logout: Logout
28
- navigation_my_profile: My profile
@@ -16,6 +16,11 @@
16
16
  button_settings: Configuración
17
17
  button_show: Ver
18
18
  toolbar_search: Buscar...
19
+ message_operation_success: Operacion realizada satisfactoriamente
20
+ message_operation_error: Operación fallida. Por favor, inténtelo de nuevo.
21
+ application:
22
+ navigation_logout: Cerrar sesión
23
+ navigation_my_profile: Mi perfil
19
24
  users/sessions:
20
25
  view_username: Usuario
21
26
  dashboards:
@@ -23,6 +28,3 @@
23
28
  column_name: Nombre
24
29
  column_default: Default
25
30
  view_add_component: Agregar componente
26
- application:
27
- navigation_logout: Cerrar sesión
28
- navigation_my_profile: Mi perfil
@@ -16,6 +16,11 @@
16
16
  button_settings: ":lesli.shared.button_settings:"
17
17
  button_show: ":lesli.shared.button_show:"
18
18
  toolbar_search: ":lesli.shared.toolbar_search:"
19
+ message_operation_success: ":lesli.shared.message_operation_success:"
20
+ message_operation_error: ":lesli.shared.message_operation_error:"
21
+ application:
22
+ navigation_logout: ":lesli.application.navigation_logout:"
23
+ navigation_my_profile: ":lesli.application.navigation_my_profile:"
19
24
  users/sessions:
20
25
  view_username: ":lesli.users/sessions.view_username:"
21
26
  dashboards:
@@ -23,6 +28,3 @@
23
28
  column_name: ":lesli.dashboards.column_name:"
24
29
  column_default: ":lesli.dashboards.column_default:"
25
30
  view_add_component: ":lesli.dashboards.view_add_component:"
26
- application:
27
- navigation_logout: ":lesli.application.navigation_logout:"
28
- navigation_my_profile: ":lesli.application.navigation_my_profile:"
@@ -16,6 +16,11 @@
16
16
  button_settings: ":lesli.shared.button_settings:"
17
17
  button_show: ":lesli.shared.button_show:"
18
18
  toolbar_search: ":lesli.shared.toolbar_search:"
19
+ message_operation_success: ":lesli.shared.message_operation_success:"
20
+ message_operation_error: ":lesli.shared.message_operation_error:"
21
+ application:
22
+ navigation_logout: ":lesli.application.navigation_logout:"
23
+ navigation_my_profile: ":lesli.application.navigation_my_profile:"
19
24
  users/sessions:
20
25
  view_username: ":lesli.users/sessions.view_username:"
21
26
  dashboards:
@@ -23,6 +28,3 @@
23
28
  column_name: ":lesli.dashboards.column_name:"
24
29
  column_default: ":lesli.dashboards.column_default:"
25
30
  view_add_component: ":lesli.dashboards.view_add_component:"
26
- application:
27
- navigation_logout: ":lesli.application.navigation_logout:"
28
- navigation_my_profile: ":lesli.application.navigation_my_profile:"
@@ -16,6 +16,11 @@
16
16
  button_settings: ":lesli.shared.button_settings:"
17
17
  button_show: ":lesli.shared.button_show:"
18
18
  toolbar_search: ":lesli.shared.toolbar_search:"
19
+ message_operation_success: ":lesli.shared.message_operation_success:"
20
+ message_operation_error: ":lesli.shared.message_operation_error:"
21
+ application:
22
+ navigation_logout: ":lesli.application.navigation_logout:"
23
+ navigation_my_profile: ":lesli.application.navigation_my_profile:"
19
24
  users/sessions:
20
25
  view_username: ":lesli.users/sessions.view_username:"
21
26
  dashboards:
@@ -23,6 +28,3 @@
23
28
  column_name: ":lesli.dashboards.column_name:"
24
29
  column_default: ":lesli.dashboards.column_default:"
25
30
  view_add_component: ":lesli.dashboards.view_add_component:"
26
- application:
27
- navigation_logout: ":lesli.application.navigation_logout:"
28
- navigation_my_profile: ":lesli.application.navigation_my_profile:"