signum 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80bcbf3b5c508331a717b1f9b17b7d14b06c88612f54635e45f87643453ddf5b
4
- data.tar.gz: 5e44b69680cd000e0a048d595aa0539114b3fb1b9424a9b5812eff94d41d80fa
3
+ metadata.gz: 65ddec675d519cebd682d685b2da8fece2db0b66d4e3dddaa130eb292f2b6e89
4
+ data.tar.gz: c02695a0e0b5978ff7e5b1595dcabcb034aace639682046899beb3fb34ec72a2
5
5
  SHA512:
6
- metadata.gz: d698d607336e153b25d2dfbe5717bbdeb7338a88c77049dbfa7c40e24b3cbcdd2918baedb902e360b47b67a0bed9827b73bc9604562263c27de95279d89c9571
7
- data.tar.gz: a94a9bea7fb4242fd2f9fd312ffbf2730bd4f8479244828ce977f39b54ea784c7b4048e0c66b6a04a133a1665a590d633964ade726d4af7b73414f3618bd2122
6
+ metadata.gz: 96b4491e10ccc698f14b52a0b11a94476fc3cd4652e798a1b1b3e782227f1d636d8c676c4485e24bed6d35bbd991f42c5c74bfbe6b17bed8896e613800aea8bf
7
+ data.tar.gz: 0f826ed2651e4fce6a779fbefda95b6496b74416938deb2fdc271762ead8af55de799e6aa5abd0036912e936f90ad769579363d7dd126c87f8d574852c855275
data/Gemfile CHANGED
@@ -19,5 +19,4 @@ gemspec
19
19
 
20
20
  gem 'auxilium', '~> 3', entdec: 'auxilium'
21
21
 
22
- gem "ruby-lsp", "~> 0.3.2", :group => :development
23
- gem "sprockets-rails"
22
+ gem "sprockets-rails"
data/Gemfile.lock CHANGED
@@ -13,12 +13,12 @@ GIT
13
13
  PATH
14
14
  remote: .
15
15
  specs:
16
- signum (0.3.18)
16
+ signum (0.5.1)
17
17
  importmap-rails
18
18
  pg
19
19
  rails (> 6.0)
20
20
  slim-rails (~> 3)
21
- state_machines-activemodel
21
+ state_machines-activerecord
22
22
  stimulus-rails
23
23
  tailwindcss-rails
24
24
  turbo-rails
@@ -122,7 +122,6 @@ GEM
122
122
  irb (1.11.2)
123
123
  rdoc
124
124
  reline (>= 0.4.2)
125
- language_server-protocol (3.17.0.3)
126
125
  loofah (2.22.0)
127
126
  crass (~> 1.0.2)
128
127
  nokogiri (>= 1.12.0)
@@ -143,14 +142,13 @@ GEM
143
142
  net-protocol
144
143
  net-protocol (0.2.2)
145
144
  timeout
146
- net-smtp (0.4.0.1)
145
+ net-smtp (0.5.0)
147
146
  net-protocol
148
- nio4r (2.7.0)
147
+ nio4r (2.7.1)
149
148
  nokogiri (1.16.2)
150
149
  mini_portile2 (~> 2.8.2)
151
150
  racc (~> 1.4)
152
151
  pg (1.5.6)
153
- prettier_print (1.2.1)
154
152
  psych (5.1.2)
155
153
  stringio
156
154
  pundit (2.3.1)
@@ -202,10 +200,6 @@ GEM
202
200
  actionpack (>= 5.2)
203
201
  railties (>= 5.2)
204
202
  rolify (6.0.1)
205
- ruby-lsp (0.3.8)
206
- language_server-protocol (~> 3.17.0)
207
- sorbet-runtime
208
- syntax_tree (>= 5.0.0, < 6)
209
203
  ruby2_keywords (0.0.5)
210
204
  slim (5.2.1)
211
205
  temple (~> 0.10.0)
@@ -214,7 +208,6 @@ GEM
214
208
  actionpack (>= 3.1)
215
209
  railties (>= 3.1)
216
210
  slim (>= 3.0, < 6.0, != 5.0.0)
217
- sorbet-runtime (0.5.11276)
218
211
  sprockets (4.2.1)
219
212
  concurrent-ruby (~> 1.0)
220
213
  rack (>= 2.2.4, < 4)
@@ -228,11 +221,12 @@ GEM
228
221
  state_machines-activemodel (0.9.0)
229
222
  activemodel (>= 6.0)
230
223
  state_machines (>= 0.6.0)
224
+ state_machines-activerecord (0.9.0)
225
+ activerecord (>= 6.0)
226
+ state_machines-activemodel (>= 0.9.0)
231
227
  stimulus-rails (1.3.3)
232
228
  railties (>= 6.0.0)
233
229
  stringio (3.1.0)
