oxidized-web 0.16.0 → 0.17.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.

Potentially problematic release.


This version of oxidized-web might be problematic. Click here for more details.

Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -1
  3. data/.rubocop.yml +23 -3
  4. data/CHANGELOG.md +25 -1
  5. data/README.md +13 -3
  6. data/Rakefile +9 -4
  7. data/docs/configuration.md +90 -0
  8. data/docs/development.md +47 -42
  9. data/lib/oxidized/web/public/scripts/oxidized.js +13 -13
  10. data/lib/oxidized/web/public/weblibs/bootstrap-icons.css +31 -3
  11. data/lib/oxidized/web/public/weblibs/bootstrap.bundle.js +20 -19
  12. data/lib/oxidized/web/public/weblibs/bootstrap.bundle.js.map +1 -1
  13. data/lib/oxidized/web/public/weblibs/bootstrap.css +110 -124
  14. data/lib/oxidized/web/public/weblibs/bootstrap.css.map +1 -1
  15. data/lib/oxidized/web/public/weblibs/bootstrap.js +20 -17
  16. data/lib/oxidized/web/public/weblibs/bootstrap.js.map +1 -1
  17. data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.css +3 -3
  18. data/lib/oxidized/web/public/weblibs/buttons.colVis.js +14 -5
  19. data/lib/oxidized/web/public/weblibs/dataTables.bootstrap5.css +111 -17
  20. data/lib/oxidized/web/public/weblibs/dataTables.buttons.js +25 -7
  21. data/lib/oxidized/web/public/weblibs/dataTables.js +337 -107
  22. data/lib/oxidized/web/public/weblibs/dayjs-plugin-utc.min.js +1 -0
  23. data/lib/oxidized/web/public/weblibs/dayjs.min.js +1 -0
  24. data/lib/oxidized/web/public/weblibs/fonts/bootstrap-icons.woff +0 -0
  25. data/lib/oxidized/web/public/weblibs/fonts/bootstrap-icons.woff2 +0 -0
  26. data/lib/oxidized/web/version.rb +1 -1
  27. data/lib/oxidized/web/views/diffs.haml +6 -7
  28. data/lib/oxidized/web/views/head.haml +4 -0
  29. data/lib/oxidized/web/views/node.haml +3 -2
  30. data/lib/oxidized/web/views/nodes.haml +2 -2
  31. data/lib/oxidized/web/views/stats.haml +2 -2
  32. data/lib/oxidized/web/views/version.haml +1 -2
  33. data/lib/oxidized/web/views/versions.haml +6 -5
  34. data/lib/oxidized/web/webapp.rb +42 -25
  35. data/lib/oxidized/web.rb +71 -26
  36. data/oxidized-web.gemspec +22 -13
  37. data/package-lock.json +37 -25
  38. data/package.json +7 -5
  39. data/spec/spec_helper.rb +1 -0
  40. data/spec/web/node/show_spec.rb +129 -0
  41. data/spec/web/node/version_spec.rb +161 -0
  42. data/spec/{node_spec.rb → web/node_spec.rb} +1 -1
  43. data/spec/{nodes_spec.rb → web/nodes_spec.rb} +1 -1
  44. data/spec/{root_spec.rb → web/root_spec.rb} +1 -1
  45. data/spec/{webapp_spec.rb → web/webapp_spec.rb} +1 -1
  46. data/spec/web_spec.rb +98 -0
  47. metadata +69 -69
  48. data/.rubocop_todo.yml +0 -64
  49. data/spec/node_version_spec.rb +0 -102
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01c4432ff37c67ec0a06e7aaa39eecb03631f290fd95d1de12bc9237310aad61
4
- data.tar.gz: 4f9a2860285850aaaf64d557807fec1e31d433a9f4ffaefaa68dd0ffb295bed8
3
+ metadata.gz: 1aff1246feb59461d9b7e559bdf8e9d3dbca3b850c0349e8dee7aed6f059aed4
4
+ data.tar.gz: b6653474dba5edcd452a4d146fe08c36abef240ac6a584668ca670d8e94eec43
5
5
  SHA512:
