lesli 5.0.21 → 5.0.22
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.
- checksums.yaml +4 -4
- data/Rakefile +5 -0
- data/app/assets/stylesheets/lesli/application.css +191 -1
- data/app/helpers/lesli/assets_helper.rb +23 -59
- data/app/models/concerns/lesli/user_activities.rb +103 -101
- data/app/services/lesli/role_service.rb +1 -1
- data/app/views/lesli/abouts/welcome.html.erb +11 -11
- data/app/views/lesli/layouts/application-devise.html.erb +2 -5
- data/app/views/lesli/layouts/application-lesli.html.erb +4 -5
- data/app/views/lesli/layouts/application-public.html.erb +2 -16
- data/app/views/lesli/partials/_application-analytics.html.erb +4 -6
- data/app/views/lesli/partials/{_application-lesli-scss.html.erb → _application-lesli-css.html.erb} +4 -10
- data/app/views/lesli/partials/{_application-data.html.erb → _application-lesli-data.html.erb} +4 -0
- data/app/views/lesli/partials/_application-lesli-javascript.html.erb +3 -5
- data/lib/lesli/engine.rb +3 -4
- data/lib/lesli/version.rb +2 -2
- data/lib/rspec/helpers/lesli_helper.rb +11 -0
- data/lib/tasks/lesli_tasks.rake +0 -2
- metadata +14 -36
- data/app/views/lesli/partials/_application-lesli-chatbox.html.erb +0 -35
- data/app/views/lesli/partials/_application-lesli-panels.html.erb +0 -58
- data/app/views/lesli/partials/_application-public-footer.html.erb +0 -51
- data/app/views/lesli/partials/_application-public-javascript.html.erb +0 -49
- data/app/views/lesli/partials/_application-public-scss.html.erb +0 -35
- data/config/initializers/devise_rails_8_patch.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6745cdd0cef2e17bdfbcfbeaa98b764cc17a0e4a08973a1f0f9602437aa36f05
|
4
|
+
data.tar.gz: ced2199cfd580ff4b713088317764bac7b3c9c4c6b27011f1567abcc11d96171
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7df7919455d0486fa70cd31dac4cb448bfe766b1b71707f243efca570a9197bd15f179e61d80bcc7f6f871426bf057e8575c0965d0d235109e69b4953e920a29
|
7
|
+
data.tar.gz: d94812f844319558b726d5f701091260ffaa3ccee39a12330f293fc8907c4fe745107a4eebb36b51ad740f536663066141202ee6be9684d32cc2a93f08cfadcd
|
data/Rakefile
CHANGED
@@ -1 +1,191 @@
|
|
1
|
-
|
1
|
+
@charset "UTF-8";
|
2
|
+
/*
|
3
|
+
Lesli
|
4
|
+
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
6
|
+
|
7
|
+
This program is free software: you can redistribute it and/or modify
|
8
|
+
it under the terms of the GNU General Public License as published by
|
9
|
+
the Free Software Foundation, either version 3 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
This program is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU General Public License
|
18
|
+
along with this program. If not, see http://www.gnu.org/licenses/.
|
19
|
+
|
20
|
+
Lesli · Ruby on Rails SaaS Development Framework.
|
21
|
+
|
22
|
+
Made with ♥ by LesliTech
|
23
|
+
Building a better future, one line of code at a time.
|
24
|
+
|
25
|
+
@contact hello@lesli.tech
|
26
|
+
@website https://www.lesli.tech
|
27
|
+
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
28
|
+
|
29
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
30
|
+
// ·
|
31
|
+
*/
|
32
|
+
/*
|
33
|
+
Lesli
|
34
|
+
|
35
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
36
|
+
|
37
|
+
This program is free software: you can redistribute it and/or modify
|
38
|
+
it under the terms of the GNU General Public License as published by
|
39
|
+
the Free Software Foundation, either version 3 of the License, or
|
40
|
+
(at your option) any later version.
|
41
|
+
|
42
|
+
This program is distributed in the hope that it will be useful,
|
43
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
44
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
45
|
+
GNU General Public License for more details.
|
46
|
+
|
47
|
+
You should have received a copy of the GNU General Public License
|
48
|
+
along with this program. If not, see http://www.gnu.org/licenses/.
|
49
|
+
|
50
|
+
Lesli · Ruby on Rails SaaS Development Framework.
|
51
|
+
|
52
|
+
Made with ♥ by LesliTech
|
53
|
+
Building a better future, one line of code at a time.
|
54
|
+
|
55
|
+
@contact hello@lesli.tech
|
56
|
+
@website https://www.lesli.tech
|
57
|
+
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
58
|
+
|
59
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
60
|
+
// ·
|
61
|
+
*/
|
62
|
+
/**
|
63
|
+
Lesli
|
64
|
+
|
65
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
66
|
+
|
67
|
+
This program is free software: you can redistribute it and/or modify
|
68
|
+
it under the terms of the GNU General Public License as published by
|
69
|
+
the Free Software Foundation, either version 3 of the License, or
|
70
|
+
(at your option) any later version.
|
71
|
+
|
72
|
+
This program is distributed in the hope that it will be useful,
|
73
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
74
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
75
|
+
GNU General Public License for more details.
|
76
|
+
|
77
|
+
You should have received a copy of the GNU General Public License
|
78
|
+
along with this program. If not, see http://www.gnu.org/licenses/.
|
79
|
+
|
80
|
+
Lesli - SCSS Utilities for websites, apps and web applications
|
81
|
+
|
82
|
+
Made with ♥ by LesliTech
|
83
|
+
Building a better future, one line of code at a time.
|
84
|
+
|
85
|
+
@contact hello@lesli.tech
|
86
|
+
@website https://www.lesli.tech
|
87
|
+
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
88
|
+
|
89
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
90
|
+
// ·
|
91
|
+
*/
|
92
|
+
/*
|
93
|
+
Lesli
|
94
|
+
|
95
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
96
|
+
|
97
|
+
This program is free software: you can redistribute it and/or modify
|
98
|
+
it under the terms of the GNU General Public License as published by
|
99
|
+
the Free Software Foundation, either version 3 of the License, or
|
100
|
+
(at your option) any later version.
|
101
|
+
|
102
|
+
This program is distributed in the hope that it will be useful,
|
103
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
104
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
105
|
+
GNU General Public License for more details.
|
106
|
+
|
107
|
+
You should have received a copy of the GNU General Public License
|
108
|
+
along with this program. If not, see http://www.gnu.org/licenses/.
|
109
|
+
|
110
|
+
Lesli - SCSS Utilities for websites, apps and web applications
|
111
|
+
|
112
|
+
Made with ♥ by LesliTech
|
113
|
+
Building a better future, one line of code at a time.
|
114
|
+
|
115
|
+
@contact hello@lesli.tech
|
116
|
+
@website https://www.lesli.tech
|
117
|
+
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
118
|
+
|
119
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
120
|
+
// ·
|
121
|
+
*/
|
122
|
+
/**
|
123
|
+
Lesli
|
124
|
+
|
125
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
126
|
+
|
127
|
+
This program is free software: you can redistribute it and/or modify
|
128
|
+
it under the terms of the GNU General Public License as published by
|
129
|
+
the Free Software Foundation, either version 3 of the License, or
|
130
|
+
(at your option) any later version.
|
131
|
+
|
132
|
+
This program is distributed in the hope that it will be useful,
|
133
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
134
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
135
|
+
GNU General Public License for more details.
|
136
|
+
|
137
|
+
You should have received a copy of the GNU General Public License
|
138
|
+
along with this program. If not, see http://www.gnu.org/licenses/.
|
139
|
+
|
140
|
+
Lesli - SCSS Utilities for websites, apps and web applications
|
141
|
+
|
142
|
+
Made with ♥ by LesliTech
|
143
|
+
Building a better future, one line of code at a time.
|
144
|
+
|
145
|
+
@contact hello@lesli.tech
|
146
|
+
@website https://www.lesli.tech
|
147
|
+
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
148
|
+
|
149
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
150
|
+
// ·
|
151
|
+
*/
|
152
|
+
body.lesli.apps.show .lesli-element-header {
|
153
|
+
margin-bottom: 5rem !important;
|
154
|
+
}
|
155
|
+
body.lesli.apps.show .engines {
|
156
|
+
gap: 24px;
|
157
|
+
margin-inline-end: auto;
|
158
|
+
margin-inline-start: auto;
|
159
|
+
}
|
160
|
+
body.lesli.apps.show .engines a {
|
161
|
+
flex-basis: 318px;
|
162
|
+
text-align: center;
|
163
|
+
padding: 2rem 0.4rem 2.8rem;
|
164
|
+
border: white 1px solid;
|
165
|
+
border-radius: 6px;
|
166
|
+
background-color: white;
|
167
|
+
transition: all ease-in-out 0.2s;
|
168
|
+
box-shadow: rgba(9, 30, 66, 0.25) 0px 4px 8px -2px, rgba(9, 30, 66, 0.08) 0px 0px 0px 1px;
|
169
|
+
}
|
170
|
+
body.lesli.apps.show .engines a:hover {
|
171
|
+
border-color: var(--lesli-color-primary);
|
172
|
+
transform: translateY(-2px);
|
173
|
+
}
|
174
|
+
body.lesli.apps.show .engines a.is-active {
|
175
|
+
background-color: #F0F4FF;
|
176
|
+
border-color: var(--lesli-color-primary);
|
177
|
+
}
|
178
|
+
body.lesli.apps.show .engines a svg {
|
179
|
+
margin-right: 0.4rem;
|
180
|
+
fill: var(--lesli-color-primary);
|
181
|
+
}
|
182
|
+
body.lesli.apps.show .engines a p {
|
183
|
+
font-size: 14;
|
184
|
+
}
|
185
|
+
body.lesli.apps.show .engines a span {
|
186
|
+
font-weight: 600;
|
187
|
+
font-size: 20px;
|
188
|
+
}
|
189
|
+
body.lesli.apps.show .engines a span, body.lesli.apps.show .engines a p {
|
190
|
+
color: var(--lesli-color-primary);
|
191
|
+
}
|
@@ -34,77 +34,41 @@ module Lesli
|
|
34
34
|
module AssetsHelper
|
35
35
|
# Return a string path to load the template stylesheet
|
36
36
|
# by default we always return the latest version of the template
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
|
37
|
+
#
|
38
|
+
# stylesheet from main App
|
39
|
+
# lesli_asset_path()
|
40
|
+
# /assets/application.css
|
41
|
+
#
|
42
|
+
# Specific stylesheet from Engine
|
43
|
+
# lesli_asset_path(:lesli, 'application')
|
44
|
+
# /assets/lesli/application.css
|
45
|
+
#
|
46
|
+
# Specific stylesheet from gem
|
47
|
+
# lesli_asset_path(:lesli_assets, 'templates/application')
|
48
|
+
# /assets/lesli_assets/templates/application.css
|
49
|
+
def lesli_asset_path(engine = nil, stylesheet = 'application')
|
42
50
|
|
43
51
|
# Stylesheets from specific engine
|
44
|
-
return "#{engine}
|
52
|
+
return "#{engine}/#{stylesheet}" if engine.present?
|
45
53
|
|
46
54
|
# Get current engine information
|
47
|
-
|
55
|
+
engine_code = lesli_engine(:code)
|
48
56
|
|
49
57
|
# Rails main host app stylesheets
|
50
|
-
return
|
58
|
+
return 'application' if engine_code == 'root'
|
51
59
|
|
52
60
|
# Rails engines stylesheets
|
53
|
-
"#{
|
54
|
-
end
|
55
|
-
|
56
|
-
# Return a string path to load the main engine stylesheet
|
57
|
-
def application_stylesheet_engine_path
|
58
|
-
lesli_engine = lesli_engine(:code)
|
59
|
-
return "administration/application" if is_lesli_administration?
|
60
|
-
return "onboardings/application" if is_lesli_onboarding?
|
61
|
-
|
62
|
-
"#{lesli_engine}/application"
|
63
|
-
end
|
64
|
-
|
65
|
-
# Return a string path to load the main javascript app of the engine
|
66
|
-
def lesli_application_javascript_path
|
67
|
-
# get the namespace to load specific javascript file
|
68
|
-
# for engine or specific javascript file for core controller
|
69
|
-
# path_segments = controller_path.split("/")
|
70
|
-
# lesli_engine = path_segments.shift
|
71
|
-
|
72
|
-
# return "onboardings/application" if is_lesli_onboarding?
|
73
|
-
|
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"
|
84
|
-
end
|
85
|
-
|
86
|
-
def javascript_googlemaps_sdk
|
87
|
-
"<script type=\"application/javascript\" src=\"https://maps.googleapis.com/maps/api/js?key=#{Rails.application.credentials.dig(
|
88
|
-
:providers, :google, :maps_sdk_token
|
89
|
-
)}\"></script>".html_safe
|
90
|
-
end
|
91
|
-
|
92
|
-
def javascript_apple_mapkit_js
|
93
|
-
token = Rails.application.credentials.dig(:providers, :apple, :mapkit_token)
|
94
|
-
|
95
|
-
"<script type=\"application/javascript\" src=\"https://cdn.apple-mapkit.com/mk/5.45.0/mapkit.js\"></script>
|
96
|
-
<script type=\"application/javascript\">
|
97
|
-
const ampkt = \"#{token}\"
|
98
|
-
</script>".html_safe
|
61
|
+
"#{engine_code}/#{stylesheet}"
|
99
62
|
end
|
100
63
|
|
101
64
|
def favicon
|
102
65
|
icon_path = customization_instance_logo_url(logo: "favicon")
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
66
|
+
|
67
|
+
safe_join([
|
68
|
+
tag.link(href: icon_path, rel: "alternate icon"),
|
69
|
+
tag.link(href: icon_path, rel: "icon", type: "image/svg+xml"),
|
70
|
+
tag.link(href: icon_path, rel: "mask-icon", color: "#ff8a01")
|
71
|
+
])
|
108
72
|
end
|
109
73
|
end
|
110
74
|
end
|
@@ -33,73 +33,19 @@ Building a better future, one line of code at a time.
|
|
33
33
|
|
34
34
|
# User Activities methods
|
35
35
|
# Methods related to cloudobject/activities and user_logs
|
36
|
-
module
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
# @return [void]
|
41
|
-
# @description Register a new log for the current user
|
42
|
-
# @param description String Details about the process
|
43
|
-
# @param session String Current or active session id
|
44
|
-
def log description, session=nil
|
45
|
-
self.logs.create(session, description)
|
46
|
-
end
|
47
|
-
|
48
|
-
def log_activity_update(current_user, user, old_attributes, new_attributes)
|
49
|
-
old_attributes.except!("id", "users_id", "created_at", "updated_at", "deleted_at")
|
50
|
-
old_attributes.each do |key, value|
|
51
|
-
if value != new_attributes[key]
|
52
|
-
value_from = value
|
53
|
-
value_to = new_attributes[key]
|
54
|
-
value_from = Courier::Core::Date.to_string_datetime(value_from) if value_from.is_a?(Time) || value_from.is_a?(Date)
|
55
|
-
value_to = Courier::Core::Date.to_string_datetime(value_to) if value_to.is_a?(Time) || value_to.is_a?(Date)
|
56
|
-
|
57
|
-
user.activities.create!(
|
58
|
-
assigned: current_user,
|
59
|
-
category: "action_update",
|
60
|
-
field_name: key,
|
61
|
-
value_from: value_from,
|
62
|
-
value_to: value_to
|
63
|
-
)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
|
69
|
-
# Define class methods from given block
|
70
|
-
# This allows to inject class methods to the User model, so we can use:
|
71
|
-
# User.log_activity_create
|
72
|
-
class_methods do
|
36
|
+
module Lesli
|
37
|
+
module UserActivities
|
38
|
+
extend ActiveSupport::Concern
|
73
39
|
|
74
40
|
|
75
41
|
# @return [void]
|
76
|
-
# @
|
77
|
-
# @param
|
78
|
-
# @
|
79
|
-
|
80
|
-
|
81
|
-
# user = User.create(params)
|
82
|
-
# User.log_activity_create(User.find(1), user)
|
83
|
-
def log_activity_create(current_user, user)
|
84
|
-
user.activities.create(
|
85
|
-
assigned: current_user,
|
86
|
-
category: "action_create"
|
87
|
-
)
|
42
|
+
# @description Register a new log for the current user
|
43
|
+
# @param description String Details about the process
|
44
|
+
# @param session String Current or active session id
|
45
|
+
def log description, session=nil
|
46
|
+
self.logs.create(session, description)
|
88
47
|
end
|
89
48
|
|
90
|
-
|
91
|
-
# @return [void]
|
92
|
-
# @param current_user [::User] The user that created the user
|
93
|
-
# @param user [User] The User that was created
|
94
|
-
# @param old_attributes[Hash] The data of the record before update
|
95
|
-
# @param new_attributes[Hash] The data of the record after update
|
96
|
-
# @description Creates an activity for this user if someone changed any of this values
|
97
|
-
# Example
|
98
|
-
# user = User.find(1)
|
99
|
-
# old_attributes = user.attributes.merge({detail_attributes: user.detail.attributes})
|
100
|
-
# user.update(main_employee: User.find(33))
|
101
|
-
# new_attributes = user.attributes.merge({detail_attributes: user.detail.attributes})
|
102
|
-
# User.log_activity_update(User.find(1), user, old_attributes, new_attributes)
|
103
49
|
def log_activity_update(current_user, user, old_attributes, new_attributes)
|
104
50
|
old_attributes.except!("id", "users_id", "created_at", "updated_at", "deleted_at")
|
105
51
|
old_attributes.each do |key, value|
|
@@ -109,8 +55,8 @@ module UserActivities
|
|
109
55
|
value_from = Courier::Core::Date.to_string_datetime(value_from) if value_from.is_a?(Time) || value_from.is_a?(Date)
|
110
56
|
value_to = Courier::Core::Date.to_string_datetime(value_to) if value_to.is_a?(Time) || value_to.is_a?(Date)
|
111
57
|
|
112
|
-
user.activities.create(
|
113
|
-
|
58
|
+
user.activities.create!(
|
59
|
+
assigned: current_user,
|
114
60
|
category: "action_update",
|
115
61
|
field_name: key,
|
116
62
|
value_from: value_from,
|
@@ -118,46 +64,102 @@ module UserActivities
|
|
118
64
|
)
|
119
65
|
end
|
120
66
|
end
|
121
|
-
end
|
67
|
+
end
|
122
68
|
|
123
69
|
|
124
|
-
#
|
125
|
-
#
|
126
|
-
#
|
127
|
-
|
128
|
-
# @description Creates an activity for this user if someone adds a new role
|
129
|
-
# Example
|
130
|
-
# user = User.find(1)
|
131
|
-
# role = User.find(1)
|
132
|
-
# User.log_activity_create_user_role(current_user, user, role)
|
133
|
-
def log_activity_create_user_role(current_user, user, role)
|
134
|
-
role_name = role.name
|
135
|
-
|
136
|
-
user.activities.create(
|
137
|
-
assigned: current_user,
|
138
|
-
category: "action_create_user_role",
|
139
|
-
value_to: role_name
|
140
|
-
)
|
141
|
-
end
|
70
|
+
# Define class methods from given block
|
71
|
+
# This allows to inject class methods to the User model, so we can use:
|
72
|
+
# User.log_activity_create
|
73
|
+
class_methods do
|
142
74
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
75
|
+
|
76
|
+
# @return [void]
|
77
|
+
# @param current_user [::User] The user that created the user
|
78
|
+
# @param [User] The user that was created
|
79
|
+
# @description Creates an activity for this user indicating who created it.
|
80
|
+
# Example
|
81
|
+
# params = {...}
|
82
|
+
# user = User.create(params)
|
83
|
+
# User.log_activity_create(User.find(1), user)
|
84
|
+
def log_activity_create(current_user, user)
|
85
|
+
user.activities.create(
|
86
|
+
assigned: current_user,
|
87
|
+
category: "action_create"
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
# @return [void]
|
93
|
+
# @param current_user [::User] The user that created the user
|
94
|
+
# @param user [User] The User that was created
|
95
|
+
# @param old_attributes[Hash] The data of the record before update
|
96
|
+
# @param new_attributes[Hash] The data of the record after update
|
97
|
+
# @description Creates an activity for this user if someone changed any of this values
|
98
|
+
# Example
|
99
|
+
# user = User.find(1)
|
100
|
+
# old_attributes = user.attributes.merge({detail_attributes: user.detail.attributes})
|
101
|
+
# user.update(main_employee: User.find(33))
|
102
|
+
# new_attributes = user.attributes.merge({detail_attributes: user.detail.attributes})
|
103
|
+
# User.log_activity_update(User.find(1), user, old_attributes, new_attributes)
|
104
|
+
def log_activity_update(current_user, user, old_attributes, new_attributes)
|
105
|
+
old_attributes.except!("id", "users_id", "created_at", "updated_at", "deleted_at")
|
106
|
+
old_attributes.each do |key, value|
|
107
|
+
if value != new_attributes[key]
|
108
|
+
value_from = value
|
109
|
+
value_to = new_attributes[key]
|
110
|
+
value_from = Courier::Core::Date.to_string_datetime(value_from) if value_from.is_a?(Time) || value_from.is_a?(Date)
|
111
|
+
value_to = Courier::Core::Date.to_string_datetime(value_to) if value_to.is_a?(Time) || value_to.is_a?(Date)
|
112
|
+
|
113
|
+
user.activities.create(
|
114
|
+
owner: current_user,
|
115
|
+
category: "action_update",
|
116
|
+
field_name: key,
|
117
|
+
value_from: value_from,
|
118
|
+
value_to: value_to
|
119
|
+
)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
# @return [void]
|
126
|
+
# @param current_user [::User] The user that created the user
|
127
|
+
# @param user [User] The User that was created
|
128
|
+
# @param user [Role] The Role assigned to the user
|
129
|
+
# @description Creates an activity for this user if someone adds a new role
|
130
|
+
# Example
|
131
|
+
# user = User.find(1)
|
132
|
+
# role = User.find(1)
|
133
|
+
# User.log_activity_create_user_role(current_user, user, role)
|
134
|
+
def log_activity_create_user_role(current_user, user, role)
|
135
|
+
role_name = role.name
|
136
|
+
|
137
|
+
user.activities.create(
|
138
|
+
assigned: current_user,
|
139
|
+
category: "action_create_user_role",
|
140
|
+
value_to: role_name
|
141
|
+
)
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
# @return [void]
|
146
|
+
# @param current_user [::User] The user that created the user
|
147
|
+
# @param user [User] The User that was created
|
148
|
+
# @param user [Role] The Role assigned to the user
|
149
|
+
# @description Creates an activity for this user if someone removes a role
|
150
|
+
# Example
|
151
|
+
# user = User.find(1)
|
152
|
+
# role = User.find(1)
|
153
|
+
# User.log_activity_destroy_user_role(current_user, user, role)
|
154
|
+
def log_activity_destroy_user_role(current_user, user, role)
|
155
|
+
role_name = role.name
|
156
|
+
|
157
|
+
user.activities.create(
|
158
|
+
assigned: current_user,
|
159
|
+
category: "action_destroy_user_role",
|
160
|
+
value_to: role_name
|
161
|
+
)
|
162
|
+
end
|
161
163
|
end
|
162
164
|
end
|
163
165
|
end
|
@@ -42,7 +42,7 @@ module Lesli
|
|
42
42
|
# according to object level permission
|
43
43
|
def list(params)
|
44
44
|
current_user.account.roles
|
45
|
-
.where("permission_level <= ?", current_user.
|
45
|
+
.where("permission_level <= ?", current_user.max_level_permission)
|
46
46
|
.order(permission_level: :desc, name: :asc)
|
47
47
|
.select(:id, :name, :permission_level)
|
48
48
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<style>
|
2
|
+
html, body, * {
|
3
|
+
box-sizing: border-box;
|
4
|
+
}
|
5
|
+
|
2
6
|
html, body {
|
3
7
|
margin: 0;
|
4
8
|
padding: 0;
|
5
9
|
}
|
6
10
|
|
7
|
-
html, body, * {
|
8
|
-
box-sizing: border-box;
|
9
|
-
}
|
10
|
-
|
11
11
|
.page-welcome {
|
12
12
|
display: flex;
|
13
13
|
flex-direction: column;
|
@@ -59,11 +59,11 @@ html, body, * {
|
|
59
59
|
align-items: center;
|
60
60
|
}
|
61
61
|
|
62
|
-
.buttons {
|
62
|
+
.page-welcome .buttons {
|
63
63
|
margin-bottom: 2rem;
|
64
64
|
}
|
65
65
|
|
66
|
-
.buttons a {
|
66
|
+
.page-welcome .buttons a {
|
67
67
|
border: none;
|
68
68
|
display: inline-block;
|
69
69
|
text-decoration: none;
|
@@ -79,25 +79,25 @@ html, body, * {
|
|
79
79
|
line-height: 28px;
|
80
80
|
}
|
81
81
|
|
82
|
-
.buttons a.doc {
|
82
|
+
.page-welcome .buttons a.doc {
|
83
83
|
background: #184fee;
|
84
84
|
}
|
85
85
|
|
86
|
-
.buttons a.start {
|
86
|
+
.page-welcome .buttons a.start {
|
87
87
|
background: #444444;
|
88
88
|
}
|
89
89
|
|
90
90
|
@media only screen and (max-width: 600px) {
|
91
|
-
.page-welcome svg {
|
91
|
+
.page-welcome .page-welcome svg {
|
92
92
|
width: 250px;
|
93
93
|
}
|
94
94
|
|
95
|
-
.page-welcome h1 {
|
95
|
+
.page-welcome .page-welcome h1 {
|
96
96
|
padding: 0 1rem;
|
97
97
|
font-size: 2.7rem;
|
98
98
|
}
|
99
99
|
|
100
|
-
.buttons a {
|
100
|
+
.page-welcome .buttons a {
|
101
101
|
padding: 14px 20px;
|
102
102
|
}
|
103
103
|
}
|
@@ -30,15 +30,13 @@ Building a better future, one line of code at a time.
|
|
30
30
|
// ·
|
31
31
|
%>
|
32
32
|
|
33
|
-
<%
|
33
|
+
<% public_app_controller = controller_path.split('/')[1] || controller_path %>
|
34
34
|
|
35
35
|
<!DOCTYPE html>
|
36
36
|
<html>
|
37
37
|
<head>
|
38
|
-
<script>const Lesli = <%= @lesli.to_json.html_safe %></script>
|
39
38
|
<%= render(partial: "lesli/partials/application-head") %>
|
40
|
-
|
41
|
-
<%= stylesheet_link_tag("lesli_shield/#{devise_controller}", media: "all") %>
|
39
|
+
<%= stylesheet_link_tag(lesli_asset_path(:lesli_shield, public_app_controller), media: "all") %>
|
42
40
|
<%# Disable back button in browser after Logout using JavaScript %>
|
43
41
|
<% if flash[:logout] == true %>
|
44
42
|
<script>
|
@@ -51,7 +49,6 @@ Building a better future, one line of code at a time.
|
|
51
49
|
</head>
|
52
50
|
<body class="<%= application_body_class() %>">
|
53
51
|
<%= yield %>
|
54
|
-
<%= javascript_include_tag("lesli_shield/#{devise_controller}") %>
|
55
52
|
<%= render(partial: "lesli/partials/application-analytics") %>
|
56
53
|
</body>
|
57
54
|
</html>
|
@@ -34,11 +34,10 @@ Building a better future, one line of code at a time.
|
|
34
34
|
<html>
|
35
35
|
<head>
|
36
36
|
<%= render(partial: "lesli/partials/application-head") %>
|
37
|
-
<%= render(partial: "lesli/partials/application-
|
38
|
-
<%= render(partial: "lesli/partials/application-lesli-
|
39
|
-
<%= render(partial: "lesli/partials/application-lesli-javascript") %>
|
37
|
+
<%= render(partial: "lesli/partials/application-lesli-css") %>
|
38
|
+
<%= render(partial: "lesli/partials/application-lesli-data") %>
|
40
39
|
</head>
|
41
|
-
<body class="<%= application_body_class %>">
|
40
|
+
<body class="<%= application_body_class() %>">
|
42
41
|
<%= render(partial: "lesli/partials/application-lesli-header") %>
|
43
42
|
<%= render(partial: "lesli/partials/application-lesli-notifications") %>
|
44
43
|
<main class="lesli-application-app">
|
@@ -46,7 +45,7 @@ Building a better future, one line of code at a time.
|
|
46
45
|
<%= render(partial: "lesli/partials/application-lesli-content") %>
|
47
46
|
</main>
|
48
47
|
<%= render(partial: "lesli_assets/partials/application-lesli-icons-engines") %>
|
48
|
+
<%= render(partial: "lesli/partials/application-lesli-javascript") %>
|
49
49
|
<%= render(partial: "lesli/partials/application-analytics") %>
|
50
|
-
<%= yield(:application_lesli_body_bottom) %>
|
51
50
|
</body>
|
52
51
|
</html>
|
@@ -35,24 +35,10 @@ Building a better future, one line of code at a time.
|
|
35
35
|
<!DOCTYPE html>
|
36
36
|
<html>
|
37
37
|
<head>
|
38
|
-
<%= render
|
39
|
-
<%#= render partial: "lesli/partials/application-data" %>
|
40
|
-
<%= render partial: "lesli/partials/application-public-scss" %>
|
41
|
-
<%= yield :application_custom_assets %>
|
42
|
-
<%# Disable back button in browser after Logout using JavaScript %>
|
43
|
-
<% if flash[:logout] == true %>
|
44
|
-
<script>
|
45
|
-
history.pushState(null, null, null);
|
46
|
-
window.addEventListener('popstate', function () {
|
47
|
-
history.pushState(null, null, null);
|
48
|
-
});
|
49
|
-
</script>
|
50
|
-
<% end %>
|
38
|
+
<%= render(partial: "lesli/partials/application-head") %>
|
51
39
|
</head>
|
52
40
|
<body class="<%= application_body_class() %>">
|
53
|
-
<%#= yield :application_public_custom_header %>
|
54
41
|
<%= yield %>
|
55
|
-
<%= render
|
56
|
-
<%= render partial: "lesli/partials/application-analytics" %>
|
42
|
+
<%= render(partial: "lesli/partials/application-analytics") %>
|
57
43
|
</body>
|
58
44
|
</html>
|
@@ -1,9 +1,8 @@
|
|
1
|
-
|
2
|
-
=begin
|
1
|
+
<%#
|
3
2
|
|
4
3
|
Lesli
|
5
4
|
|
6
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
7
6
|
|
8
7
|
This program is free software: you can redistribute it and/or modify
|
9
8
|
it under the terms of the GNU General Public License as published by
|
@@ -18,9 +17,9 @@ GNU General Public License for more details.
|
|
18
17
|
You should have received a copy of the GNU General Public License
|
19
18
|
along with this program. If not, see http://www.gnu.org/licenses/.
|
20
19
|
|
21
|
-
Lesli · Ruby on Rails SaaS
|
20
|
+
Lesli · Ruby on Rails SaaS Development Framework.
|
22
21
|
|
23
|
-
Made with ♥ by
|
22
|
+
Made with ♥ by LesliTech
|
24
23
|
Building a better future, one line of code at a time.
|
25
24
|
|
26
25
|
@contact hello@lesli.tech
|
@@ -29,7 +28,6 @@ Building a better future, one line of code at a time.
|
|
29
28
|
|
30
29
|
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
30
|
// ·
|
32
|
-
=end
|
33
31
|
%>
|
34
32
|
|
35
33
|
|
data/app/views/lesli/partials/{_application-lesli-scss.html.erb → _application-lesli-css.html.erb}
RENAMED
@@ -1,9 +1,8 @@
|
|
1
|
-
|
2
|
-
=begin
|
1
|
+
<%#
|
3
2
|
|
4
3
|
Lesli
|
5
4
|
|
6
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
7
6
|
|
8
7
|
This program is free software: you can redistribute it and/or modify
|
9
8
|
it under the terms of the GNU General Public License as published by
|
@@ -29,12 +28,8 @@ Building a better future, one line of code at a time.
|
|
29
28
|
|
30
29
|
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
30
|
// ·
|
32
|
-
=end
|
33
31
|
%>
|
34
32
|
|
35
|
-
<%# Hide vue until vue finishes compilation %>
|
36
|
-
<%# <style>[v-cloak] { display: none !important; }</style> %>
|
37
|
-
|
38
33
|
|
39
34
|
<%
|
40
35
|
# Defining color customization
|
@@ -55,6 +50,5 @@ Building a better future, one line of code at a time.
|
|
55
50
|
|
56
51
|
|
57
52
|
<%# Loading stylesheets %>
|
58
|
-
<%= stylesheet_link_tag
|
59
|
-
<%= stylesheet_link_tag
|
60
|
-
|
53
|
+
<%= stylesheet_link_tag(lesli_asset_path(:lesli_assets, 'templates/application'), media: "all") %>
|
54
|
+
<%= stylesheet_link_tag(lesli_asset_path(), media: "all") %>
|
data/app/views/lesli/partials/{_application-data.html.erb → _application-lesli-data.html.erb}
RENAMED
@@ -32,6 +32,10 @@ Building a better future, one line of code at a time.
|
|
32
32
|
|
33
33
|
<%
|
34
34
|
|
35
|
+
# Defining color customization
|
36
|
+
# colors will be override with the ones defined in the database if custom colors exists
|
37
|
+
# if there is no custom colors defined, the var() function will return the lesli colors
|
38
|
+
#@lesli.dig(:customization, :colors) || {}
|
35
39
|
@lesli[:notifications] = Lesli::Courier.new(:lesli_bell, 0).from(:notification_service, current_user).call(:count)
|
36
40
|
|
37
41
|
%>
|
@@ -1,9 +1,8 @@
|
|
1
|
-
|
2
|
-
=begin
|
1
|
+
<%#
|
3
2
|
|
4
3
|
Lesli
|
5
4
|
|
6
|
-
Copyright (c)
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
7
6
|
|
8
7
|
This program is free software: you can redistribute it and/or modify
|
9
8
|
it under the terms of the GNU General Public License as published by
|
@@ -29,11 +28,10 @@ Building a better future, one line of code at a time.
|
|
29
28
|
|
30
29
|
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
30
|
// ·
|
32
|
-
=end
|
33
31
|
%>
|
34
32
|
|
35
33
|
<%= javascript_importmap_tags %>
|
36
|
-
<%= javascript_include_tag(
|
34
|
+
<%= javascript_include_tag(lesli_asset_path(:lesli_assets, 'application'), :defer => "defer") %>
|
37
35
|
<%= yield(:application_lesli_javascript) %>
|
38
36
|
<%#
|
39
37
|
<script src="https://js.honeybadger.io/v3.2/honeybadger.min.js" type="text/javascript"></script>
|
data/lib/lesli/engine.rb
CHANGED
@@ -36,9 +36,11 @@ require "kaminari"
|
|
36
36
|
|
37
37
|
# · Tools used to build the Lesli Framework
|
38
38
|
require "L2"
|
39
|
-
require "useragent"
|
39
|
+
#require "useragent"
|
40
40
|
require "acts_as_paranoid"
|
41
41
|
|
42
|
+
# The hole Lesli ecosystem depends on current_user, so we
|
43
|
+
# include the dependency in the core
|
42
44
|
require "devise"
|
43
45
|
|
44
46
|
require "lesli_date"
|
@@ -73,9 +75,6 @@ module Lesli
|
|
73
75
|
end
|
74
76
|
end
|
75
77
|
|
76
|
-
|
77
|
-
#config.view_component.view_component_path = root.join("app","components")
|
78
|
-
|
79
78
|
|
80
79
|
# Lesli Framework configuration
|
81
80
|
|
data/lib/lesli/version.rb
CHANGED
@@ -52,3 +52,14 @@ module LesliHelper
|
|
52
52
|
Rack::Test::UploadedFile.new(Rails.root.join(path))
|
53
53
|
end
|
54
54
|
end
|
55
|
+
|
56
|
+
# Devise Rails 8 patch
|
57
|
+
|
58
|
+
require 'devise'
|
59
|
+
|
60
|
+
module Devise
|
61
|
+
def self.mappings
|
62
|
+
Rails.application.try(:reload_routes_unless_loaded)
|
63
|
+
@@mappings
|
64
|
+
end
|
65
|
+
end
|
data/lib/tasks/lesli_tasks.rake
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lesli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Lesli Development Team
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: rails
|
@@ -25,47 +24,33 @@ dependencies:
|
|
25
24
|
- !ruby/object:Gem::Version
|
26
25
|
version: '8.0'
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
27
|
+
name: turbo-rails
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
30
|
- - "~>"
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
32
|
+
version: '2.0'
|
34
33
|
type: :runtime
|
35
34
|
prerelease: false
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
37
|
- - "~>"
|
39
38
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
39
|
+
version: '2.0'
|
41
40
|
- !ruby/object:Gem::Dependency
|
42
41
|
name: importmap-rails
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
44
|
- - "~>"
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.2
|
46
|
+
version: '2.2'
|
48
47
|
type: :runtime
|
49
48
|
prerelease: false
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
51
|
- - "~>"
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.2
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: turbo-rails
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
53
|
+
version: '2.2'
|
69
54
|
- !ruby/object:Gem::Dependency
|
70
55
|
name: acts_as_paranoid
|
71
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,8 +163,8 @@ dependencies:
|
|
178
163
|
- - "~>"
|
179
164
|
- !ruby/object:Gem::Version
|
180
165
|
version: '0.6'
|
181
|
-
description: Lesli is a SaaS development framework designed to build highly scalable,
|
182
|
-
|
166
|
+
description: "Lesli is a SaaS development framework designed to build highly scalable,
|
167
|
+
\nsecure and customizable software products.\n"
|
183
168
|
email:
|
184
169
|
- hello@lesli.tech
|
185
170
|
executables: []
|
@@ -271,29 +256,23 @@ files:
|
|
271
256
|
- app/views/lesli/layouts/mailer.html.erb
|
272
257
|
- app/views/lesli/layouts/mailer.text.erb
|
273
258
|
- app/views/lesli/partials/_application-analytics.html.erb
|
274
|
-
- app/views/lesli/partials/_application-data.html.erb
|
275
259
|
- app/views/lesli/partials/_application-head.html.erb
|
276
260
|
- app/views/lesli/partials/_application-lesli-annoouncements.html.erb
|
277
|
-
- app/views/lesli/partials/_application-lesli-chatbox.html.erb
|
278
261
|
- app/views/lesli/partials/_application-lesli-content.html.erb
|
262
|
+
- app/views/lesli/partials/_application-lesli-css.html.erb
|
263
|
+
- app/views/lesli/partials/_application-lesli-data.html.erb
|
279
264
|
- app/views/lesli/partials/_application-lesli-footer.html.erb
|
280
265
|
- app/views/lesli/partials/_application-lesli-header.html.erb
|
281
266
|
- app/views/lesli/partials/_application-lesli-javascript.html.erb
|
282
267
|
- app/views/lesli/partials/_application-lesli-navigation.html.erb
|
283
268
|
- app/views/lesli/partials/_application-lesli-notifications.html.erb
|
284
|
-
- app/views/lesli/partials/_application-lesli-panels.html.erb
|
285
|
-
- app/views/lesli/partials/_application-lesli-scss.html.erb
|
286
269
|
- app/views/lesli/partials/_application-lesli-sidebar.html.erb
|
287
|
-
- app/views/lesli/partials/_application-public-footer.html.erb
|
288
|
-
- app/views/lesli/partials/_application-public-javascript.html.erb
|
289
|
-
- app/views/lesli/partials/_application-public-scss.html.erb
|
290
270
|
- app/views/lesli/shared/dashboards/_edit.html.erb
|
291
271
|
- app/views/lesli/shared/dashboards/_show.html.erb
|
292
272
|
- app/views/lesli/wrappers/_application-devise-simple.erb
|
293
273
|
- app/views/lesli/wrappers/_application-devise.html.erb
|
294
274
|
- config/importmap.rb
|
295
275
|
- config/initializers/devise.rb
|
296
|
-
- config/initializers/devise_rails_8_patch.rb
|
297
276
|
- config/initializers/lesli.rb
|
298
277
|
- config/initializers/lesli_migration_helpers.rb
|
299
278
|
- config/locales/devise.en.yml
|
@@ -394,10 +373,10 @@ files:
|
|
394
373
|
- readme.md
|
395
374
|
homepage: https://www.lesli.dev/
|
396
375
|
licenses:
|
397
|
-
- GPL-3.0
|
376
|
+
- GPL-3.0-or-later
|
398
377
|
metadata:
|
399
378
|
homepage_uri: https://www.lesli.dev/
|
400
|
-
changelog_uri: https://github.com/LesliTech/Lesli
|
379
|
+
changelog_uri: https://github.com/LesliTech/Lesli/releases
|
401
380
|
source_code_uri: https://github.com/LesliTech/Lesli
|
402
381
|
bug_tracker_uri: https://github.com/LesliTech/Lesli/issues
|
403
382
|
documentation_uri: https://www.lesli.dev/lesli/
|
@@ -416,8 +395,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
416
395
|
- !ruby/object:Gem::Version
|
417
396
|
version: '0'
|
418
397
|
requirements: []
|
419
|
-
rubygems_version: 3.
|
420
|
-
signing_key:
|
398
|
+
rubygems_version: 3.7.1
|
421
399
|
specification_version: 4
|
422
400
|
summary: Ruby on Rails SaaS Development Framework.
|
423
401
|
test_files: []
|
@@ -1,35 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
=begin
|
3
|
-
|
4
|
-
Lesli
|
5
|
-
|
6
|
-
Copyright (c) 2023, Lesli Technologies, S. A.
|
7
|
-
|
8
|
-
This program is free software: you can redistribute it and/or modify
|
9
|
-
it under the terms of the GNU General Public License as published by
|
10
|
-
the Free Software Foundation, either version 3 of the License, or
|
11
|
-
(at your option) any later version.
|
12
|
-
|
13
|
-
This program is distributed in the hope that it will be useful,
|
14
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
GNU General Public License for more details.
|
17
|
-
|
18
|
-
You should have received a copy of the GNU General Public License
|
19
|
-
along with this program. If not, see http://www.gnu.org/licenses/.
|
20
|
-
|
21
|
-
Lesli · Ruby on Rails SaaS development platform.
|
22
|
-
|
23
|
-
Made with ♥ by https://www.lesli.tech
|
24
|
-
Building a better future, one line of code at a time.
|
25
|
-
|
26
|
-
@contact hello@lesli.tech
|
27
|
-
@website https://www.lesli.tech
|
28
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
29
|
-
|
30
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
|
-
// ·
|
32
|
-
=end
|
33
|
-
%>
|
34
|
-
|
35
|
-
<application-component-chatbox></application-component-chatbox>
|
@@ -1,58 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
=begin
|
3
|
-
|
4
|
-
Lesli
|
5
|
-
|
6
|
-
Copyright (c) 2023, Lesli Technologies, S. A.
|
7
|
-
|
8
|
-
This program is free software: you can redistribute it and/or modify
|
9
|
-
it under the terms of the GNU General Public License as published by
|
10
|
-
the Free Software Foundation, either version 3 of the License, or
|
11
|
-
(at your option) any later version.
|
12
|
-
|
13
|
-
This program is distributed in the hope that it will be useful,
|
14
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
GNU General Public License for more details.
|
17
|
-
|
18
|
-
You should have received a copy of the GNU General Public License
|
19
|
-
along with this program. If not, see http://www.gnu.org/licenses/.
|
20
|
-
|
21
|
-
Lesli · Ruby on Rails SaaS development platform.
|
22
|
-
|
23
|
-
Made with ♥ by https://www.lesli.tech
|
24
|
-
Building a better future, one line of code at a time.
|
25
|
-
|
26
|
-
@contact hello@lesli.tech
|
27
|
-
@website https://www.lesli.tech
|
28
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
29
|
-
|
30
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
|
-
// ·
|
32
|
-
=end
|
33
|
-
%>
|
34
|
-
|
35
|
-
<%# Loading standard focus panel %>
|
36
|
-
<% if defined?(CloudFocus) %>
|
37
|
-
<application-component-panel-tasks>
|
38
|
-
</application-component-panel-tasks>
|
39
|
-
<% end %>
|
40
|
-
|
41
|
-
|
42
|
-
<%# Loading standar bell panels %>
|
43
|
-
<% if defined?(LesliBell) %>
|
44
|
-
<application-panel-bell-notifications></application-panel-bell-notifications>
|
45
|
-
<%# <application-panel-announcements></application-component-panel-announcements> %>
|
46
|
-
<% end %>
|
47
|
-
|
48
|
-
|
49
|
-
<%# Loading standar help panels %>
|
50
|
-
<% if defined?(LesliSupport) %>
|
51
|
-
<application-panel-support-tickets></application-panel-support-tickets>
|
52
|
-
<% end %>
|
53
|
-
|
54
|
-
<%# Loading user profile panel %>
|
55
|
-
<%# <application-component-panel-profile></application-component-panel-profile> %>
|
56
|
-
|
57
|
-
<%# Loading cloud object files panel %>
|
58
|
-
<%# <application-component-panel-files></application-component-panel-files> %>
|
@@ -1,51 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
=begin
|
3
|
-
|
4
|
-
Lesli
|
5
|
-
|
6
|
-
Copyright (c) 2023, Lesli Technologies, S. A.
|
7
|
-
|
8
|
-
This program is free software: you can redistribute it and/or modify
|
9
|
-
it under the terms of the GNU General Public License as published by
|
10
|
-
the Free Software Foundation, either version 3 of the License, or
|
11
|
-
(at your option) any later version.
|
12
|
-
|
13
|
-
This program is distributed in the hope that it will be useful,
|
14
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
GNU General Public License for more details.
|
17
|
-
|
18
|
-
You should have received a copy of the GNU General Public License
|
19
|
-
along with this program. If not, see http://www.gnu.org/licenses/.
|
20
|
-
|
21
|
-
Lesli · Ruby on Rails SaaS development platform.
|
22
|
-
|
23
|
-
Made with ♥ by https://www.lesli.tech
|
24
|
-
Building a better future, one line of code at a time.
|
25
|
-
|
26
|
-
@contact hello@lesli.tech
|
27
|
-
@website https://www.lesli.tech
|
28
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
29
|
-
|
30
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
|
-
// ·
|
32
|
-
=end
|
33
|
-
%>
|
34
|
-
|
35
|
-
<footer>
|
36
|
-
<nav aria-label="main navigation" class="navbar" role="navigation">
|
37
|
-
<div class="navbar-brand">
|
38
|
-
<a class="navbar-item" href="https://lesli.cloud">
|
39
|
-
LesliCloud
|
40
|
-
</a>
|
41
|
-
</div>
|
42
|
-
<div class="navbar-menu">
|
43
|
-
<div class="navbar-start"></div>
|
44
|
-
<div class="navbar-end">
|
45
|
-
<a class="navbar-item">
|
46
|
-
Privacy
|
47
|
-
</a>
|
48
|
-
</div>
|
49
|
-
</div>
|
50
|
-
</nav>
|
51
|
-
</footer>
|
@@ -1,49 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
=begin
|
3
|
-
|
4
|
-
Lesli
|
5
|
-
|
6
|
-
Copyright (c) 2023, Lesli Technologies, S. A.
|
7
|
-
|
8
|
-
This program is free software: you can redistribute it and/or modify
|
9
|
-
it under the terms of the GNU General Public License as published by
|
10
|
-
the Free Software Foundation, either version 3 of the License, or
|
11
|
-
(at your option) any later version.
|
12
|
-
|
13
|
-
This program is distributed in the hope that it will be useful,
|
14
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
GNU General Public License for more details.
|
17
|
-
|
18
|
-
You should have received a copy of the GNU General Public License
|
19
|
-
along with this program. If not, see http://www.gnu.org/licenses/.
|
20
|
-
|
21
|
-
Lesli · Ruby on Rails SaaS Development Framework.
|
22
|
-
|
23
|
-
Made with ♥ by https://www.lesli.tech
|
24
|
-
Building a better future, one line of code at a time.
|
25
|
-
|
26
|
-
@contact hello@lesli.tech
|
27
|
-
@website https://www.lesli.tech
|
28
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
29
|
-
|
30
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
|
-
// ·
|
32
|
-
=end
|
33
|
-
%>
|
34
|
-
|
35
|
-
|
36
|
-
<% is_devise = controller_path.split('/')[0] == "users" %>
|
37
|
-
|
38
|
-
<%# Load specific javascript files for devise actions (login,register,etc) %>
|
39
|
-
<%#= javascript_include_tag("lesli/#{controller_path}") if is_devise %>
|
40
|
-
|
41
|
-
<%# Load standard files %>
|
42
|
-
<%#= javascript_include_tag(application_javascript_path()) unless is_devise %>
|
43
|
-
|
44
|
-
<%# Set language for JavaScript apps %>
|
45
|
-
<script>
|
46
|
-
if (typeof i18n !== "undefined") {
|
47
|
-
i18n.locale = "<%= I18n.locale %>"
|
48
|
-
}
|
49
|
-
</script>
|
@@ -1,35 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
=begin
|
3
|
-
|
4
|
-
Lesli
|
5
|
-
|
6
|
-
Copyright (c) 2023, Lesli Technologies, S. A.
|
7
|
-
|
8
|
-
This program is free software: you can redistribute it and/or modify
|
9
|
-
it under the terms of the GNU General Public License as published by
|
10
|
-
the Free Software Foundation, either version 3 of the License, or
|
11
|
-
(at your option) any later version.
|
12
|
-
|
13
|
-
This program is distributed in the hope that it will be useful,
|
14
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
GNU General Public License for more details.
|
17
|
-
|
18
|
-
You should have received a copy of the GNU General Public License
|
19
|
-
along with this program. If not, see http://www.gnu.org/licenses/.
|
20
|
-
|
21
|
-
Lesli · Ruby on Rails SaaS development platform.
|
22
|
-
|
23
|
-
Made with ♥ by https://www.lesli.tech
|
24
|
-
Building a better future, one line of code at a time.
|
25
|
-
|
26
|
-
@contact hello@lesli.tech
|
27
|
-
@website https://www.lesli.tech
|
28
|
-
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
29
|
-
|
30
|
-
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
31
|
-
// ·
|
32
|
-
=end
|
33
|
-
%>
|
34
|
-
|
35
|
-
<%#= stylesheet_link_tag(controller_path, media: "all") %>
|