redmine_apijs 6.5.0 → 6.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README +9 -8
  3. data/app/controllers/apijs_controller.rb +25 -6
  4. data/app/views/application/_browser.html.erb +1 -1
  5. data/app/views/attachments/_links.html.erb +1 -1
  6. data/app/views/settings/_apijs.html.erb +7 -4
  7. data/assets/javascripts/{app.js → apijs-redmine.js} +22 -6
  8. data/assets/javascripts/apijs-redmine.min.js +4 -3
  9. data/assets/javascripts/apijs-redmine.min.js.map +1 -0
  10. data/assets/javascripts/apijs.min.js +5 -4
  11. data/assets/javascripts/apijs.min.js.map +1 -0
  12. data/assets/stylesheets/apijs-print.min.css +5 -5
  13. data/assets/stylesheets/apijs-print.min.css.map +1 -0
  14. data/assets/stylesheets/apijs-redmine-rtl.min.css +4 -4
  15. data/assets/stylesheets/apijs-redmine-rtl.min.css.map +1 -0
  16. data/assets/stylesheets/{styles.css → apijs-redmine.css} +6 -4
  17. data/assets/stylesheets/apijs-redmine.min.css +4 -4
  18. data/assets/stylesheets/apijs-redmine.min.css.map +1 -0
  19. data/assets/stylesheets/apijs-screen-rtl.min.css +5 -5
  20. data/assets/stylesheets/apijs-screen-rtl.min.css.map +1 -0
  21. data/assets/stylesheets/apijs-screen.min.css +5 -5
  22. data/assets/stylesheets/apijs-screen.min.css.map +1 -0
  23. data/config/locales/cs.yml +3 -1
  24. data/config/locales/de.yml +3 -1
  25. data/config/locales/el.yml +34 -0
  26. data/config/locales/en.yml +3 -1
  27. data/config/locales/es.yml +3 -1
  28. data/config/locales/fr.yml +3 -1
  29. data/config/locales/hu.yml +34 -0
  30. data/config/locales/it.yml +3 -1
  31. data/config/locales/ja.yml +3 -1
  32. data/config/locales/nl.yml +3 -1
  33. data/config/locales/pl.yml +3 -1
  34. data/config/locales/pt-BR.yml +3 -1
  35. data/config/locales/pt.yml +3 -1
  36. data/config/locales/ro.yml +34 -0
  37. data/config/locales/ru.yml +3 -1
  38. data/config/locales/sk.yml +3 -1
  39. data/config/locales/tr.yml +3 -1
  40. data/config/locales/uk.yml +34 -0
  41. data/config/locales/zh.yml +3 -1
  42. data/config/routes.rb +9 -2
  43. data/init.rb +4 -4
  44. data/lib/apijs_attachment.rb +10 -5
  45. data/lib/apijs_const.rb +1 -1
  46. data/lib/apijs_files.rb +1 -1
  47. data/lib/image.py +168 -119
  48. data/lib/redmine_apijs.rb +1 -1
  49. data/lib/useragentparser.rb +11 -9
  50. data/lib/video.py +8 -6
  51. data/redmine_apijs.gemspec +15 -4
  52. metadata +18 -6
@@ -1,10 +1,10 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # Copyright 2013-2020 | Jesse G. Donat <donatj~gmail~com>
3
+ # Copyright 2013-2021 | Jesse G. Donat <donatj~gmail~com>
4
4
  # https://github.com/donatj/PhpUserAgent
5
5
  #
6
- # Copyright 2019-2020 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
7
- # https://gist.github.com/luigifab/19a68d9aa98fa80f2961809d7cec59c0 (1.1.0-fork1)
6
+ # Copyright 2019-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
7
+ # https://gist.github.com/luigifab/19a68d9aa98fa80f2961809d7cec59c0 (1.5.0-fork1)
8
8
  #
9
9
  # Parses a user agent string into its important parts
10
10
  # Licensed under the MIT License
@@ -20,13 +20,13 @@ class Useragentparser
20
20
  browser = nil
21
21
  version = nil
22
22
  empty = {'platform' => platform, 'browser' => browser, 'version' => version}
23
- priority = ['Xbox One', 'Xbox', 'Windows Phone', 'Tizen', 'Android', 'FreeBSD', 'NetBSD', 'OpenBSD', 'CrOS', 'X11']
23
+ priority = ['Xbox One', 'Xbox', 'Windows Phone', 'Tizen', 'Android', 'FreeBSD', 'NetBSD', 'OpenBSD', 'CrOS', 'X11', 'Sailfish']
24
24
 