6
- metadata.gz: '029095fa609376853c3e0b446ee48749f02a9b7578b50d928ee43ed5b9c3d9ba5bf747e12805a669bbfebfe0d3b08b8ee57b409f6de6c9a53f6059df9b77acbd'
7
- data.tar.gz: 76dc6f389eb8170f290e33718fc11d9636539a8999f3c6a542965b4aa50f8bf5899446f18e828dc30246d9aa37b1f1f83d34cba133f94ee5a4656f26ae439713
6
+ metadata.gz: b53b5b69e72018995f7d03d58f3f1fbba72b49a48e4aa12d2690000ee646a59ca2e97526d9d7d717a6433d1a3989c9f8eb615f8bfdd6e9c78365bfb7e487f03a
7
+ data.tar.gz: e1c2ecd5a22e7822e4202ad1bdd3e5c1e6a077bf5f8be6adb5e858bce111da89882df3834dce5fb1c12ba3afd3040037662fa0b7a303c8ab863f8dc7e831a7a2
data/.gitignore CHANGED
@@ -10,6 +10,7 @@
10
10
  /test/version_tmp/
11
11
  /tmp/
12
12
  .idea/
13
+ /.rake_tasks~
13
14
 
14
15
  # Used by dotenv library to load environment variables.
15
16
  # .env
@@ -52,4 +53,6 @@ Gemfile.lock
52
53
 
53
54
  # npm files
54
55
  /node_modules/
55
- /.rake_tasks~
56
+
57
+ # Editors
58
+ .vscode
data/.rubocop.yml CHANGED
@@ -1,4 +1,3 @@
1
- inherit_from: .rubocop_todo.yml
2
1
  plugins:
3
2
  - rubocop-rails
4
3
  - rubocop-rake
@@ -14,11 +13,30 @@ AllCops:
14
13
  Gemspec/DevelopmentDependencies:
15
14
  EnforcedStyle: gemspec
16
15
 
16
+ Metrics/AbcSize:
17
+ Enabled: false
18
+
17
19
  Metrics/ClassLength:
18
- Max: 300
20
+ Enabled: false
21
+
22
+ Metrics/PerceivedComplexity:
23
+ Enabled: false
24
+
25
+ Metrics/CyclomaticComplexity:
26
+ Enabled: false
27
+
28
+ Metrics/MethodLength:
29
+ Enabled: false
19
30
 
20
31
  Metrics/BlockLength:
21
- Max: 150
32
+ Enabled: false
33
+
34
+ # Not using Rails, so no timezones
35
+ Rails/TimeZone:
36
+ Enabled: false
37
+
38
+ Rails/RakeEnvironment:
39
+ Enabled: false
22
40
 
23
41
  Style/Documentation:
24
42
  Enabled: false
@@ -70,3 +88,5 @@ Style/HashSyntax:
70
88
  Style/RescueModifier:
71
89
  Enabled: false
72
90
 
91
+ Style/NumericLiterals:
92
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
+ ## [0.17.1 – 2025-08-01]
7
+ ### Changed
8
+ - Dependency on Oxidized 0.34.1 (@robertcheramy)
9
+
10
+ ### Fixed
11
+ - Hide node vars works with Oxidized > 0.34.1 (@robertcheramy)
12
+
13
+
14
+ ## [0.17.0 – 2025-07-18]
15
+ ### Added
16
+ - Documentation of the configuration (@robertcheramy)
17
+
18
+ ### Changed
19
+ - Update weblibs to the latest versions (@robertcheramy)
20
+ - Depend on oxidized 0.34.0 (configuration of oxidized web as an extension) (@robertcheramy)
21
+ - Use JSON to format the node metadata in /node/show (@robertcheramy)
22
+
23
+ ### Fixed
24
+ - Run puma directly, so that it does not rename the oxidized process. Fixes: 349 (@robertcheramy)
25
+ - Display local time correctly and use epoch as timestamps in the URLs. Fixes: #258 and #356 (@robertcheramy)
26
+ - Hide node vars when listed in the configuration entry hide_node_vars. Fixes: #344 (@robertcheramy)
27
+ - /node/next/: Prefer JSON.parse over JSON.load (@robertcheramy)
28
+
29
+
6
30
  ## [0.16.0 - 2025-03-25]
