open_fresk 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +64 -0
  3. data/Gemfile +12 -0
  4. data/Gemfile.lock +248 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +130 -0
  7. data/Rakefile +8 -0
  8. data/app/.DS_Store +0 -0
  9. data/app/assets/.DS_Store +0 -0
  10. data/app/assets/config/manifest.js +20 -0
  11. data/app/assets/images/open_fresk/.keep +0 -0
  12. data/app/assets/images/open_fresk/favicon.png +0 -0
  13. data/app/assets/images/open_fresk/logos/logo.png +0 -0
  14. data/app/assets/stylesheets/open_fresk/application.scss +90 -0
  15. data/app/assets/stylesheets/open_fresk/components/_accordion.scss +3 -0
  16. data/app/assets/stylesheets/open_fresk/components/_btn.scss +25 -0
  17. data/app/assets/stylesheets/open_fresk/components/_btn_toggle.scss +16 -0
  18. data/app/assets/stylesheets/open_fresk/components/_card.scss +6 -0
  19. data/app/assets/stylesheets/open_fresk/components/_checkout.scss +142 -0
  20. data/app/assets/stylesheets/open_fresk/components/_cursors.scss +35 -0
  21. data/app/assets/stylesheets/open_fresk/components/_dropdown_toggle.scss +9 -0
  22. data/app/assets/stylesheets/open_fresk/components/_form.scss +22 -0
  23. data/app/assets/stylesheets/open_fresk/components/_google_maps_autocomplete.scss +3 -0
  24. data/app/assets/stylesheets/open_fresk/components/_hamburger_button.scss +41 -0
  25. data/app/assets/stylesheets/open_fresk/components/_header.scss +57 -0
  26. data/app/assets/stylesheets/open_fresk/components/_iframe.scss +26 -0
  27. data/app/assets/stylesheets/open_fresk/components/_index.scss +22 -0
  28. data/app/assets/stylesheets/open_fresk/components/_nav_pills.scss +26 -0
  29. data/app/assets/stylesheets/open_fresk/components/_nps_progress_bar.scss +97 -0
  30. data/app/assets/stylesheets/open_fresk/components/_pagination.scss +11 -0
  31. data/app/assets/stylesheets/open_fresk/components/_progress_bar.scss +17 -0
  32. data/app/assets/stylesheets/open_fresk/components/_radio_button.scss +25 -0
  33. data/app/assets/stylesheets/open_fresk/components/_range.scss +253 -0
  34. data/app/assets/stylesheets/open_fresk/components/_select_input.scss +9 -0
  35. data/app/assets/stylesheets/open_fresk/components/_slider.scss +61 -0
  36. data/app/assets/stylesheets/open_fresk/components/_slim_select.scss +31 -0
  37. data/app/assets/stylesheets/open_fresk/components/_timeline.scss +165 -0
  38. data/app/assets/stylesheets/open_fresk/components/_tooltip.scss +20 -0
  39. data/app/assets/stylesheets/open_fresk/components/_transformation.scss +4 -0
  40. data/app/assets/stylesheets/open_fresk/config/_belts.scss +38 -0
  41. data/app/assets/stylesheets/open_fresk/config/_bg.scss +6 -0
  42. data/app/assets/stylesheets/open_fresk/config/_border.scss +15 -0
  43. data/app/assets/stylesheets/open_fresk/config/_colors.scss +42 -0
  44. data/app/assets/stylesheets/open_fresk/config/_index.scss +6 -0
  45. data/app/assets/stylesheets/open_fresk/config/_text.scss +24 -0
  46. data/app/assets/stylesheets/open_fresk/config/_typography.scss +26 -0
  47. data/app/assets/stylesheets/open_fresk/external_libraries/_actiontext.scss +30 -0
  48. data/app/assets/stylesheets/open_fresk/external_libraries/_slimselect.min.scss +1 -0
  49. data/app/assets/stylesheets/open_fresk/external_libraries/index.scss +2 -0
  50. data/app/assets/stylesheets/open_fresk/pages/_index.scss +1 -0
  51. data/app/assets/stylesheets/open_fresk/pages/_signin.scss +10 -0
  52. data/app/assets/stylesheets-original/open_fresk/application.css +90 -0
  53. data/app/controllers/.DS_Store +0 -0
  54. data/app/controllers/concerns/.keep +0 -0
  55. data/app/controllers/concerns/open_fresk/authentication.rb +18 -0
  56. data/app/controllers/open_fresk/application_controller.rb +5 -0
  57. data/app/controllers/open_fresk/sessions_controller.rb +38 -0
  58. data/app/controllers/open_fresk/training_sessions_controller.rb +17 -0
  59. data/app/extensions/open_fresk/core_extensions/string.rb +13 -0
  60. data/app/helpers/header_helper.rb +2 -0
  61. data/app/helpers/open_fresk/application_helper.rb +18 -0
  62. data/app/helpers/plateform_access/rights_helper.rb +15 -0
  63. data/app/javascript/manifest.json +15 -0
  64. data/app/javascript/open_fresk/application.js +7 -0
  65. data/app/javascript/open_fresk/controllers/hello_controller.js +7 -0
  66. data/app/jobs/open_fresk/application_job.rb +4 -0
  67. data/app/mailers/open_fresk/application_mailer.rb +6 -0
  68. data/app/models/.DS_Store +0 -0
  69. data/app/models/concerns/.keep +0 -0
  70. data/app/models/open_fresk/application_record.rb +10 -0
  71. data/app/models/open_fresk/training_session.rb +9 -0
  72. data/app/models/open_fresk/user.rb +9 -0
  73. data/app/services/open_fresk/extensions/string_enum.rb +201 -0
  74. data/app/views/layouts/header/_hamburger.html.erb +7 -0
  75. data/app/views/layouts/header/_logo.html.erb +5 -0
  76. data/app/views/layouts/open_fresk/_alert.html.erb +0 -0
  77. data/app/views/layouts/open_fresk/_footer.html.erb +0 -0
  78. data/app/views/layouts/open_fresk/_header.html.erb +12 -0
  79. data/app/views/layouts/open_fresk/_include.html.erb +24 -0
  80. data/app/views/layouts/open_fresk/_meta.html.erb +10 -0
  81. data/app/views/layouts/open_fresk/application.html.erb +23 -0
  82. data/app/views/open_fresk/sessions/_login.html.erb +16 -0
  83. data/app/views/open_fresk/sessions/new.html.erb +8 -0
  84. data/app/views/open_fresk/training_sessions/_card.html.erb +0 -0
  85. data/app/views/open_fresk/training_sessions/index.html.erb +22 -0
  86. data/bin/rails +14 -0
  87. data/config/importmap.rb +6 -0
  88. data/config/locales/en.yml +15 -0
  89. data/config/locales/fr.yml +15 -0
  90. data/config/routes.rb +8 -0
  91. data/lib/.DS_Store +0 -0
  92. data/lib/open_fresk/engine.rb +93 -0
  93. data/lib/open_fresk/version.rb +3 -0
  94. data/lib/open_fresk.rb +6 -0
  95. data/lib/tasks/open_fresk_tasks.rake +4 -0
  96. data/open_fresk.gemspec +29 -0
  97. metadata +250 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f3b7411c12791ed9c4f8b908fd3c0bede0c7a6d80b58d6c85bb0215274e40bdb