25
25
  return empty unless userAgent
26
26
 
27
27
  if (parentMatches = userAgent.match(/\((.*?)\)/m))
28
28
  result = parentMatches[1].scan(
29
- /(?<platform>BB\d+;|Android|CrOS|Tizen|iPhone|iPad|iPod|Linux|(Open|Net|Free)BSD|Macintosh|Windows(\ Phone)?|Silk|linux-gnu|BlackBerry|PlayBook|X11|(New\ )?Nintendo\ (WiiU?|3?DS|Switch)|Xbox(\ One)?) (?:\ [^;]*)? (?:;|$)/imx
29
+ /(?<platform>BB\d+;|Android|Adr|Symbian|Sailfish|CrOS|Tizen|iPhone|iPad|iPod|Linux|(Open|Net|Free)BSD|Macintosh|Windows(\ Phone)?|Silk|linux-gnu|BlackBerry|PlayBook|X11|(New\ )?Nintendo\ (WiiU?|3?DS|Switch)|Xbox(\ One)?) (?:\ [^;]*)? (?:;|$)/imx
30
30
  ).map(&:join)
31
31
  result.uniq!
32
32
  if result.length > 1
@@ -44,10 +44,12 @@ class Useragentparser
44
44
  platform = 'Linux'
45
45
  elsif platform == 'CrOS'
46
46
  platform = 'Chrome OS'
47
+ elsif platform == 'Adr'
48
+ platform = 'Android'
47
49
  end
48
50
 
49
51
  result = userAgent.to_enum(:scan, # ["browser" => ["Firefox"...], "version" => ["45.0"...]]
50
- /(?<browser>Camino|Kindle(\ Fire)?|Firefox|Iceweasel|IceCat|Safari|MSIE|Trident|AppleWebKit|TizenBrowser|(?:Headless)?Chrome|YaBrowser|Vivaldi|IEMobile|Opera|OPR|Silk|Midori|Edge|Edg|CriOS|UCBrowser|Puffin|OculusBrowser|SamsungBrowser|Baiduspider|Applebot|Googlebot|YandexBot|bingbot|Lynx|Version|Wget|curl|Valve\ Steam\ Tenfoot|NintendoBrowser|PLAYSTATION\ (\d|Vita)+) (?:\)?;?) (?:(?:[:\/ ])(?<version>[0-9A-Z.]+)|\/(?:[A-Z]*))/ix
52
+ /(?<browser>Camino|Kindle(\ Fire)?|Firefox|Iceweasel|IceCat|Safari|MSIE|Trident|AppleWebKit|TizenBrowser|(?:Headless)?Chrome|YaBrowser|Vivaldi|IEMobile|Opera|OPR|Silk|Midori|Edge|Edg|CriOS|UCBrowser|Puffin|OculusBrowser|SamsungBrowser|SailfishBrowser|XiaoMi\/MiuiBrowser|Baiduspider|Applebot|Facebot|Googlebot|YandexBot|bingbot|Lynx|Version|Wget|curl|Valve\ Steam\ Tenfoot|NintendoBrowser|PLAYSTATION\ (\d|Vita)+)\)?;?(?:[:\/ ](?<version>[0-9A-Z.]+)|\/[A-Z]*)/ix
51
53
  ).map { Regexp.last_match.names.collect{ |x| {x => $~[x]} }.reduce({}, :merge) }
52
54
  .reduce({}) { |h,pairs| pairs.each {|k,v| (h[k] ||= []) << v}; h }
53
55
 
@@ -78,9 +80,9 @@ class Useragentparser
78
80
  refpla = [platform]
79
81
  refval = ['']
80
82
 
81
- if findt(lowerBrowser, {'OPR' => 'Opera', 'UCBrowser' => 'UC Browser', 'YaBrowser' => 'Yandex', 'Iceweasel' => 'Firefox', 'Icecat' => 'Firefox', 'CriOS' => 'Chrome', 'Edg' => 'Edge'}, refkey, refbro)
83
+ if findt(lowerBrowser, {'OPR' => 'Opera', 'Facebot' => 'iMessageBot', 'UCBrowser' => 'UC Browser', 'YaBrowser' => 'Yandex', 'Iceweasel' => 'Firefox', 'Icecat' => 'Firefox', 'CriOS' => 'Chrome', 'Edg' => 'Edge', 'XiaoMi/MiuiBrowser' => 'MiuiBrowser'}, refkey, refbro)
82
84
  browser = refbro[0]