7
31
  This release introduces the possibility for an extended configuration of
8
32
  oxidized-web in the oxidized configuration file. Oxidized versions after 0.32.2
@@ -13,7 +37,7 @@ will only work with oxidized-web version 0.16.0 or later.
13
37
 
14
38
  ### Fixed
15
39
  - the table preferences (pagelength, column visibility, search) are stored in the local browser cache. Fixes #315 #314 #265 #211 (@robertcheramy)
16
- - Update "refresh" and "Upldate node list" to more meaningfull texts (@robertcheramy)
40
+ - Update "refresh" and "Update node list" to more meaningful texts (@robertcheramy)
17
41
 
18
42
  ## [0.15.1 – 2025-02-20]
19
43
  This patch release fixes javascript errors.
data/README.md CHANGED
@@ -3,15 +3,25 @@
3
3
  [![Build Status](https://github.com/ytti/oxidized-web/actions/workflows/ruby.yml/badge.svg)](https://github.com/ytti/oxidized-web/actions/workflows/ruby.yml)
4
4
  [![Gem Version](https://badge.fury.io/rb/oxidized-web.svg)](http://badge.fury.io/rb/oxidized-web)
5
5
 
6
- Web userinterface and RESTful API for Oxidized.
6
+ Web user interface and RESTful API for Oxidized.
7
7
 
8
- This is not useful independently, see https://github.com/ytti/oxidized for install instructions.
8
+ ## Installation
9
+ This is not useful independently, see https://github.com/ytti/oxidized for
10
+ install instructions.
9
11
 
12
+ Note: because of its dependencies, installing the `oxidized-web` gem will
13
+ install `oxidized` automatically.
14
+
15
+ ## Configuration
16
+ `oxidized-web` is configured through the configuration of `oxidized`,
17
+ in the `extension` section. For details, see
18
+ [docs/configuration.md](docs/configuration.md).
19
+
20
+ ## Development
10
21
  If you wonder how to run oxidized-web from git for development, have a look at
11
22
  [docs/development.md](docs/development.md).
12
23
 
13
24
  ## License and Copyright
14
-
15
25
  Copyright 2013-2015 Saku Ytti <saku@ytti.fi>
16
26
  2013-2015 Samer Abdel-Hafez <sam@arahant.net>
17
27
 
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
3
 
4
- gemspec = eval(File.read(Dir['*.gemspec'].first))
4
+ gemspec = Gem::Specification.load(Dir['*.gemspec'].first)
5
5
  gemfile = "#{[gemspec.name, gemspec.version].join('-')}.gem"
6
6
 
7
7
  # Integrate Rubocop if available
@@ -9,7 +9,6 @@ begin
9
9
  require 'rubocop/rake_task'
10
10
 
11
11
  RuboCop::RakeTask.new
12
- task(:default).prerequisites << task(:rubocop)
13
12
  rescue LoadError
14
13
  task :rubocop do
15
14
  puts 'Install rubocop to run its rake tasks'
@@ -32,7 +31,9 @@ task :test do
32
31
  end
33
32
  end
34
33
 
34
+ desc 'build the gem'
35
35
  task build: :chmod
36
+
36
37
  ## desc 'Install gem'
37
38
  ## task :install => :build do
38
39
  ## system "sudo -Es sh -c \'umask 022; gem install gems/#{file}\'"
@@ -53,7 +54,7 @@ task push: :tag do
53
54
  system "gem push pkg/#{gemfile}"
54
55
  end
55
56
 
56
- desc 'Normalise file permissions'
57
+ desc 'Normalize file permissions'
57
58
  task :chmod do
58
59
  xbit = %w[]
59
60
  dirs = []
@@ -99,6 +100,10 @@ task :weblibs do
99
100
  weblibs << 'node_modules/datatables.net-buttons/js/dataTables.buttons.js'
100
101
  weblibs << 'node_modules/datatables.net-buttons/js/buttons.colVis.js'
101
102
 
103
+ # dayjs
104
+ weblibs << 'node_modules/dayjs/dayjs.min.js'
105
+ weblibs << 'node_modules/dayjs-plugin-utc/dist/dayjs-plugin-utc.min.js'
106
+
102
107
  weblibs.each do |w|
103
108
  cp(w, 'lib/oxidized/web/public/weblibs')
104
109
  end
@@ -108,4 +113,4 @@ task :weblibs do
108
113
  end
109
114
  end
110
115
 
111
- task default: :test
116
+ task default: %i[rubocop test]
@@ -0,0 +1,90 @@
1
+ # Basic configuration
2
+ The RESTful API and web interface are enabled by installing the `oxidized-web`
3
+ gem and configuring the `extensions.oxidized-web:` section in the configuration
4
+ file:
5
+ ```yaml
6
+ extensions:
7
+ oxidized-web:
8
+ load: true
9
+ # enter your configuration here
10
+ ```
11
+
12
+ You can set the following parameter:
13
+ - `load`: `true`/`false`: Enables or disables the `oxidized-web` extension
14
+ (default: `false`)
15
+ - `listen`: Specifies the interface to bind to (default: `127.0.0.1`). Valid
16
+ options:
17
+ - `127.0.0.1`: Allows IPv4 connections from localhost only
18
+ - `'[::1]'`: Allows IPv6 connections from localhost only
19
+ - `<IPv4-Address>` or `'[<IPv6-Address>]'`: Binds to a specific interface
20
+ - `0.0.0.0`: Binds to any IPv4 interface
21
+ - `'[::]'`: Binds to any IPv4 and IPv6 interface
22
+ - `port`: Specifies the TCP port to listen to (default: `8888`)
23
+ - `url_prefix`: Defines a URL prefix (default: no prefix)
24
+ - `vhosts`: A list of virtual hosts to listen to. If not specified, it will
25
+ respond to any virtual host.
26
+
27
+ ## Examples
28
+
29
+ ```yaml
30
+ # Listen on http://[::1]:8888/
31
+ extensions:
32
+ oxidized-web:
33
+ load: true
34
+ listen: '[::1]'
35
+ port: 8888
36
+ ```
37
+
38
+ ```yaml
39
+ # Listen on http://127.0.0.1:8888/
40
+ extensions:
41
+ oxidized-web:
42
+ load: true
43
+ listen: 127.0.0.1
44
+ port: 8888
45
+ ```
46
+
47
+ ```yaml
48
+ # Listen on http://[2001:db8:0:face:b001:0:dead:beaf]:8888/oxidized/
49
+ extensions:
50
+ oxidized-web:
51
+ load: true
52
+ listen: '[2001:db8:0:face:b001:0:dead:beaf]'
53
+ port: 8888
54
+ url_prefix: oxidized
55
+ ```
56
+
57
+ ```yaml
58
+ # Listen on http://10.0.0.1:8000/oxidized/
59
+ extensions:
60
+ oxidized-web:
61
+ load: true
62
+ listen: 10.0.0.1
63
+ port: 8000
64
+ url_prefix: oxidized
65
+ ```
66
+
67
+ ```yaml
68
+ # Listen on any interface to http://oxidized.rocks:8888 and
69
+ # http://oxidized:8888
70
+ extensions:
71
+ oxidized-web:
72
+ load: true
73
+ listen: '[::]'
74
+ url_prefix: oxidized
75
+ vhosts:
76
+ - oxidized.rocks
77
+ - oxidized
78
+ ```
79
+
80
+ # Hide node vars
81
+ Some node vars (enable, password) can contain sensible data. You can list the
82
+ vars to be hidden under `hide_node_vars`:
83
+ ```yaml
84
+ extensions:
85
+ oxidized-web:
86
+ load: true
87
+ hide_node_vars:
88
+ - enable
89
+ - password
90
+ ```
data/docs/development.md CHANGED
@@ -21,7 +21,7 @@ bundle exec oxidized
21
21
  Changes to haml templates are reloaded on the fly. For changes to the ruby
22
22
  scripts, you have to stop an restart `bundle exec oxidized`.
23
23
 
24
- ## Paralell development between oxidized and oxidized-web
24
+ ## Parallel development between oxidized and oxidized-web
25
25
  You may need to make some changes in oxidized **and** oxidized-web. For this,
26
26
  git clone oxidized and oxidized-web in a common root directory.
27
27
 
@@ -39,12 +39,12 @@ bundle install
39
39
  bundle exec bin/oxidized
40
40
  ```
41
41
 
42
- Be careful when commiting your work in oxidized *NOT* to include the changes to
42
+ Be careful when committing your work in oxidized *NOT* to include the changes to
43
43
  Gemfile, as this is a local change for development. I (@robertcheramy) didn't
44
44
  find a better way to do this, better ideas are welcome :-)
45
45
 
46
46
  If your changes to oxidized **AND** oxidzed-web are dependent from another, make
47
- sure you document this in the respectives CHANGELOG.md, so that everyone is
47
+ sure you document this in the respective CHANGELOG.md, so that everyone is
48
48
  informed at the next release.
49
49
 
50
50
  Note: you can also add the dependency to oxidized in oxidized-web, in the same
@@ -85,13 +85,22 @@ forget to document your changes in CHANGELOG.md.
85
85
 
86
86
  # How to release a new version of Oxidized-web?
87
87
 
88
+ ## Version numbering
89
+ Oxidized-web versions are numbered like major.minor.patch
90
+ - currently, the major version is 0.
91
+ - minor is incremented when releasing new features.
92
+ - patch is incremented when releasing fixes only.
93
+
94
+ ## Create a release branch
95
+ Name the release branch `release/0.xx.yy`
96
+
88
97
  ## Review changes
89
- Run `git diff 0.xx.yy..master` (where `0.xx.yy` is to be changed to the last
98
+ Run `git diff 0.xx.yy` (where `0.xx.yy` is to be changed to the previous
90
99
  release) and review all the changes that have been done. Have a specific look
91
100
  at changes you don't understand.
92
101
 
93
102
  It is nicer to read in a GUI, so you can use something like
94
- `git difftool --tool=kdiff3 -d 0.xx.yy..master` to see it in kdiff3.
103
+ `git difftool --tool=kdiff3 -d 0.xx.yy` to see it in kdiff3.
95
104
 
96
105
  ## Update the gem dependencies to the latest versions
97
106
  ```
@@ -100,73 +109,72 @@ bundle update
100
109
  bundle outaded
101
110
  ```
102
111
 
103
- Retest after updating!
112
+ Test again after updating!
104
113
 
105
114
  ## Update the weblibs to the latest versions
106
115
  ```
107
116
  npm outdated
108
117
  ```
109
118
 
110
- Retest after updating!
111
-
112
- ## Update rubocup .rubocop_todo.yml
113
- Run `bundle exec rubocop --auto-gen-config`,
114
- and make sure `bundle exec rake` passes after it.
115
-
116
- If you change some code => Restart the release process at the beginning ;-)
119
+ Test again after updating!
117
120
 
118
121
  ## Make sure the file permissions are correct
119
122
  Run `bundle exec rake chmod`
120
123
 
121
- ## Test, test test!
122
- Run `bundle exec rake` on the git repository to check the code against rubocop and rund the
123
- defined tests in `/spec`.
124
+ ## Test!
125
+ Run `bundle exec rake` on the git repository to check the code against rubocop
126
+ and run the defined tests in `/spec`.
124
127
 
125
128
  Run Oxidized-web from git against the latest Oxidized version `bundle exec oxdized`
126
129
 
127
- Run Oxidized-web from git against the latest git of Oxidized (see above).
128
-
129
- Do not integrate late PRs into master if they do not fix issues for the release. The must wait for the next release.
130
-
131
130
  When testing the web application, open the javascript console in the browser to
132
131
  see any errors.
133
132
 
134
- ## Version numbering
135
- Oxidized-web versions are nummered like major.minor.patch
136
- - currently, the major version is 0.
137
- - minor is incremented when releasing new features.
138
- - patch is incremented when releasing fixes only.
133
+ ## Bump the version
134
+ Update CHANGELOG.md:
135
+ - review it
136
+ - add release notes
137
+ - set the new version (replace `[Unreleased]` with `[0.xx.yy – 202Y-MM-DD]`)
138
+
139
+ Change the version in `lib/oxidized/web/version.rb`
140
+
141
+ Upload the release branch to github, make a Pull Request for it.
139
142
 
140
143
  ## Release
141
- 1. Checkout the master branch of oxidized-web. Make sure you are up to date with origin.
142
- 2. Change the version in lib/oxidized/web/version.rb
143
- 3. Change CHANGELOG.md to replace [Unreleased] with [0.xx.yy – 202Y-MM-DD]
144
- 4. Run `git diff` to check your changes
145
- 5. Commit the changes to the local git repository with a commit message “chore(release): release version 0.xx.yy”
146
- 6. Tag the commit with `git tag -a 0.xx.yy -m "Release 0.xx.yy"`
147
- 7. Build the gem with ‘rake build’
148
- 8. Install an test the gem locally:
149
- ```
144
+ 1. Merge the Pull Request into master with the commit message
145
+ `chore(release): release version 0.xx.y`
146
+ 2. `git pull` master
147
+ 3. Tag the commit with `git tag -a 0.xx.yy -m "Release 0.xx.yy"` or `rake tag`
148
+ 4. Build the gem with ‘rake build’
149
+ 5. Run `git diff` to check if there have been more changes (there shouldn't)
150
+ 6. Install an test the gem locally
151
+ ```shell
150
152
  gem install --user-install pkg/oxidized-web-0.xx.yy.gem
151
153
  ~/.local/share/gem/ruby/3.1.0/bin/oxidized
152
154
  ```
155
+
153
156
  ## Release in github
154
- 1. Push the commit and the tag to github:
157
+ Push the tag to github:
155
158
  ```
156
- git push
157
159
  git push origin 0.xx.yy
158
160
  ```
159
161
 
160
- 2. Make a release from the tag in github
161
- - Thank the contributors
162
- - Only describe major changes, and refer to CHANGELOG.md
162
+ Make a release from the tag in github.
163
+ - Take the release notes frm CHANGELOG.md
163
164
  - List new contributors (generated automatically)
165
+ - Keep the Full Changelog (generated automatically)
166
+
167
+ Close the corresponding milestone in github.
164
168
 
165
169
  ## Release in rubygems
166
170
  Push the gem with ‘rake push’
167
171
 
168
172
  You need an account at rubygems which is allowed to push oxidized
169
173
 
174
+ ## Release in docker.io
175
+ In order to release in docker.io, oxidized be released to a new version,
176
+ as the container is build there.
177
+
170
178
  ## Update CHANGELOG.md for next release
171
179
  Add
172
180
  ```
@@ -181,6 +189,3 @@ Add
181
189
  ```
182
190
  And push to github
183
191
 
184
- ## Congratulate yourself
185
- Great job! Treat yourself to your favorite drink, you deserve it!
186
-
@@ -2,22 +2,22 @@ var convertTime = function() {
2
2
  /* Convert UTC times to local browser times
3
3
  * Requires that the times on the server are UTC
4
4
  * Requires a class name of `time` to be set on element desired to be changed
5
- * Requires that element have a text in the format of `YYYY-mm-dd HH:MM:SS`
6
- * See ytti/oxidized-web #16
5
+ * Requires that element has an attribute `epoch` containing the seconds since
6
+ * 1.1.1970 UTC.
7
7
  */
8
8
  $('.time').each(function() {
9
9
  var content = $(this).text();
10
- if(content === 'never' || content === 'unknown' || content === '') { return; }
11
- var utcTime = content.split(' ');
12
- var date = new Date(utcTime[0] + 'T' + utcTime[1] + 'Z');
13
- var year = date.getFullYear();
14
- var month = ("0"+(date.getMonth()+1)).slice(-2);
15
- var day = ("0" + date.getDate()).slice(-2);
16
- var hour = ("0" + date.getHours()).slice(-2);
17
- var minute = ("0" + date.getMinutes()).slice(-2);
18
- var second = ("0" + date.getSeconds()).slice(-2);
19
- var timeZone = date.toString().match(/[A-Z]{3,4}[+-][0-9]{4}/)[0];
20
- $(this).text(year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second + ' ' + timeZone);
10
+ if(content === 'never' || content === 'unknown' || content === '') {
11
+ return;
12
+ }
13
+ var epoch = $(this).attr('epoch');
14
+ if(epoch === undefined) {
15
+ return;
16
+ }
17
+ var utcTime = Number(epoch);
18
+ var dj = dayjs.unix(utcTime).local();
19
+
20
+ $(this).text(dj.format('YYYY-MM-DD HH:mm:ss [(UTC]Z[)]'));
21
21
  });
22
22
  };
23
23
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap Icons v1.11.3 (https://icons.getbootstrap.com/)
2
+ * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/)
3
3
  * Copyright 2019-2024 The Bootstrap Authors
4
4
  * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE)
5
5
  */
@@ -7,8 +7,8 @@
7
7
  @font-face {
8
8
  font-display: block;
9
9
  font-family: "bootstrap-icons";
10
- src: url("./fonts/bootstrap-icons.woff2?dd67030699838ea613ee6dbda90effa6") format("woff2"),
11
- url("./fonts/bootstrap-icons.woff?dd67030699838ea613ee6dbda90effa6") format("woff");
10
+ src: url("./fonts/bootstrap-icons.woff2?e34853135f9e39acf64315236852cd5a") format("woff2"),
11
+ url("./fonts/bootstrap-icons.woff?e34853135f9e39acf64315236852cd5a") format("woff");
12
12
  }
13
13
 
14
14
  .bi::before,
@@ -2076,3 +2076,31 @@ url("./fonts/bootstrap-icons.woff?dd67030699838ea613ee6dbda90effa6") format("wof
2076
2076
  .bi-suitcase2-fill::before { content: "\f901"; }
2077
2077
  .bi-suitcase2::before { content: "\f902"; }
2078
2078
  .bi-vignette::before { content: "\f903"; }
2079
+ .bi-bluesky::before { content: "\f7f9"; }
2080
+ .bi-tux::before { content: "\f904"; }
2081
+ .bi-beaker-fill::before { content: "\f905"; }
2082
+ .bi-beaker::before { content: "\f906"; }
2083
+ .bi-flask-fill::before { content: "\f907"; }
2084
+ .bi-flask-florence-fill::before { content: "\f908"; }
2085
+ .bi-flask-florence::before { content: "\f909"; }
2086
+ .bi-flask::before { content: "\f90a"; }
2087
+ .bi-leaf-fill::before { content: "\f90b"; }
2088
+ .bi-leaf::before { content: "\f90c"; }
2089
+ .bi-measuring-cup-fill::before { content: "\f90d"; }
2090
+ .bi-measuring-cup::before { content: "\f90e"; }
2091
+ .bi-unlock2-fill::before { content: "\f90f"; }
2092
+ .bi-unlock2::before { content: "\f910"; }
2093
+ .bi-battery-low::before { content: "\f911"; }
2094
+ .bi-anthropic::before { content: "\f912"; }
2095
+ .bi-apple-music::before { content: "\f913"; }
2096
+ .bi-claude::before { content: "\f914"; }
2097
+ .bi-openai::before { content: "\f915"; }
2098
+ .bi-perplexity::before { content: "\f916"; }
2099
+ .bi-css::before { content: "\f917"; }
2100
+ .bi-javascript::before { content: "\f918"; }
2101
+ .bi-typescript::before { content: "\f919"; }
2102
+ .bi-fork-knife::before { content: "\f91a"; }
2103
+ .bi-globe-americas-fill::before { content: "\f91b"; }
2104
+ .bi-globe-asia-australia-fill::before { content: "\f91c"; }
2105
+ .bi-globe-central-south-asia-fill::before { content: "\f91d"; }
2106
+ .bi-globe-europe-africa-fill::before { content: "\f91e"; }