4
+ data.tar.gz: de22c2223823a8028bfde992ab593d8758c2109d131357cf11a26f55ca19c325
5
+ SHA512:
6
+ metadata.gz: 272612bfb2c1d4e79445a20117d6992705e4dda18477230c67bd82d7efbbbe2d1639cac5de8bc700024e1f0b39d12fc479c7863cec31411e599f97a3b71b4084
7
+ data.tar.gz: 91fd754be5189d8111024e6535bc6f43d8356aa493498d85e45431050851cd290783d76d7a94170ccaf9e03347b11a30b1b92811c57860fa14c07931060fb876
data/.gitignore ADDED
@@ -0,0 +1,64 @@
1
+ # Bundler configuration and caches
2
+ .bundle/
3
+ vendor/bundle/
4
+
5
+ # Ignore built gem packages and packaging directories
6
+ *.gem
7
+ pkg/
8
+
9
+ # Log and temp files from Rails
10
+ log/*
11
+ !log/.keep
12
+ tmp/*
13
+ !tmp/.keep
14
+ *.log
15
+
16
+ # Compiled assets and precompiled files
17
+ public/assets
18
+ public/packs
19
+ public/packs-test
20
+ public/system
21
+ public/uploads
22
+
23
+ # Node.js dependencies and Yarn files (if you are using these)
24
+ node_modules/
25
+ yarn-error.log*
26
+ .yarn-integrity
27
+
28
+ # Build and distribution directories
29
+ build/
30
+ dist/
31
+
32
+ # OS-specific files
33
+ .DS_Store
34
+ Thumbs.db
35
+
36
+ # Editor and IDE temporary files
37
+ *.swp
38
+ *.swo
39
+ *~
40
+ .idea/
41
+ .vscode/
42
+ *.iml
43
+
44
+ # Test and coverage artifacts
45
+ coverage/
46
+ spec/reports/
47
+ .rspec
48
+
49
+ # Debug and byebug history
50
+ .byebug_history
51
+
52
+ # Sensitive configuration files (do not commit credentials or master key)
53
+ config/master.key
54
+ config/credentials.yml.enc
55
+
56
+ # Environment files (used by dotenv or similar gems)
57
+ .env
58
+ .env.*
59
+
60
+ # Other miscellaneous temporary files
61
+ *.rbc
62
+
63
+ test/dummy/tmp/
64
+ *.log
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source "https://rubygems.org"
2
+
3
+ ruby "3.2.2"
4
+
5
+ # Use the gemspec for production dependency resolution.
6
+ gemspec
7
+
8
+ group :development, :test do
9
+ gem "rubocop-rails-omakase", require: false
10
+ # Uncomment the next line if you need a debugger during development:
11
+ # gem "debug", ">= 1.0.0"
12
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,248 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ open_fresk (0.1.1)
5
+ bootstrap (= 5.3.1)
6
+ concurrent-ruby (= 1.3.4)
7
+ font_awesome5_rails (= 1.5.0)
8
+ pg
9
+ puma
10
+ rails (= 7.0.8.1)
11
+ sass-rails (>= 6)
12
+ sprockets-rails
13
+
14
+ GEM
15
+ remote: https://rubygems.org/
16
+ specs:
17
+ actioncable (7.0.8.1)
18
+ actionpack (= 7.0.8.1)
19
+ activesupport (= 7.0.8.1)
20
+ nio4r (~> 2.0)
21
+ websocket-driver (>= 0.6.1)
22
+ actionmailbox (7.0.8.1)
23
+ actionpack (= 7.0.8.1)
24
+ activejob (= 7.0.8.1)
25
+ activerecord (= 7.0.8.1)
26
+ activestorage (= 7.0.8.1)
27
+ activesupport (= 7.0.8.1)
28
+ mail (>= 2.7.1)
29
+ net-imap
30
+ net-pop
31
+ net-smtp
32
+ actionmailer (7.0.8.1)
33
+ actionpack (= 7.0.8.1)
34
+ actionview (= 7.0.8.1)
35
+ activejob (= 7.0.8.1)
36
+ activesupport (= 7.0.8.1)
37
+ mail (~> 2.5, >= 2.5.4)
38
+ net-imap
39
+ net-pop
40
+ net-smtp
41
+ rails-dom-testing (~> 2.0)
42
+ actionpack (7.0.8.1)
43
+ actionview (= 7.0.8.1)
44
+ activesupport (= 7.0.8.1)
45
+ rack (~> 2.0, >= 2.2.4)
46
+ rack-test (>= 0.6.3)
47
+ rails-dom-testing (~> 2.0)
48
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
49
+ actiontext (7.0.8.1)
50
+ actionpack (= 7.0.8.1)
51
+ activerecord (= 7.0.8.1)
52
+ activestorage (= 7.0.8.1)
53
+ activesupport (= 7.0.8.1)
54
+ globalid (>= 0.6.0)
55
+ nokogiri (>= 1.8.5)
56
+ actionview (7.0.8.1)
57
+ activesupport (= 7.0.8.1)
58
+ builder (~> 3.1)
59
+ erubi (~> 1.4)
60
+ rails-dom-testing (~> 2.0)
61
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
62
+ activejob (7.0.8.1)
63
+ activesupport (= 7.0.8.1)
64
+ globalid (>= 0.3.6)
65
+ activemodel (7.0.8.1)
66
+ activesupport (= 7.0.8.1)
67
+ activerecord (7.0.8.1)
68
+ activemodel (= 7.0.8.1)
69
+ activesupport (= 7.0.8.1)
70
+ activestorage (7.0.8.1)
71
+ actionpack (= 7.0.8.1)
72
+ activejob (= 7.0.8.1)
73
+ activerecord (= 7.0.8.1)
74
+ activesupport (= 7.0.8.1)
75
+ marcel (~> 1.0)
76
+ mini_mime (>= 1.1.0)
77
+ activesupport (7.0.8.1)
78
+ concurrent-ruby (~> 1.0, >= 1.0.2)
79
+ i18n (>= 1.6, < 2)
80
+ minitest (>= 5.1)
81
+ tzinfo (~> 2.0)
82
+ ast (2.4.3)
83
+ autoprefixer-rails (10.4.21.0)
84
+ execjs (~> 2)
85
+ base64 (0.2.0)
86
+ bootstrap (5.3.1)
87
+ autoprefixer-rails (>= 9.1.0)
88
+ popper_js (>= 2.11.8, < 3)
89
+ sassc-rails (>= 2.0.0)
90
+ builder (3.3.0)
91
+ concurrent-ruby (1.3.4)
92
+ crass (1.0.6)
93
+ date (3.4.1)
94
+ erubi (1.13.1)
95
+ execjs (2.10.0)
96
+ ffi (1.17.2-arm64-darwin)
97
+ font_awesome5_rails (1.5.0)
98
+ nokogiri (>= 1.11.3)
99
+ railties (>= 4.2)
100
+ globalid (1.2.1)
101
+ activesupport (>= 6.1)
102
+ i18n (1.14.7)
103
+ concurrent-ruby (~> 1.0)
104
+ json (2.12.0)
105
+ language_server-protocol (3.17.0.5)
106
+ lint_roller (1.1.0)
107
+ logger (1.7.0)
108
+ loofah (2.24.1)
109
+ crass (~> 1.0.2)
110
+ nokogiri (>= 1.12.0)
111
+ mail (2.8.1)
112
+ mini_mime (>= 0.1.1)
113
+ net-imap
114
+ net-pop
115
+ net-smtp
116
+ marcel (1.0.4)
117
+ method_source (1.1.0)
118
+ mini_mime (1.1.5)
119
+ minitest (5.25.5)
120
+ net-imap (0.5.8)
121
+ date
122
+ net-protocol
123
+ net-pop (0.1.2)
124
+ net-protocol
125
+ net-protocol (0.2.2)
126
+ timeout
127
+ net-smtp (0.5.1)
128
+ net-protocol
129
+ nio4r (2.7.4)
130
+ nokogiri (1.18.8-arm64-darwin)
131
+ racc (~> 1.4)
132
+ parallel (1.27.0)
133
+ parser (3.3.8.0)
134
+ ast (~> 2.4.1)
135
+ racc
136
+ pg (1.5.9)
137
+ popper_js (2.11.8)
138
+ prism (1.4.0)
139
+ puma (6.6.0)
140
+ nio4r (~> 2.0)
141
+ racc (1.8.1)
142
+ rack (2.2.14)
143
+ rack-test (2.2.0)
144
+ rack (>= 1.3)
145
+ rails (7.0.8.1)
146
+ actioncable (= 7.0.8.1)
147
+ actionmailbox (= 7.0.8.1)
148
+ actionmailer (= 7.0.8.1)
149
+ actionpack (= 7.0.8.1)
150
+ actiontext (= 7.0.8.1)
151
+ actionview (= 7.0.8.1)
152
+ activejob (= 7.0.8.1)
153
+ activemodel (= 7.0.8.1)
154
+ activerecord (= 7.0.8.1)
155
+ activestorage (= 7.0.8.1)
156
+ activesupport (= 7.0.8.1)
157
+ bundler (>= 1.15.0)
158
+ railties (= 7.0.8.1)
159
+ rails-dom-testing (2.2.0)
160
+ activesupport (>= 5.0.0)
161
+ minitest
162
+ nokogiri (>= 1.6)
163
+ rails-html-sanitizer (1.6.2)
164
+ loofah (~> 2.21)
165
+ nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
166
+ railties (7.0.8.1)
167
+ actionpack (= 7.0.8.1)
168
+ activesupport (= 7.0.8.1)
169
+ method_source
170
+ rake (>= 12.2)
171
+ thor (~> 1.0)
172
+ zeitwerk (~> 2.5)
173
+ rainbow (3.1.1)
174
+ rake (13.2.1)
175
+ regexp_parser (2.10.0)
176
+ rubocop (1.75.5)
177
+ json (~> 2.3)
178
+ language_server-protocol (~> 3.17.0.2)
179
+ lint_roller (~> 1.1.0)
180
+ parallel (~> 1.10)
181
+ parser (>= 3.3.0.2)
182
+ rainbow (>= 2.2.2, < 4.0)
183
+ regexp_parser (>= 2.9.3, < 3.0)
184
+ rubocop-ast (>= 1.44.0, < 2.0)
185
+ ruby-progressbar (~> 1.7)
186
+ unicode-display_width (>= 2.4.0, < 4.0)
187
+ rubocop-ast (1.44.1)
188
+ parser (>= 3.3.7.2)
189
+ prism (~> 1.4)
190
+ rubocop-performance (1.25.0)
191
+ lint_roller (~> 1.1)
192
+ rubocop (>= 1.75.0, < 2.0)
193
+ rubocop-ast (>= 1.38.0, < 2.0)
194
+ rubocop-rails (2.31.0)
195
+ activesupport (>= 4.2.0)
196
+ lint_roller (~> 1.1)
197
+ rack (>= 1.1)
198
+ rubocop (>= 1.75.0, < 2.0)
199
+ rubocop-ast (>= 1.38.0, < 2.0)
200
+ rubocop-rails-omakase (1.1.0)
201
+ rubocop (>= 1.72)
202
+ rubocop-performance (>= 1.24)
203
+ rubocop-rails (>= 2.30)
204
+ ruby-progressbar (1.13.0)
205
+ sass-rails (6.0.0)
206
+ sassc-rails (~> 2.1, >= 2.1.1)
207
+ sassc (2.4.0)
208
+ ffi (~> 1.9)
209
+ sassc-rails (2.1.2)
210
+ railties (>= 4.0.0)
211
+ sassc (>= 2.0)
212
+ sprockets (> 3.0)
213
+ sprockets-rails
214
+ tilt
215
+ sprockets (4.2.2)
216
+ concurrent-ruby (~> 1.0)
217
+ logger
218
+ rack (>= 2.2.4, < 4)
219
+ sprockets-rails (3.5.2)
220
+ actionpack (>= 6.1)
221
+ activesupport (>= 6.1)
222
+ sprockets (>= 3.0.0)
223
+ thor (1.3.2)
224
+ tilt (2.6.0)
225
+ timeout (0.4.3)
226
+ tzinfo (2.0.6)
227
+ concurrent-ruby (~> 1.0)
228
+ unicode-display_width (3.1.4)
229
+ unicode-emoji (~> 4.0, >= 4.0.4)
230
+ unicode-emoji (4.0.4)
231
+ websocket-driver (0.7.7)
232
+ base64
233
+ websocket-extensions (>= 0.1.0)
234
+ websocket-extensions (0.1.5)
235
+ zeitwerk (2.7.2)
236
+
237
+ PLATFORMS
238
+ arm64-darwin-22
239
+
240
+ DEPENDENCIES
241
+ open_fresk!
242
+ rubocop-rails-omakase
243
+
244
+ RUBY VERSION
245
+ ruby 3.2.2p53
246
+
247
+ BUNDLED WITH
248
+ 2.4.10
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2025 Vincent Daubry
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,130 @@
1
+ <a href="https://github.com/yourusername/open_fresk">
2
+ <img src="app/assets/images/open_fresk/favicon.png" width="100px" alt="OpenFresk Logo">
3
+ </a>
4
+
5
+ # OpenFresk
6
+
7
+ OpenFresk is a 100% open-source project for non-profit organizations to deploy and manage interactive “Fresque” workshops on a self-hosted web platform.
8
+
9
+ > **Self-hosted.** Deploy on your own infrastructure and retain full control over your data.
10
+ > **Extensible.** Customize views, controllers, and assets to match your brand and workflow.
11
+ > **Rapid setup.** Launch a platform in minutes with the built-in dummy host app.
12
+ > **100% Open source.** Free to use, modify, and contribute.
13
+
14
+ ---
15
+
16
+ **With OpenFresk, you can:**
17
+
18
+ - 📅 **Create and schedule workshops** to manage time slots and sessions.
19
+ - 🙍 **Manage participant registration and authentication** with built-in user flows.
20
+ - 💳 **Sell tickets and manage payments** (via Stripe, PayPal, etc.).
21
+ - 🤝 **Facilitate collaborative exercises and collect feedback** during workshops.
22
+
23
+ ---
24
+
25
+ ## Key Benefits
26
+
27
+ - 🔒 **Ownership.** Fully self-hosted and branded.
28
+ - ⚡️ **Speed.** Rapid deployment with minimal configuration.
29
+ - 🛠️ **Flexibility.** Override any part of the engine to fit your needs.
30
+ - ❤️ **Community.** Backed by a growing open-source community.
31
+
32
+ ---
33
+
34
+ ## Prerequisites
35
+
36
+ - Git (https://git-scm.com/)
37
+ - Ruby 3.2.2 (recommended via rbenv or RVM)
38
+ - Bundler (`gem install bundler`)
39
+ - PostgreSQL >= 9.3 with development headers (`libpq-dev` on Debian/Ubuntu or `postgresql` on macOS)
40
+ - Node.js and Yarn (optional, for JavaScript dependencies)
41
+
42
+ ---
43
+
44
+ ## Getting Started
45
+
46
+ 1. **Clone the repository**:
47
+
48
+ ```bash
49
+ git clone https://github.com/yourusername/open_fresk.git
50
+ cd open_fresk
51
+ ```
52
+
53
+ 2. **Install dependencies**:
54
+
55
+ ```bash
56
+ bundle install
57
+ ```
58
+
59
+ 3. **Switch to the dummy host app**:
60
+
61
+ ```bash
62
+ cd test/dummy
63
+ ```
64
+
65
+ 4. **Set up the app** (gems, database, assets):
66
+
67
+ ```bash
68
+ bin/setup
69
+ ```
70
+
71
+ 5. **Run the server**:
72
+
73
+ ```bash
74
+ bin/rails server
75
+ ```
76
+
77
+ 6. **Visit** `http://localhost:3000/open_fresk` in your browser.
78
+
79
+ To run on a different port (e.g., 3001):
80
+
81
+ ```bash
82
+ bin/rails server -p 3001
83
+ ```
84
+
85
+ ---
86
+
87
+ ## Built With
88
+
89
+ - Ruby on Rails 7
90
+ - Puma (web server)
91
+ - PostgreSQL (database)
92
+ - Sprockets & Importmap (asset management)
93
+ - Stimulus (JavaScript controllers)
94
+ - FontAwesome5 (icons)
95
+
96
+ ---
97
+
98
+ ## Contributing
99
+
100
+ We welcome contributions! To get started:
101
+
102
+ 1. Fork the repository on GitHub.
103
+ 2. Clone your fork and create a branch:
104
+ ```bash
105
+ git clone https://github.com/yourusername/open_fresk.git
106
+ cd open_fresk
107
+ git checkout -b my-feature
108
+ ```
109
+ 3. Follow the **Getting Started** guide to run the dummy host app.
110
+ 4. Implement your feature or bugfix, and add tests.
111
+ 5. Run the test suite:
112
+ ```bash
113
+ bundle exec rails test
114
+ ```
115
+ 6. Commit your changes and push to your fork.
116
+ 7. Open a Pull Request on GitHub.
117
+
118
+ Please adhere to the existing code style and write tests for new functionality.
119
+
120
+ ---
121
+
122
+ ## Security
123
+
124
+ Please report any security issues via GitHub Issues or by contacting the maintainers directly.
125
+
126
+ ---
127
+
128
+ ## License
129
+
130
+ OpenFresk is released under the MIT License. See the [MIT-LICENSE](MIT-LICENSE) file for details.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ load "rails/tasks/statistics.rake"
7
+
8
+ require "bundler/gem_tasks"
data/app/.DS_Store ADDED
Binary file
Binary file
@@ -0,0 +1,20 @@
1
+ // app/assets/config/manifest.js
2
+
3
+ //= link_directory ../stylesheets/open_fresk .css
4
+ //= link open_fresk/application.css
5
+ //= link open_fresk/application.js
6
+
7
+ // explicitly declare your favicon and any other images you reference by path
8
+ //= link open_fresk/favicon.png
9
+ //= link open_fresk/logos/logo.png
10
+
11
+ // (optional) if you want the rest of the png’s in that folder available:
12
+ //= link_directory ../images/open_fresk .png
13
+
14
+ // other generic images
15
+ //= link_tree ../images
16
+
17
+ // fonts, etc.
18
+ //= link_tree ../fonts
19
+
20
+ //= link manifest.json
File without changes
@@ -0,0 +1,90 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
6
+ * vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ */
14
+
15
+ label.required:after {
16
+ content: "*";
17
+ }
18
+
19
+ // Main stylesheet
20
+
21
+ // CSS partials
22
+ @import "config/index";
23
+ @import "external_libraries/index";
24
+ @import "components/index";
25
+ @import "pages/index";
26
+ @import "font_awesome5_webfont";
27
+ // $fa-font-path: "@fortawesome/fontawesome-free/webfonts";
28
+ // @import "@fortawesome/fontawesome-free/scss/fontawesome";
29
+ // @import "@fortawesome/fontawesome-free/scss/brands";
30
+ // @import "@fortawesome/fontawesome-free/scss/solid";
31
+ // @import "@fortawesome/fontawesome-free/scss/regular";
32
+ // @import "@fortawesome/fontawesome-free/scss/v4-shims";
33
+ @import "bootstrap";
34
+
35
+ // External libraries
36
+ body,
37
+ html {
38
+ width: 100%;
39
+ height: 100%;
40
+ }
41
+
42
+ * {
43
+ font-family: "Roboto", sans-serif;
44
+ }
45
+
46
+ body {
47
+ display: flex !important;
48
+ align-items: center;
49
+ padding-top: 0px;
50
+ padding-bottom: 0px;
51
+ font-weight: 400 !important;
52
+ margin-bottom: 20px !important;
53
+ margin-top: 20px !important;
54
+ }
55
+
56
+ img {
57
+ aspect-ratio: attr(width) / attr(height);
58
+ }
59
+
60
+ p.copyright {
61
+ margin: 15px 0 0;
62
+ }
63
+
64
+ .rounded-4 {
65
+ border-radius: 8px;
66
+ }
67
+ .rounded-5 {
68
+ border-radius: 10px;
69
+ }
70
+
71
+ .square-50 {
72
+ width: 50px;
73
+ height: 50px;
74
+ display: flex;
75
+ flex-direction: column;
76
+ justify-content: center;
77
+ }
78
+
79
+ .nav-item.dropdown .dropdown-item:active {
80
+ background-color: transparent !important;
81
+ }
82
+
83
+ .list-style-none {
84
+ list-style-type: none;
85
+ }
86
+
87
+ input[type="radio"] {
88
+ width: 16px;
89
+ height: 16px;
90
+ }
@@ -0,0 +1,3 @@
1
+ .accordion-button:not(.collapsed) {
2
+ background-color: rgba($color: $primary , $alpha: 0.2)!important;
3
+ }
@@ -0,0 +1,25 @@
1
+ // MAIN
2
+ .btn-sm {
3
+ border: 1px solid 099e9b !important;
4
+ }
5
+
6
+ // DANGER
7
+ .btn-danger {
8
+ background-color: rgba($danger, 0.3) !important;
9
+ border: 0px !important;
10
+ color: $danger !important;
11
+ }
12
+ .btn-danger:hover {
13
+ background-color: rgba($danger, 0.5) !important;
14
+ }
15
+
16
+ // SQUARE
17
+ .btn-square-40 {
18
+ width: 40px;
19
+ height: 40px;
20
+ display: flex;
21
+ justify-content: center;
22
+ align-items: center;
23
+ border: none;
24
+ text-decoration: none;
25
+ }
@@ -0,0 +1,16 @@
1
+ .form-switch .form-check-input {
2
+ height: 24px;
3
+ width: 48px;
4
+ }
5
+ .form-switch .form-check-input:focus {
6
+ border-color: rgba(0, 0, 0, 0.25);
7
+ outline: 0;
8
+ box-shadow: 0 0 0 0 rgba(0, 0, 0, 0);
9
+ background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba(0,0,0,0.25)'/></svg>");
10
+ }
11
+ .form-switch .form-check-input:checked {
12
+ background-color: $primary;
13
+ border-color: $primary;
14
+ border: none;
15
+ background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba(255,255,255,1.0)'/></svg>");
16
+ }
@@ -0,0 +1,6 @@
1
+ .card-hover {
2
+ &:hover {
3
+ background-color: #f3f3f3;
4
+ transition: all 0.3s ease;
5
+ }
6
+ }