signum 0.5.1 → 0.7.0
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/.rubocop.yml +14 -0
- data/Gemfile +3 -4
- data/Gemfile.lock +58 -14
- data/README.md +16 -4
- data/Rakefile +15 -15
- data/app/components/signum/notification_body/component.html.slim +6 -6
- data/app/components/signum/notification_drawer/component.html.slim +7 -6
- data/app/components/signum/notification_drawer/component_controller.js +28 -5
- data/app/components/signum/notifications/component.html.slim +4 -1
- data/app/components/signum/notifications/component.rb +3 -2
- data/app/controllers/signum/signal_controller.rb +8 -0
- data/app/mailers/signum/application_mailer.rb +2 -2
- data/app/models/signum/signal.rb +11 -9
- data/config/routes.rb +4 -3
- data/db/migrate/20201125175035_create_signum_signals.rb +2 -2
- data/db/migrate/20240405112807_add_links_and_buttons_to_signals.rb +6 -0
- data/db/migrate/20240410100722_add_key_to_signal.rb +21 -0
- data/lib/generators/signum/tailwind_config_generator.rb +3 -3
- data/lib/signum/active_record_helpers.rb +5 -5
- data/lib/signum/configuration.rb +12 -12
- data/lib/signum/engine.rb +6 -4
- data/lib/signum/version.rb +1 -1
- data/lib/signum.rb +9 -7
- data/lib/tasks/signum_tasks.rake +1 -1
- data/signum.gemspec +23 -19
- metadata +61 -3
- data/webpack.config.js +0 -126
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 63cc9c70f252bac415cd89556051daffc3449d4175726cc272b26ba50a04d04b
|
|
4
|
+
data.tar.gz: 66eab14fd02f1cff3a5008bcaef2e9be94389e62a9a3c2f832243f2b4ac2a490
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0d88fa165327a524271be29b1163350df04d52736c60354378f2a7ef2226d8567d58380991ac0e12e3c8f318d660be892ff504e46d7edd1a369fefdb0c405064
|
|
7
|
+
data.tar.gz: 0333cebc07d9d42445be878c069528cb09f6bd272ed450479ac4168fbfa5c0ec483f561f1896dedba65bb0e1eb31406aa538a1b403c6e0f98ad4eace747bb71e
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# https://www.fastruby.io/blog/ruby/code-quality/how-we-use-rubocop-and-standardrb.html
|
|
2
|
+
|
|
3
|
+
require:
|
|
4
|
+
- standard
|
|
5
|
+
|
|
6
|
+
inherit_gem:
|
|
7
|
+
standard: config/base.yml
|
|
8
|
+
|
|
9
|
+
AllCops:
|
|
10
|
+
NewCops: enable
|
|
11
|
+
Exclude:
|
|
12
|
+
- node_modules/**/*
|
|
13
|
+
- public/**/*
|
|
14
|
+
- vendor/**/*
|
data/Gemfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
source
|
|
3
|
+
source "https://rubygems.org"
|
|
4
4
|
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
5
5
|
git_source(:entdec) { |repo_name| "git@github.com:entdec/#{repo_name}.git" }
|
|
6
6
|
|
|
@@ -17,7 +17,6 @@ gemspec
|
|
|
17
17
|
# To use a debugger
|
|
18
18
|
# gem 'byebug', group: [:development, :test]
|
|
19
19
|
|
|
20
|
-
gem
|
|
20
|
+
gem "auxilium", "~> 3", entdec: "auxilium"
|
|
21
21
|
|
|
22
|
-
gem "
|
|
23
|
-
gem "sprockets-rails"
|
|
22
|
+
gem "sprockets-rails"
|
data/Gemfile.lock
CHANGED
|
@@ -13,15 +13,16 @@ GIT
|
|
|
13
13
|
PATH
|
|
14
14
|
remote: .
|
|
15
15
|
specs:
|
|
16
|
-
signum (0.
|
|
16
|
+
signum (0.6.0)
|
|
17
17
|
importmap-rails
|
|
18
18
|
pg
|
|
19
19
|
rails (> 6.0)
|
|
20
20
|
slim-rails (~> 3)
|
|
21
|
-
state_machines-
|
|
21
|
+
state_machines-activerecord
|
|
22
22
|
stimulus-rails
|
|
23
23
|
tailwindcss-rails
|
|
24
24
|
turbo-rails
|
|
25
|
+
view_component
|
|
25
26
|
|
|
26
27
|
GEM
|
|
27
28
|
remote: https://rubygems.org/
|
|
@@ -100,6 +101,7 @@ GEM
|
|
|
100
101
|
minitest (>= 5.1)
|
|
101
102
|
mutex_m
|
|
102
103
|
tzinfo (~> 2.0)
|
|
104
|
+
ast (2.4.2)
|
|
103
105
|
base64 (0.2.0)
|
|
104
106
|
bigdecimal (3.1.6)
|
|
105
107
|
builder (3.2.4)
|
|
@@ -107,6 +109,7 @@ GEM
|
|
|
107
109
|
connection_pool (2.4.1)
|
|
108
110
|
crass (1.0.6)
|
|
109
111
|
date (3.3.4)
|
|
112
|
+
debug (0.2.1)
|
|
110
113
|
drb (2.2.0)
|
|
111
114
|
ruby2_keywords
|
|
112
115
|
erubi (1.12.0)
|
|
@@ -122,7 +125,9 @@ GEM
|
|
|
122
125
|
irb (1.11.2)
|
|
123
126
|
rdoc
|
|
124
127
|
reline (>= 0.4.2)
|
|
128
|
+
json (2.7.2)
|
|
125
129
|
language_server-protocol (3.17.0.3)
|
|
130
|
+
lint_roller (1.1.0)
|
|
126
131
|
loofah (2.22.0)
|
|
127
132
|
crass (~> 1.0.2)
|
|
128
133
|
nokogiri (>= 1.12.0)
|
|
@@ -132,6 +137,7 @@ GEM
|
|
|
132
137
|
net-pop
|
|
133
138
|
net-smtp
|
|
134
139
|
marcel (1.0.4)
|
|
140
|
+
method_source (1.0.0)
|
|
135
141
|
mini_mime (1.1.5)
|
|
136
142
|
mini_portile2 (2.8.5)
|
|
137
143
|
minitest (5.22.2)
|
|
@@ -143,14 +149,17 @@ GEM
|
|
|
143
149
|
net-protocol
|
|
144
150
|
net-protocol (0.2.2)
|
|
145
151
|
timeout
|
|
146
|
-
net-smtp (0.
|
|
152
|
+
net-smtp (0.5.0)
|
|
147
153
|
net-protocol
|
|
148
|
-
nio4r (2.7.
|
|
154
|
+
nio4r (2.7.1)
|
|
149
155
|
nokogiri (1.16.2)
|
|
150
156
|
mini_portile2 (~> 2.8.2)
|
|
151
157
|
racc (~> 1.4)
|
|
158
|
+
parallel (1.24.0)
|
|
159
|
+
parser (3.3.0.5)
|
|
160
|
+
ast (~> 2.4.1)
|
|
161
|
+
racc
|
|
152
162
|
pg (1.5.6)
|
|
153
|
-
prettier_print (1.2.1)
|
|
154
163
|
psych (5.1.2)
|
|
155
164
|
stringio
|
|
156
165
|
pundit (2.3.1)
|
|
@@ -193,19 +202,35 @@ GEM
|
|
|
193
202
|
rake (>= 12.2)
|
|
194
203
|
thor (~> 1.0, >= 1.2.2)
|
|
195
204
|
zeitwerk (~> 2.6)
|
|
205
|
+
rainbow (3.1.1)
|
|
196
206
|
rake (13.1.0)
|
|
197
207
|
rdoc (6.6.2)
|
|
198
208
|
psych (>= 4.0.0)
|
|
209
|
+
regexp_parser (2.9.0)
|
|
199
210
|
reline (0.4.3)
|
|
200
211
|
io-console (~> 0.5)
|
|
201
212
|
responders (3.1.1)
|
|
202
213
|
actionpack (>= 5.2)
|
|
203
214
|
railties (>= 5.2)
|
|
215
|
+
rexml (3.2.6)
|
|
204
216
|
rolify (6.0.1)
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
217
|
+
rubocop (1.62.1)
|
|
218
|
+
json (~> 2.3)
|
|
219
|
+
language_server-protocol (>= 3.17.0)
|
|
220
|
+
parallel (~> 1.10)
|
|
221
|
+
parser (>= 3.3.0.2)
|
|
222
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
223
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
224
|
+
rexml (>= 3.2.5, < 4.0)
|
|
225
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
|
226
|
+
ruby-progressbar (~> 1.7)
|
|
227
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
228
|
+
rubocop-ast (1.31.2)
|
|
229
|
+
parser (>= 3.3.0.4)
|
|
230
|
+
rubocop-performance (1.20.2)
|
|
231
|
+
rubocop (>= 1.48.1, < 2.0)
|
|
232
|
+
rubocop-ast (>= 1.30.0, < 2.0)
|
|
233
|
+
ruby-progressbar (1.13.0)
|
|
209
234
|
ruby2_keywords (0.0.5)
|
|
210
235
|
slim (5.2.1)
|
|
211
236
|
temple (~> 0.10.0)
|
|
@@ -214,7 +239,6 @@ GEM
|
|
|
214
239
|
actionpack (>= 3.1)
|
|
215
240
|
railties (>= 3.1)
|
|
216
241
|
slim (>= 3.0, < 6.0, != 5.0.0)
|
|
217
|
-
sorbet-runtime (0.5.11276)
|
|
218
242
|
sprockets (4.2.1)
|
|
219
243
|
concurrent-ruby (~> 1.0)
|
|
220
244
|
rack (>= 2.2.4, < 4)
|
|
@@ -224,16 +248,29 @@ GEM
|
|
|
224
248
|
sprockets (>= 3.0.0)
|
|
225
249
|
sqlite3 (1.7.2)
|
|
226
250
|
mini_portile2 (~> 2.8.0)
|
|
251
|
+
standard (1.35.1)
|
|
252
|
+
language_server-protocol (~> 3.17.0.2)
|
|
253
|
+
lint_roller (~> 1.0)
|
|
254
|
+
rubocop (~> 1.62.0)
|
|
255
|
+
standard-custom (~> 1.0.0)
|
|
256
|
+
standard-performance (~> 1.3)
|
|
257
|
+
standard-custom (1.0.2)
|
|
258
|
+
lint_roller (~> 1.0)
|
|
259
|
+
rubocop (~> 1.50)
|
|
260
|
+
standard-performance (1.3.1)
|
|
261
|
+
lint_roller (~> 1.1)
|
|
262
|
+
rubocop-performance (~> 1.20.2)
|
|
227
263
|
state_machines (0.6.0)
|
|
228
264
|
state_machines-activemodel (0.9.0)
|
|
229
265
|
activemodel (>= 6.0)
|
|
230
266
|
state_machines (>= 0.6.0)
|
|
267
|
+
state_machines-activerecord (0.9.0)
|
|
268
|
+
activerecord (>= 6.0)
|
|
269
|
+
state_machines-activemodel (>= 0.9.0)
|
|
231
270
|
stimulus-rails (1.3.3)
|
|
232
271
|
railties (>= 6.0.0)
|
|
233
272
|
stringio (3.1.0)
|
|
234
|
-
|
|
235
|
-
prettier_print (>= 1.2.0)
|
|
236
|
-
tailwindcss-rails (2.3.0)
|
|
273
|
+
tailwindcss-rails (2.4.0)
|
|
237
274
|
railties (>= 6.0.0)
|
|
238
275
|
temple (0.10.3)
|
|
239
276
|
thor (1.3.1)
|
|
@@ -245,6 +282,11 @@ GEM
|
|
|
245
282
|
railties (>= 6.0.0)
|
|
246
283
|
tzinfo (2.0.6)
|
|
247
284
|
concurrent-ruby (~> 1.0)
|
|
285
|
+
unicode-display_width (2.5.0)
|
|
286
|
+
view_component (3.11.0)
|
|
287
|
+
activesupport (>= 5.2.0, < 8.0)
|
|
288
|
+
concurrent-ruby (~> 1.0)
|
|
289
|
+
method_source (~> 1.0)
|
|
248
290
|
webrick (1.8.1)
|
|
249
291
|
websocket-driver (0.7.6)
|
|
250
292
|
websocket-extensions (>= 0.1.0)
|
|
@@ -256,10 +298,12 @@ PLATFORMS
|
|
|
256
298
|
|
|
257
299
|
DEPENDENCIES
|
|
258
300
|
auxilium (~> 3)!
|
|
259
|
-
|
|
301
|
+
debug (~> 0)
|
|
302
|
+
rubocop (~> 1)
|
|
260
303
|
signum!
|
|
261
304
|
sprockets-rails
|
|
262
305
|
sqlite3
|
|
306
|
+
standard (~> 1)
|
|
263
307
|
|
|
264
308
|
BUNDLED WITH
|
|
265
309
|
2.3.17
|
data/README.md
CHANGED
|
@@ -51,14 +51,14 @@ s = Signum.signal(Current.user, text: "Hello World New", title: "Icon", icon:'fa
|
|
|
51
51
|
|
|
52
52
|
Buttons and links:
|
|
53
53
|
```ruby
|
|
54
|
-
s = Signum.success(Current.user, text: "Hello World New", title: "Link1",
|
|
55
|
-
s = Signum.signal(Current.user, text: "Hello World New", title: "Link2",
|
|
56
|
-
s = Signum.signal(Current.user, text: "Hello World New", title: "Link2",
|
|
54
|
+
s = Signum.success(Current.user, text: "Hello World New", title: "Link1", buttons:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}], links:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"}])
|
|
55
|
+
s = Signum.signal(Current.user, text: "Hello World New", title: "Link2", buttons:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}], links:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"}], icon: 'fa-regular fa-t-rex')
|
|
56
|
+
s = Signum.signal(Current.user, text: "Hello World New", title: "Link2", buttons:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}], links:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"},{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"},{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"}])
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
You can also show a progressbar, this is based on count and total. Setting the count to total completes the progressbar.
|
|
60
60
|
```ruby
|
|
61
|
-
s = Signum.success(Current.user, text: "Hello World New", title: "this is test title",
|
|
61
|
+
s = Signum.success(Current.user, text: "Hello World New", title: "this is test title", buttons:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}], links:[{title: "Google", url:"http://www.google.com"}, {title: "Apple", url: "http://www.apple.com"}, {title: "Amazon", url: "http://www.amazon.com"}], count: 75, total: 150)
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
You can also attach attachments
|
|
@@ -70,6 +70,18 @@ s = Signum.success(Current.user, text: "Hello World New", title: "this is test t
|
|
|
70
70
|
|
|
71
71
|
Signum returns you the signal object. You can update these signals and they will be rebroadcasted again.
|
|
72
72
|
|
|
73
|
+
### Keys
|
|
74
|
+
|
|
75
|
+
Next to using a User (or any other model) another option is to use keys instead. You could signal all users using the following:
|
|
76
|
+
```ruby
|
|
77
|
+
s = Signum.signal(:all, text: "Hello World New", title: "Icon", icon:'fa-regular fa-t-rex')
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
The key all is supported out of the box, any other key needs you to pass it in the Notifications::Component, here we're using the session.id:
|
|
81
|
+
```slim
|
|
82
|
+
= render(Signum::Notifications::Component.new([request.session.id]))
|
|
83
|
+
```
|
|
84
|
+
|
|
73
85
|
## Contributing
|
|
74
86
|
|
|
75
87
|
Contribution directions go here.
|
data/Rakefile
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
begin
|
|
2
|
-
require
|
|
2
|
+
require "bundler/setup"
|
|
3
3
|
rescue LoadError
|
|
4
|
-
puts
|
|
4
|
+
puts "You must `gem install bundler` and `bundle install` to run rake tasks"
|
|
5
5
|
end
|
|
6
6
|
|
|
7
|
-
require
|
|
7
|
+
require "rdoc/task"
|
|
8
8
|
|
|
9
9
|
RDoc::Task.new(:rdoc) do |rdoc|
|
|
10
|
-
rdoc.rdoc_dir =
|
|
11
|
-
rdoc.title
|
|
12
|
-
rdoc.options <<
|
|
13
|
-
rdoc.rdoc_files.include(
|
|
14
|
-
rdoc.rdoc_files.include(
|
|
10
|
+
rdoc.rdoc_dir = "rdoc"
|
|
11
|
+
rdoc.title = "Signum"
|
|
12
|
+
rdoc.options << "--line-numbers"
|
|
13
|
+
rdoc.rdoc_files.include("README.md")
|
|
14
|
+
rdoc.rdoc_files.include("lib/**/*.rb")
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
|
|
18
|
-
load
|
|
18
|
+
load "rails/tasks/engine.rake"
|
|
19
19
|
|
|
20
|
-
load
|
|
20
|
+
load "rails/tasks/statistics.rake"
|
|
21
21
|
|
|
22
|
-
require
|
|
22
|
+
require "bundler/gem_tasks"
|
|
23
23
|
|
|
24
|
-
require
|
|
24
|
+
require "rake/testtask"
|
|
25
25
|
|
|
26
26
|
Rake::TestTask.new(:test) do |t|
|
|
27
|
-
t.libs <<
|
|
28
|
-
t.pattern =
|
|
27
|
+
t.libs << "test"
|
|
28
|
+
t.pattern = "test/**/*_test.rb"
|
|
29
29
|
t.verbose = false
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
task default: :test
|
|
33
33
|
|
|
34
34
|
# Adds the Auxilium semver task
|
|
35
|
-
spec = Gem::Specification.find_by_name
|
|
35
|
+
spec = Gem::Specification.find_by_name "auxilium"
|
|
36
36
|
load "#{spec.gem_dir}/lib/tasks/semver.rake"
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
- if signal.text.present?
|
|
12
12
|
p.signum-notification-body__mb__bc__mc__tx
|
|
13
13
|
= sanitize signal.text
|
|
14
|
-
- if signal.
|
|
14
|
+
- if signal.links.present?
|
|
15
15
|
.signum-notification-body__mb__bc__mc__lkc
|
|
16
|
-
- signal.
|
|
16
|
+
- signal.links.each do | link |
|
|
17
17
|
- next unless link.is_a?(Hash)
|
|
18
|
-
a.signum-notification-body__mb__bc__mc__lkc__lk*{href: link.fetch('url', '#'), target:link.fetch("target", "_blank") }.merge(link.fetch("link_attributes", {}))
|
|
18
|
+
a.signum-notification-body__mb__bc__mc__lkc__lk*{href: link.fetch('url', '#'), target:link.fetch("target", "_blank"), 'data-action': button["close"] ? "click->signum-notification-body#close" : "" }.merge(link.fetch("link_attributes", {}))
|
|
19
19
|
i.fas.fa-link
|
|
20
20
|
=< link["title"] || link["url"] || '(...)'
|
|
21
21
|
- if signal.attachments.attached?
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
| Close
|
|
31
31
|
svg.h-5.w-5[xmlns="http://www.w3.org/2000/svg" viewbox="0 0 20 20" fill="currentColor" aria-hidden="true"]
|
|
32
32
|
path[d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"]
|
|
33
|
-
- if signal.
|
|
33
|
+
- if signal.buttons.present?
|
|
34
34
|
.signum-notification-body__mb__bmc
|
|
35
|
-
- signal.
|
|
35
|
+
- signal.buttons.each do | button |
|
|
36
36
|
- next unless button.is_a?(Hash)
|
|
37
37
|
.signum-notification-body__mb__bmc__bc
|
|
38
|
-
a.signum-notification-body__mb__bmc__bc__b*{href: button.fetch('url', '#'), target:button.fetch("target", "_blank")}.merge(button.fetch("link_attributes", {}))
|
|
38
|
+
a.signum-notification-body__mb__bmc__bc__b*{href: button.fetch('url', '#'), target: button.fetch("target", "_blank"), 'data-action': button["close"] ? "click->signum-notification-body#close" : "" }.merge(button.fetch("link_attributes", {}))
|
|
39
39
|
= button["title"]
|
|
40
40
|
- if signal.count.present?
|
|
41
41
|
- percentage = signal.total.present? ? signal.count.fdiv(signal.total) * 100 : signal.count
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
div.text-left[data-controller="signum-notification-drawer" data-action="mouseover->signum-notification-drawer#show mouseleave->signum-notification-drawer#hide"]
|
|
2
|
-
button.signum-notification-drawer-button
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
div.text-left[data-controller="signum-notification-drawer" data-action="mouseover->signum-notification-drawer#show mouseleave->signum-notification-drawer#hide click->signum-notification-drawer#closeNotifications"]
|
|
2
|
+
button.signum-notification-drawer-button data-action="click->signum-notification-drawer#closeNotifications"
|
|
3
|
+
i class="hidden #{Signum.config.icons[:unread_main]}" data-signum-notification-drawer-target='alertBellIcon'
|
|
4
|
+
i class="#{Signum.config.icons[:read_main]}" data-signum-notification-drawer-target='bellIcon'
|
|
5
|
+
i.hidden.fas.fa-times.cross-icon.text-xs.absolute.top-5.right-15#crossIcon data-signum-notification-drawer-target="crossIcon" data-action="click->signum-notification-drawer#closeNotifications"
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
.signum-notification-drawer-tray.hidden[data-signum-notification-drawer-target="submenu" id="#{Signum.config.drawer_notifications_container_id.call}"]
|
|
8
|
+
= render(Signum::NotificationDrawerItem::Component.with_collection(signals))
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import ApplicationController from "signum/controllers/application_controller"
|
|
2
2
|
|
|
3
3
|
export default class extends ApplicationController {
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
static targets = ["alertBellIcon", "bellIcon", "submenu", "item", "crossIcon"]
|
|
5
6
|
|
|
6
7
|
connect() {
|
|
7
8
|
this.bounditemActivity = this.itemActivity.bind(this)
|
|
@@ -10,6 +11,7 @@ export default class extends ApplicationController {
|
|
|
10
11
|
setTimeout(() => {
|
|
11
12
|
this.manageBellIcon()
|
|
12
13
|
}, 300)
|
|
14
|
+
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
disconnect() {
|
|
@@ -19,6 +21,7 @@ export default class extends ApplicationController {
|
|
|
19
21
|
show(event) {
|
|
20
22
|
if (this.submenuTarget.children.length > 0) {
|
|
21
23
|
this.submenuTarget.classList.remove("hidden")
|
|
24
|
+
this.crossIconTarget.classList.remove("hidden")
|
|
22
25
|
} else {
|
|
23
26
|
this.submenuTarget.classList.add("hidden")
|
|
24
27
|
}
|
|
@@ -26,6 +29,26 @@ export default class extends ApplicationController {
|
|
|
26
29
|
|
|
27
30
|
hide(event) {
|
|
28
31
|
this.submenuTarget.classList.add("hidden")
|
|
32
|
+
this.crossIconTarget.classList.add("hidden")
|
|
33
|
+
if (this.submenuTarget.children.length < 0) {
|
|
34
|
+
this.alertBellIconTarget.classList.add("hidden")
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
closeNotifications(event) {
|
|
39
|
+
fetch("/signal/close_all", {
|
|
40
|
+
method: "GET",
|
|
41
|
+
headers: {
|
|
42
|
+
"Content-Type": "application/json",
|
|
43
|
+
},
|
|
44
|
+
})
|
|
45
|
+
.then((res) => {})
|
|
46
|
+
.catch((err) => {
|
|
47
|
+
console.log(err)
|
|
48
|
+
})
|
|
49
|
+
this.crossIconTarget.style.display = 'none';
|
|
50
|
+
this.bellIconTarget.style.display = 'inline-block'
|
|
51
|
+
this.alertBellIconTarget.style.display = 'none';
|
|
29
52
|
}
|
|
30
53
|
|
|
31
54
|
itemActivity(event) {
|
|
@@ -38,11 +61,11 @@ export default class extends ApplicationController {
|
|
|
38
61
|
|
|
39
62
|
manageBellIcon() {
|
|
40
63
|
if (this.submenuTarget.children.length > 0) {
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
64
|
+
this.alertBellIconTarget.classList.remove("hidden")
|
|
65
|
+
this.bellIconTarget.classList.add("hidden")
|
|
43
66
|
} else {
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
67
|
+
this.alertBellIconTarget.classList.add("hidden")
|
|
68
|
+
this.bellIconTarget.classList.remove("hidden")
|
|
46
69
|
}
|
|
47
70
|
}
|
|
48
71
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
= helpers.turbo_stream_from :signals
|
|
2
2
|
|
|
3
3
|
.pointer-events-none.fixed.inset-0.flex.items-end.px-2.py-6.sm:items-start.sm:p-6.z-10 data-turbo-permanent="true" id="signum_notifications"
|
|
4
|
-
#notifications_all.flex.w-full.flex-col.items-center.space-y-2.sm:items-end
|
|
4
|
+
/ #notifications_all.flex.w-full.flex-col.items-center.space-y-2.sm:items-end
|
|
5
5
|
div.flex.w-full.flex-col.items-center.space-y-2.sm:items-end[id="#{Signum.config.balloon_notifications_container_id.call}"]
|
|
6
|
+
div.flex.w-full.flex-col.items-center.space-y-2.sm:items-end[id="notifications_all"]
|
|
7
|
+
- keys&.each do |key|
|
|
8
|
+
div.flex.w-full.flex-col.items-center.space-y-2.sm:items-end[id="notifications_#{key}"]
|
|
@@ -3,11 +3,19 @@ module Signum
|
|
|
3
3
|
def show
|
|
4
4
|
signal = Signum::Signal.find(signal_params[:id])
|
|
5
5
|
signal.show! if signal.broadcasted?
|
|
6
|
+
head :ok
|
|
6
7
|
end
|
|
7
8
|
|
|
8
9
|
def close
|
|
9
10
|
signal = Signum::Signal.find(signal_params[:id])
|
|
10
11
|
signal.close!
|
|
12
|
+
head :ok
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def close_all
|
|
16
|
+
signals = current_user.signals.where.not(state: "closed")
|
|
17
|
+
signals.each(&:close!)
|
|
18
|
+
head :ok
|
|
11
19
|
end
|
|
12
20
|
|
|
13
21
|
private
|
data/app/models/signum/signal.rb
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
module Signum
|
|
2
2
|
class Signal < ApplicationRecord
|
|
3
|
-
belongs_to :signalable, polymorphic: true
|
|
3
|
+
belongs_to :signalable, polymorphic: true, optional: true
|
|
4
4
|
belongs_to :subjectable, polymorphic: true, optional: true
|
|
5
5
|
|
|
6
|
+
validates :signalable, presence: true, if: -> { key.blank? }
|
|
7
|
+
|
|
6
8
|
has_many_attached :attachments
|
|
7
9
|
|
|
8
10
|
after_create_commit :broadcast_create
|
|
@@ -11,11 +13,11 @@ module Signum
|
|
|
11
13
|
def broadcast_create
|
|
12
14
|
broadcast! if can_broadcast?
|
|
13
15
|
|
|
14
|
-
broadcast_prepend_to(:signals, target: Signum.config.balloon_notifications_container_id.call(signalable, id),
|
|
15
|
-
|
|
16
|
+
broadcast_prepend_to(:signals, target: Signum.config.balloon_notifications_container_id.call(key || signalable, id),
|
|
17
|
+
html: ApplicationController.render(Signum::Notification::Component.new(self)))
|
|
16
18
|
|
|
17
|
-
broadcast_prepend_to(:signals, target: Signum.config.drawer_notifications_container_id.call(signalable, id),
|
|
18
|
-
|
|
19
|
+
broadcast_prepend_to(:signals, target: Signum.config.drawer_notifications_container_id.call(key || signalable, id),
|
|
20
|
+
html: ApplicationController.render(Signum::NotificationDrawerItem::Component.new(signal: self)))
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
def broadcast_update
|
|
@@ -26,10 +28,10 @@ module Signum
|
|
|
26
28
|
return
|
|
27
29
|
end
|
|
28
30
|
|
|
29
|
-
broadcast_replace_to(:signals, target:
|
|
30
|
-
|
|
31
|
-
broadcast_replace_to(:signals, target:
|
|
32
|
-
|
|
31
|
+
broadcast_replace_to(:signals, target: Signum.config.balloon_notifications_container_id.call(key || signalable, id),
|
|
32
|
+
html: ApplicationController.render(Signum::NotificationBody::Component.new(self, {type: :balloon, timeout: 5})))
|
|
33
|
+
broadcast_replace_to(:signals, target: Signum.config.drawer_notifications_container_id.call(key || signalable, id),
|
|
34
|
+
html: ApplicationController.render(Signum::NotificationBody::Component.new(self, {type: :drawer_item, timeout: 5})))
|
|
33
35
|
end
|
|
34
36
|
|
|
35
37
|
validates :text, presence: true
|
data/config/routes.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Signum::Engine.routes.draw do
|
|
2
|
-
post
|
|
3
|
-
post
|
|
4
|
-
|
|
2
|
+
post "signal/show", to: "signal#show"
|
|
3
|
+
post "signal/close", to: "signal#close"
|
|
4
|
+
get "signal/close_all", to: "signal#close_all"
|
|
5
|
+
post "signal/open_stickies", to: "signal#open_stickies"
|
|
5
6
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
class CreateSignumSignals < ActiveRecord::Migration[6.0]
|
|
2
2
|
def change
|
|
3
3
|
create_table :signum_signals, id: :uuid do |t|
|
|
4
|
-
t.string :state, default:
|
|
4
|
+
t.string :state, default: "pending"
|
|
5
5
|
t.references :signalable, polymorphic: true, optional: false, null: false, type: :uuid
|
|
6
6
|
|
|
7
|
-
t.string :kind, default:
|
|
7
|
+
t.string :kind, default: "notice"
|
|
8
8
|
t.boolean :sticky
|
|
9
9
|
t.string :icon
|
|
10
10
|
t.string :title
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class AddKeyToSignal < ActiveRecord::Migration[7.1]
|
|
2
|
+
def change
|
|
3
|
+
add_column :signum_signals, :key, :string
|
|
4
|
+
add_index :signum_signals, :key
|
|
5
|
+
# t.references :signalable, polymorphic: true, optional: false, null: false, type: :uuid
|
|
6
|
+
# t.string "signalable_type", null: false
|
|
7
|
+
# t.uuid "signalable_id", null: false
|
|
8
|
+
change_column_null :signum_signals, :signalable_type, true
|
|
9
|
+
change_column_null :signum_signals, :signalable_id, true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def down
|
|
13
|
+
remove_column :signum_signals, :key, :string
|
|
14
|
+
remove_index :signum_signals, :key
|
|
15
|
+
# t.references :signalable, polymorphic: true, optional: false, null: false, type: :uuid
|
|
16
|
+
# t.string "signalable_type", null: false
|
|
17
|
+
# t.uuid "signalable_id", null: false
|
|
18
|
+
change_column_null :signum_signals, :signalable_type, false
|
|
19
|
+
change_column_null :signum_signals, :signalable_id, false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "rails/generators/base"
|
|
2
2
|
|
|
3
3
|
module Signum
|
|
4
4
|
module Generators
|
|
5
5
|
class TailwindConfigGenerator < Rails::Generators::Base
|
|
6
|
-
source_root File.expand_path(
|
|
7
|
-
desc
|
|
6
|
+
source_root File.expand_path("../templates", __dir__)
|
|
7
|
+
desc "Configures tailwind.config.js and application.tailwindcss.css"
|
|
8
8
|
|
|
9
9
|
def add_content_to_tailwind_config
|
|
10
10
|
inject_into_file "config/tailwind.config.js", before: "],\n theme: {" do
|
|
@@ -6,7 +6,7 @@ module Signum
|
|
|
6
6
|
|
|
7
7
|
class_methods do
|
|
8
8
|
def signalable
|
|
9
|
-
has_many :signals, as: :signalable, class_name:
|
|
9
|
+
has_many :signals, as: :signalable, class_name: "Signum::Signal"
|
|
10
10
|
|
|
11
11
|
send :include, Signum::ActiveRecordHelpers::InstanceMethods
|
|
12
12
|
extend(Signum::ActiveRecordHelpers::ClassMethods)
|
|
@@ -18,19 +18,19 @@ module Signum
|
|
|
18
18
|
|
|
19
19
|
module InstanceMethods
|
|
20
20
|
def online!
|
|
21
|
-
update(presence:
|
|
21
|
+
update(presence: "online")
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def offline!
|
|
25
|
-
update(presence:
|
|
25
|
+
update(presence: "offline")
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def appeared!
|
|
29
|
-
update(presence:
|
|
29
|
+
update(presence: "appeared")
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def away!
|
|
33
|
-
update(presence:
|
|
33
|
+
update(presence: "away")
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
end
|
data/lib/signum/configuration.rb
CHANGED
|
@@ -16,7 +16,7 @@ module Signum
|
|
|
16
16
|
|
|
17
17
|
def set_defaults!
|
|
18
18
|
self.class.schema.each do |name, default|
|
|
19
|
-
instance_variable_set("@#{name}", default)
|
|
19
|
+
instance_variable_set(:"@#{name}", default)
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
@@ -29,21 +29,21 @@ module Signum
|
|
|
29
29
|
include Options
|
|
30
30
|
|
|
31
31
|
option :logger, default: Rails.logger
|
|
32
|
-
option :user_model_name, default:
|
|
32
|
+
option :user_model_name, default: "User"
|
|
33
33
|
option :hide_after, default: 3000
|
|
34
|
-
option :base_controller, default:
|
|
35
|
-
option :base_service, default:
|
|
36
|
-
option :base_service_context, default:
|
|
34
|
+
option :base_controller, default: "::ApplicationController"
|
|
35
|
+
option :base_service, default: "::ApplicationService"
|
|
36
|
+
option :base_service_context, default: "::ApplicationContext"
|
|
37
37
|
option :current_user, default: -> {}
|
|
38
38
|
option :drawer_notifications_container_id, default: ->(signalable = nil, id = nil) {}
|
|
39
39
|
option :balloon_notifications_container_id, default: ->(signalable = nil, id = nil) {}
|
|
40
40
|
option :icons,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
default: {info: "fa-solid fa-circle-info fa-lg",
|
|
42
|
+
error: "fa-solid fa-square-xmark fa-lg",
|
|
43
|
+
success: "fa-solid fa-circle-check fa-lg",
|
|
44
|
+
warning: "fa-solid fa-triangle-exclamation fa-lg",
|
|
45
|
+
unread_main: "fa-solid fa-bell-ring",
|
|
46
|
+
read_main: "fa-solid fa-bell"}
|
|
47
47
|
|
|
48
48
|
def initialize
|
|
49
49
|
set_defaults!
|
|
@@ -60,7 +60,7 @@ module Signum
|
|
|
60
60
|
def configure
|
|
61
61
|
yield(config)
|
|
62
62
|
end
|
|
63
|
-
|
|
63
|
+
alias_method :setup, :configure
|
|
64
64
|
|
|
65
65
|
def reset_config!
|
|
66
66
|
@config = Configuration.new
|
data/lib/signum/engine.rb
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require "slim"
|
|
2
|
+
require "tailwindcss-rails"
|
|
3
3
|
require "importmap-rails"
|
|
4
4
|
require "turbo-rails"
|
|
5
5
|
require "stimulus-rails"
|
|
6
|
+
require "state_machines-activerecord"
|
|
7
|
+
require "view_component"
|
|
6
8
|
|
|
7
9
|
module Signum
|
|
8
10
|
class Engine < ::Rails::Engine
|
|
9
11
|
isolate_namespace Signum
|
|
10
12
|
|
|
11
|
-
initializer
|
|
13
|
+
initializer "signum.assets" do |app|
|
|
12
14
|
app.config.assets.paths << root.join("app/javascript")
|
|
13
15
|
app.config.assets.paths << root.join("app/components")
|
|
14
16
|
app.config.assets.paths << root.join("vendor/javascript")
|
|
15
17
|
app.config.assets.precompile += %w[signum_manifest]
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
initializer
|
|
20
|
+
initializer "signum.importmap", before: "importmap" do |app|
|
|
19
21
|
app.config.importmap.paths << root.join("config/importmap.rb")
|
|
20
22
|
app.config.importmap.cache_sweepers << root.join("app/javascript")
|
|
21
23
|
app.config.importmap.cache_sweepers << root.join("app/components")
|
data/lib/signum/version.rb
CHANGED
data/lib/signum.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
1
|
+
require "signum/engine"
|
|
2
|
+
require "signum/active_record_helpers"
|
|
3
|
+
require "signum/configuration"
|
|
4
4
|
|
|
5
5
|
module Signum
|
|
6
6
|
class Error < StandardError
|
|
@@ -30,6 +30,8 @@ module Signum
|
|
|
30
30
|
elsif signalable_receiver.respond_to?(:each)
|
|
31
31
|
signalable_receiver.each { |signalable| signal(signalable, options) }
|
|
32
32
|
nil
|
|
33
|
+
else
|
|
34
|
+
Signal.create!(options.merge(key: signalable_receiver.to_s))
|
|
33
35
|
end
|
|
34
36
|
end
|
|
35
37
|
|
|
@@ -37,28 +39,28 @@ module Signum
|
|
|
37
39
|
def info(signalable, options)
|
|
38
40
|
return unless signalable
|
|
39
41
|
|
|
40
|
-
signal(signalable, options.merge(kind:
|
|
42
|
+
signal(signalable, options.merge(kind: "info", icon: Signum.config.icons[:info]))
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
# Signal about an error
|
|
44
46
|
def error(signalable, options)
|
|
45
47
|
return unless signalable
|
|
46
48
|
|
|
47
|
-
signal(signalable, options.merge(kind:
|
|
49
|
+
signal(signalable, options.merge(kind: "error", icon: Signum.config.icons[:error]))
|
|
48
50
|
end
|
|
49
51
|
|
|
50
52
|
# Signal about something that went sucessfully
|
|
51
53
|
def success(signalable, options)
|
|
52
54
|
return unless signalable
|
|
53
55
|
|
|
54
|
-
signal(signalable, options.merge(kind:
|
|
56
|
+
signal(signalable, options.merge(kind: "success", icon: Signum.config.icons[:success]))
|
|
55
57
|
end
|
|
56
58
|
|
|
57
59
|
# Signal about something that could go wrong
|
|
58
60
|
def warning(signalable, options)
|
|
59
61
|
return unless signalable
|
|
60
62
|
|
|
61
|
-
signal(signalable, options.merge(kind:
|
|
63
|
+
signal(signalable, options.merge(kind: "warning", icon: Signum.config.icons[:warning]))
|
|
62
64
|
end
|
|
63
65
|
end
|
|
64
66
|
|
data/lib/tasks/signum_tasks.rake
CHANGED
data/signum.gemspec
CHANGED
|
@@ -1,33 +1,37 @@
|
|
|
1
|
-
$:.push File.expand_path(
|
|
1
|
+
$:.push File.expand_path("lib", __dir__)
|
|
2
2
|
|
|
3
3
|
# Maintain your gem's version:
|
|
4
|
-
require
|
|
4
|
+
require "signum/version"
|
|
5
5
|
|
|
6
6
|
# Describe your gem and declare its dependencies:
|
|
7
7
|
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name
|
|
9
|
-
spec.version
|
|
10
|
-
spec.authors
|
|
11
|
-
spec.email
|
|
12
|
-
spec.homepage
|
|
13
|
-
spec.summary
|
|
14
|
-
spec.description =
|
|
15
|
-
spec.license
|
|
8
|
+
spec.name = "signum"
|
|
9
|
+
spec.version = Signum::VERSION
|
|
10
|
+
spec.authors = ["Tom de Grunt"]
|
|
11
|
+
spec.email = ["tom@degrunt.nl"]
|
|
12
|
+
spec.homepage = "https://github.com/entdec/signum"
|
|
13
|
+
spec.summary = "Replacement for flash messages, also from background jobs"
|
|
14
|
+
spec.description = "Rails engine with replacement for flash messages, Signum allows for messages from background jobs."
|
|
15
|
+
spec.license = "MIT"
|
|
16
16
|
|
|
17
17
|
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
|
18
18
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
spec.add_dependency
|
|
22
|
-
spec.add_dependency
|
|
23
|
-
spec.add_dependency
|
|
21
|
+
spec.add_dependency "pg"
|
|
22
|
+
spec.add_dependency "rails", "> 6.0"
|
|
23
|
+
spec.add_dependency "state_machines-activerecord"
|
|
24
24
|
|
|
25
|
-
spec.add_development_dependency
|
|
26
|
-
spec.add_development_dependency
|
|
25
|
+
spec.add_development_dependency "auxilium", "~> 3"
|
|
26
|
+
spec.add_development_dependency "sqlite3"
|
|
27
27
|
|
|
28
28
|
spec.add_dependency "slim-rails", "~> 3"
|
|
29
|
-
spec.add_dependency
|
|
30
|
-
spec.add_dependency
|
|
31
|
-
spec.add_dependency
|
|
32
|
-
spec.add_dependency
|
|
29
|
+
spec.add_dependency "tailwindcss-rails"
|
|
30
|
+
spec.add_dependency "importmap-rails"
|
|
31
|
+
spec.add_dependency "turbo-rails"
|
|
32
|
+
spec.add_dependency "stimulus-rails"
|
|
33
|
+
spec.add_dependency "view_component"
|
|
34
|
+
spec.add_development_dependency "debug", "~> 0"
|
|
35
|
+
spec.add_development_dependency "rubocop", "~> 1"
|
|
36
|
+
spec.add_development_dependency "standard", "~> 1"
|
|
33
37
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: signum
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tom de Grunt
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-04-
|
|
11
|
+
date: 2024-04-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: pg
|
|
@@ -150,6 +150,62 @@ dependencies:
|
|
|
150
150
|
- - ">="
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
152
|
version: '0'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: view_component
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - ">="
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '0'
|
|
160
|
+
type: :runtime
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - ">="
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0'
|
|
167
|
+
- !ruby/object:Gem::Dependency
|
|
168
|
+
name: debug
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - "~>"
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
174
|
+
type: :development
|
|
175
|
+
prerelease: false
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - "~>"
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '0'
|
|
181
|
+
- !ruby/object:Gem::Dependency
|
|
182
|
+
name: rubocop
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - "~>"
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '1'
|
|
188
|
+
type: :development
|
|
189
|
+
prerelease: false
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - "~>"
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: '1'
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: standard
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - "~>"
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: '1'
|
|
202
|
+
type: :development
|
|
203
|
+
prerelease: false
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - "~>"
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '1'
|
|
153
209
|
description: Rails engine with replacement for flash messages, Signum allows for messages
|
|
154
210
|
from background jobs.
|
|
155
211
|
email:
|
|
@@ -160,6 +216,7 @@ extra_rdoc_files: []
|
|
|
160
216
|
files:
|
|
161
217
|
- ".github/workflows/gem-push.yml"
|
|
162
218
|
- ".gitignore"
|
|
219
|
+
- ".rubocop.yml"
|
|
163
220
|
- Gemfile
|
|
164
221
|
- Gemfile.lock
|
|
165
222
|
- MIT-LICENSE
|
|
@@ -204,6 +261,8 @@ files:
|
|
|
204
261
|
- db/migrate/20201125175035_create_signum_signals.rb
|
|
205
262
|
- db/migrate/20230317123138_add_columns_to_signum_signal.rb
|
|
206
263
|
- db/migrate/20231218095011_add_subject_to_signals.rb
|
|
264
|
+
- db/migrate/20240405112807_add_links_and_buttons_to_signals.rb
|
|
265
|
+
- db/migrate/20240410100722_add_key_to_signal.rb
|
|
207
266
|
- lib/generators/signum/install_generator.rb
|
|
208
267
|
- lib/generators/signum/tailwind_config_generator.rb
|
|
209
268
|
- lib/generators/signum/templates/config/initializers/signum.rb
|
|
@@ -216,7 +275,6 @@ files:
|
|
|
216
275
|
- package.json
|
|
217
276
|
- signum.gemspec
|
|
218
277
|
- vendor/javascript/@hotwired--stimulus.js
|
|
219
|
-
- webpack.config.js
|
|
220
278
|
- yarn.lock
|
|
221
279
|
homepage: https://github.com/entdec/signum
|
|
222
280
|
licenses:
|
data/webpack.config.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const CleanWebpackPlugin = require('clean-webpack-plugin')
|
|
3
|
-
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
4
|
-
|
|
5
|
-
module.exports = {
|
|
6
|
-
entry: './frontend/src/signum.js',
|
|
7
|
-
output: {
|
|
8
|
-
path: __dirname + '/frontend/dist',
|
|
9
|
-
filename: 'signum.js',
|
|
10
|
-
library: 'Signum',
|
|
11
|
-
libraryTarget: 'umd'
|
|
12
|
-
},
|
|
13
|
-
plugins: [
|
|
14
|
-
// new CleanWebpackPlugin(['frontend/dist'], {}),
|
|
15
|
-
new MiniCssExtractPlugin({
|
|
16
|
-
filename: 'signum.css'
|
|
17
|
-
})
|
|
18
|
-
],
|
|
19
|
-
module: {
|
|
20
|
-
rules: [
|
|
21
|
-
{
|
|
22
|
-
test: /\.js$/,
|
|
23
|
-
exclude: /(node_modules|bower_components)/,
|
|
24
|
-
use: {
|
|
25
|
-
loader: 'babel-loader',
|
|
26
|
-
options: {
|
|
27
|
-
presets: ['env'],
|
|
28
|
-
plugins: ["transform-class-properties"]
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
test: /\.(|ttf|eot|svg|woff2?)(\?[\s\S]+)?$/,
|
|
34
|
-
use: 'file-loader',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
test: /\.(sass|scss|css)$/,
|
|
38
|
-
use: [
|
|
39
|
-
{
|
|
40
|
-
loader: MiniCssExtractPlugin.loader,
|
|
41
|
-
},
|
|
42
|
-
'css-loader?sourceMap=false',
|
|
43
|
-
'sass-loader?sourceMap=false'
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
},
|
|
48
|
-
resolve: {
|
|
49
|
-
modules: [path.resolve('./node_modules'), path.resolve('./src')],
|
|
50
|
-
extensions: ['.json', '.js']
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
// const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
|
57
|
-
// const path = require('path');
|
|
58
|
-
|
|
59
|
-
// const devMode = process.env.NODE_ENV !== 'production'
|
|
60
|
-
|
|
61
|
-
// module.exports = {
|
|
62
|
-
// mode: devMode ? "development" : "production",
|
|
63
|
-
// entry: {
|
|
64
|
-
// signum: ['./frontend/src/signum.js']
|
|
65
|
-
// },
|
|
66
|
-
// output: {
|
|
67
|
-
// path: __dirname + '/frontend/dist',
|
|
68
|
-
// filename: '[name].js',
|
|
69
|
-
// },
|
|
70
|
-
|
|
71
|
-
// module: {
|
|
72
|
-
// rules: [
|
|
73
|
-
// {
|
|
74
|
-
// test: /\.(c|sa|sc)ss$/,
|
|
75
|
-
// exclude: /(node_modules)/,
|
|
76
|
-
// // Use the following loaders from right-to-left, so it will
|
|
77
|
-
// // use sass-loader first and ending with MiniCssExtractPlugin
|
|
78
|
-
// use: [
|
|
79
|
-
// {
|
|
80
|
-
// // Extracts the CSS into a separate file and uses the
|
|
81
|
-
// // defined configurations in the 'plugins' section
|
|
82
|
-
// loader: MiniCssExtractPlugin.loader
|
|
83
|
-
// },
|
|
84
|
-
// {
|
|
85
|
-
// // Interprets CSS
|
|
86
|
-
// loader: "css-loader",
|
|
87
|
-
// options: {
|
|
88
|
-
// importLoaders: 2
|
|
89
|
-
// }
|
|
90
|
-
// },
|
|
91
|
-
// {
|
|
92
|
-
// // Adds support for Sass files, if using Less, then
|
|
93
|
-
// // use the less-loader
|
|
94
|
-
// loader: "sass-loader"
|
|
95
|
-
// }
|
|
96
|
-
// ]
|
|
97
|
-
// },
|
|
98
|
-
// {
|
|
99
|
-
// test: /\.js$/,
|
|
100
|
-
// exclude: /(node_moduldes)/,
|
|
101
|
-
// use: {
|
|
102
|
-
// loader: 'babel-loader',
|
|
103
|
-
// options: {
|
|
104
|
-
// presets: ['@babel/preset-env']
|
|
105
|
-
// }
|
|
106
|
-
// }
|
|
107
|
-
// },
|
|
108
|
-
// {
|
|
109
|
-
// test: /\.(ttf|eot|svg|woff2?)(\?[\s\S]+)?$/,
|
|
110
|
-
// use: 'file-loader',
|
|
111
|
-
// },
|
|
112
|
-
// ]
|
|
113
|
-
// },
|
|
114
|
-
// plugins: [
|
|
115
|
-
// // Configuration options for MiniCssExtractPlugin. Here I'm only
|
|
116
|
-
// // indicating what the CSS output file name should be and
|
|
117
|
-
// // the location
|
|
118
|
-
// new MiniCssExtractPlugin({
|
|
119
|
-
// filename: devMode ? "[name].css" : "[name].min.css"
|
|
120
|
-
// })
|
|
121
|
-
// ],
|
|
122
|
-
// resolve: {
|
|
123
|
-
// modules: [path.resolve('./node_modules'), path.resolve('./src')],
|
|
124
|
-
// extensions: ['.json', '.js']
|
|
125
|
-
// }
|
|
126
|
-
// }
|