83
- version = result['version'][refkey[0]]
85
+ version = result['version'][refkey[0]][0] =~ /[0-9]/ ? result['version'][refkey[0]] : nil
84
86
  elsif find(lowerBrowser, 'Playstation Vita', refkey, platform)
85
87
  platform = 'PlayStation Vita'
86
88
  browser = 'Browser'
@@ -114,7 +116,7 @@ class Useragentparser
114
116
  end
115
117
  end
116
118
  end
117
- elsif find(lowerBrowser, ['Applebot', 'IEMobile', 'Edge', 'Midori', 'Vivaldi', 'OculusBrowser', 'SamsungBrowser', 'Valve Steam Tenfoot', 'Chrome', 'HeadlessChrome'], refkey, refbro)
119
+ elsif find(lowerBrowser, ['Applebot', 'IEMobile', 'Edge', 'Midori', 'Vivaldi', 'OculusBrowser', 'SamsungBrowser', 'Valve Steam Tenfoot', 'Chrome', 'HeadlessChrome', 'SailfishBrowser'], refkey, refbro)
118
120
  version = result['version'][refkey[0]]
119
121
  browser = refbro[0]
120
122
  elsif rv_result && find(lowerBrowser, 'Trident')
data/lib/video.py CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/python3
2
2
  # -*- coding: utf8 -*-
3
3
  # Created J/26/12/2013
4
- # Updated S/07/11/2020
4
+ # Updated W/16/12/2020
5
5
  #
6
- # Copyright 2008-2020 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
6
+ # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
7
7
  # https://www.luigifab.fr/redmine/apijs
8
8
  #
9
9
  # This program is free software, you can redistribute it or modify
@@ -44,13 +44,14 @@ else:
44
44
 
45
45
  # Standard resizing
46
46
  source.thumbnail(size, Image.ANTIALIAS)
47
- offset_x = int(max((size[0] - source.size[0]) / 2, 0))
48
- offset_y = int(max((size[1] - source.size[1]) / 2, 0))
47
+ offset_x = max(int((size[0] - source.size[0]) / 2), 0)
48
+ offset_y = max(int((size[1] - source.size[1]) / 2), 0)
49
49
 
50
50
  # Color detection
51
+ # white background black player OR black background white player
51
52
  pixels = source.getcolors(size[0] * size[1])
52
53
  pixels = sorted(pixels, key=lambda t: t[0])
53
- if (pixels[-1][1] > (127,127,127)): # white background, black player
54
+ if (pixels[-1][1] > (127,127,127)):
54
55
  dest = Image.new('RGBA', size, (255,255,255,0))
55
56
  dest.paste(source, (offset_x, offset_y))
56
57
  # https://stackoverflow.com/a/59082116 (replace only last lib)
@@ -75,4 +76,5 @@ if quality < 1:
75
76
  quality = 75
76
77
  elif quality > 95:
77
78
  quality = 95
78
- dest.convert('RGB').save(fileout, 'JPEG', optimize=True, quality=quality)
79
+
80
+ dest.convert('RGB').save(fileout, 'JPEG', optimize=True, subsampling=0, quality=quality)
@@ -1,9 +1,9 @@
1
1
  # coding: utf-8
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'redmine_apijs'
4
- s.version = '6.5.0'
4
+ s.version = '6.8.1'
5
5
  s.summary = 'Redmine Apijs plugin'
6
- s.description = 'Integrate the apijs javascript library into Redmine.'
6
+ s.description = 'Integrate the apijs JavaScript library into Redmine. Provides a gallery for image and video attachments.'
7
7
  s.homepage = 'https://github.com/luigifab/redmine-apijs'
8
8
  s.license = 'GPL-2.0-or-later'
9
9
  s.authors = ['Fabrice Creuzot']
@@ -27,29 +27,40 @@ Gem::Specification.new do |s|
27
27
  assets/images/apijs/player-white-200.png
28
28
  assets/images/apijs/player-white-400.png
29
29
  assets/images/apijs/tv.gif
30
+ assets/javascripts/apijs-redmine.js
30
31
  assets/javascripts/apijs-redmine.min.js
32
+ assets/javascripts/apijs-redmine.min.js.map
31
33
  assets/javascripts/apijs.min.js
32
- assets/javascripts/app.js
34
+ assets/javascripts/apijs.min.js.map
33
35
  assets/stylesheets/apijs-print.min.css