234
- syntax_tree (5.3.0)
235
- prettier_print (>= 1.2.0)
236
230
  tailwindcss-rails (2.3.0)
237
231
  railties (>= 6.0.0)
238
232
  temple (0.10.3)
@@ -256,7 +250,6 @@ PLATFORMS
256
250
 
257
251
  DEPENDENCIES
258
252
  auxilium (~> 3)!
259
- ruby-lsp (~> 0.3.2)
260
253
  signum!
261
254
  sprockets-rails
262
255
  sqlite3
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", metadata: {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", metadata: {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", metadata: {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"}]})
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", metadata: {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)
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
@@ -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.metadata.present? && signal.metadata["links"].present?
14
+ - if signal.links.present?
15
15
  .signum-notification-body__mb__bc__mc__lkc
16
- - signal.metadata["links"].each do | link |
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.metadata.present? && signal.metadata["buttons"].present?
33
+ - if signal.buttons.present?
34
34
  .signum-notification-body__mb__bmc
35
- - signal.metadata["buttons"].each do | button |
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"]
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
2
  button.signum-notification-drawer-button
3
- = "<i class='hidden #{Signum.config.icons[:unread_main]}' data-signum-notification-drawer-target='alertbellicon'></i>".html_safe
4
- = "<i class='#{Signum.config.icons[:read_main]}' data-signum-notification-drawer-target='bellicon'></i>".html_safe
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"
5
6
 
6
7
  .signum-notification-drawer-tray.hidden[data-signum-notification-drawer-target="submenu" id="#{Signum.config.drawer_notifications_container_id.call}"]
7
- = render(Signum::NotificationDrawerItem::Component.with_collection(signals))
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
- static targets = ["alertbellicon", "bellicon", "submenu", "item"]
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,11 @@ 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
+ if (event.altKey) {
25
+ this.crossiconTarget.style.display = 'inline-block'
26
+ } else {
27
+ this.crossiconTarget.style.display = 'none'
28
+ }
22
29
  } else {
23
30
  this.submenuTarget.classList.add("hidden")
24
31
  }
@@ -26,6 +33,31 @@ export default class extends ApplicationController {
26
33
 
27
34
  hide(event) {
28
35
  this.submenuTarget.classList.add("hidden")
36
+ this.crossiconTarget.style.display = 'none'
37
+ if (this.submenuTarget.children.length < 0) {
38
+ this.alertbelliconTarget.classList.add("hidden")
39
+ }
40
+ if (event.altKey) {
41
+ this.crossiconTarget.style.display = 'none'
42
+ }
43
+ }
44
+
45
+ closeNotifications(event) {
46
+ if (event.altKey) {
47
+ fetch("/signal/close_all", {
48
+ method: "GET",
49
+ headers: {
50
+ "Content-Type": "application/json",
51
+ },
52
+ })
53
+ .then((res) => {})
54
+ .catch((err) => {
55
+ console.log(err)
56
+ })
57
+ this.crossiconTarget.style.display = 'none';
58
+ this.belliconTarget.style.display = 'inline-block'
59
+ this.alertbelliconTarget.style.display = 'none';
60
+ }
29
61
  }
30
62
 
31
63
  itemActivity(event) {
@@ -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/config/routes.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  Signum::Engine.routes.draw do
2
2
  post 'signal/show', to: 'signal#show'
3
3
  post 'signal/close', to: 'signal#close'
4
+ get 'signal/close_all', to: 'signal#close_all'
4
5
  post 'signal/open_stickies', to: 'signal#open_stickies'
5
6
  end
@@ -0,0 +1,6 @@
1
+ class AddLinksAndButtonsToSignals < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :signum_signals, :links, :jsonb
4
+ add_column :signum_signals, :buttons, :jsonb
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Signum
4
- VERSION = "0.5.1"
4
+ VERSION = "0.6.0"
5
5
  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.5.1
4
+ version: 0.6.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-04 00:00:00.000000000 Z
11
+ date: 2024-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -204,6 +204,7 @@ files:
204
204
  - db/migrate/20201125175035_create_signum_signals.rb
205
205
  - db/migrate/20230317123138_add_columns_to_signum_signal.rb
206
206
  - db/migrate/20231218095011_add_subject_to_signals.rb
207
+ - db/migrate/20240405112807_add_links_and_buttons_to_signals.rb
207
208
  - lib/generators/signum/install_generator.rb
208
209
  - lib/generators/signum/tailwind_config_generator.rb
209
210
  - lib/generators/signum/templates/config/initializers/signum.rb
@@ -216,7 +217,6 @@ files:
216
217
  - package.json
217
218
  - signum.gemspec
218
219
  - vendor/javascript/@hotwired--stimulus.js
219
- - webpack.config.js
220
220
  - yarn.lock
221
221
  homepage: https://github.com/entdec/signum
222
222
  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
- // }