signum 0.5.0 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 24b0e2cdc6b8936ceb9c1cb718ec2e78c53ef50fbb7cbad8b174b92f9b500a64
4
- data.tar.gz: aac0042cb09a5df30ecc681a6b51da1427fd3120a20a11a8d8fce4ed39ccaeb7
3
+ metadata.gz: 65ddec675d519cebd682d685b2da8fece2db0b66d4e3dddaa130eb292f2b6e89
4
+ data.tar.gz: c02695a0e0b5978ff7e5b1595dcabcb034aace639682046899beb3fb34ec72a2
5
5
  SHA512:
6
- metadata.gz: 42b34828f5bea2a46a40c52be15f5fa9bebd6904110820e301dded3fe3f8fcc065941e505c441ea60d43babe3e894655c504d6a4060eb130d373769cd3c7042b
7
- data.tar.gz: 738bed62ed28d5ca6ae5f6013354374462f898f1a925dec27695a955bc5945e5e89fb2e90822f04d2fdecafb6c0a210bda71c43ce34615e5b99e17a3267cb7c0
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,12 +11,13 @@
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 |
17
- a.signum-notification-body__mb__bc__mc__lkc__lk href="#{link["url"]}" target=link.fetch("target", "_blank") *link["link_attributes"]
16
+ - signal.links.each do | link |
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"), 'data-action': button["close"] ? "click->signum-notification-body#close" : "" }.merge(link.fetch("link_attributes", {}))
18
19
  i.fas.fa-link
19
- =< link["title"]
20
+ =< link["title"] || link["url"] || '(...)'
20
21
  - if signal.attachments.attached?
21
22
  .signum-notification-body__mb__bc__mc__attc
22
23
  - signal.attachments.each do | attachment |
@@ -29,13 +30,14 @@
29
30
  | Close
30
31
  svg.h-5.w-5[xmlns="http://www.w3.org/2000/svg" viewbox="0 0 20 20" fill="currentColor" aria-hidden="true"]
31
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"]
32
- - if signal.metadata.present? && signal.metadata["buttons"].present?
33
+ - if signal.buttons.present?
33
34
  .signum-notification-body__mb__bmc
34
- - signal.metadata["buttons"].each do | button |
35
+ - signal.buttons.each do | button |
36
+ - next unless button.is_a?(Hash)
35
37
  .signum-notification-body__mb__bmc__bc
36
- a.signum-notification-body__mb__bmc__bc__b href="#{button["url"]}" target=button.fetch("target", "_blank") *button["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", {}))
37
39
  = button["title"]
38
40
  - if signal.count.present?
39
41
  - percentage = signal.total.present? ? signal.count.fdiv(signal.total) * 100 : signal.count
40
42
  .signum-notification-body__pbc
41
- = sts.progress_bar percentage, size: :small, label: false
43
+ = sts.progress_bar percentage, size: :small, label: false
@@ -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.0"
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.0
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
- // }