36
+ assets/stylesheets/apijs-print.min.css.map
34
37
  assets/stylesheets/apijs-redmine-rtl.min.css
38
+ assets/stylesheets/apijs-redmine-rtl.min.css.map
39
+ assets/stylesheets/apijs-redmine.css
35
40
  assets/stylesheets/apijs-redmine.min.css
41
+ assets/stylesheets/apijs-redmine.min.css.map
36
42
  assets/stylesheets/apijs-screen-rtl.min.css
43
+ assets/stylesheets/apijs-screen-rtl.min.css.map
37
44
  assets/stylesheets/apijs-screen.min.css
38
- assets/stylesheets/styles.css
45
+ assets/stylesheets/apijs-screen.min.css.map
39
46
  config/locales/cs.yml
40
47
  config/locales/de.yml
48
+ config/locales/el.yml
41
49
  config/locales/en.yml
42
50
  config/locales/es.yml
43
51
  config/locales/fr.yml
52
+ config/locales/hu.yml
44
53
  config/locales/it.yml
45
54
  config/locales/ja.yml
46
55
  config/locales/nl.yml
47
56
  config/locales/pl.yml
48
57
  config/locales/pt-BR.yml
49
58
  config/locales/pt.yml
59
+ config/locales/ro.yml
50
60
  config/locales/ru.yml
51
61
  config/locales/sk.yml
52
62
  config/locales/tr.yml
63
+ config/locales/uk.yml
53
64
  config/locales/zh.yml
54
65
  config/routes.rb
55
66
  Gemfile
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redmine_apijs
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.5.0
4
+ version: 6.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabrice Creuzot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-12 00:00:00.000000000 Z
11
+ date: 2021-10-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Integrate the apijs javascript library into Redmine.
13
+ description: Integrate the apijs JavaScript library into Redmine. Provides a gallery
14
+ for image and video attachments.
14
15
  email: code@luigifab.fr
15
16
  executables: []
16
17
  extensions: []
@@ -31,29 +32,40 @@ files:
31
32
  - assets/images/apijs/player-white-200.png
32
33
  - assets/images/apijs/player-white-400.png
33
34
  - assets/images/apijs/tv.gif
35
+ - assets/javascripts/apijs-redmine.js
34
36
  - assets/javascripts/apijs-redmine.min.js
37
+ - assets/javascripts/apijs-redmine.min.js.map
35
38
  - assets/javascripts/apijs.min.js
36
- - assets/javascripts/app.js
39
+ - assets/javascripts/apijs.min.js.map
37
40
  - assets/stylesheets/apijs-print.min.css
41
+ - assets/stylesheets/apijs-print.min.css.map
38
42
  - assets/stylesheets/apijs-redmine-rtl.min.css
43
+ - assets/stylesheets/apijs-redmine-rtl.min.css.map
44
+ - assets/stylesheets/apijs-redmine.css
39
45
  - assets/stylesheets/apijs-redmine.min.css
46
+ - assets/stylesheets/apijs-redmine.min.css.map
40
47
  - assets/stylesheets/apijs-screen-rtl.min.css
48
+ - assets/stylesheets/apijs-screen-rtl.min.css.map
41
49
  - assets/stylesheets/apijs-screen.min.css
42
- - assets/stylesheets/styles.css
50
+ - assets/stylesheets/apijs-screen.min.css.map
43
51
  - config/locales/cs.yml
44
52
  - config/locales/de.yml
53
+ - config/locales/el.yml
45
54
  - config/locales/en.yml
46
55
  - config/locales/es.yml
47
56
  - config/locales/fr.yml
57
+ - config/locales/hu.yml
48
58
  - config/locales/it.yml
49
59
  - config/locales/ja.yml
50
60
  - config/locales/nl.yml
51
61
  - config/locales/pl.yml
52
62
  - config/locales/pt-BR.yml
53
63
  - config/locales/pt.yml
64
+ - config/locales/ro.yml
54
65
  - config/locales/ru.yml
55
66
  - config/locales/sk.yml
56
67
  - config/locales/tr.yml
68
+ - config/locales/uk.yml
57
69
  - config/locales/zh.yml
58
70
  - config/routes.rb
59
71
  - init.rb
@@ -87,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
99
  - !ruby/object:Gem::Version
88
100
  version: '0'
89
101
  requirements: []
90
- rubygems_version: 3.2.0.rc.2
102
+ rubygems_version: 3.2.27
91
103
  signing_key:
92
104
  specification_version: 4
93
105
  summary: Redmine Apijs plugin