redmine_apijs 6.5.0 → 6.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/README +6 -7
  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/apijs-redmine.min.js +4 -3
  8. data/assets/javascripts/apijs.min.js +5 -4
  9. data/assets/javascripts/apijs.min.js.map +1 -0
  10. data/assets/javascripts/app.js +18 -2
  11. data/assets/javascripts/app.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.min.css +4 -4
  16. data/assets/stylesheets/apijs-screen-rtl.min.css +5 -5
  17. data/assets/stylesheets/apijs-screen-rtl.min.css.map +1 -0
  18. data/assets/stylesheets/apijs-screen.min.css +5 -5
  19. data/assets/stylesheets/apijs-screen.min.css.map +1 -0
  20. data/assets/stylesheets/styles-rtl.min.css.map +1 -0
  21. data/assets/stylesheets/styles.css +6 -4
  22. data/assets/stylesheets/styles.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/en.yml +3 -1
  26. data/config/locales/es.yml +3 -1
  27. data/config/locales/fr.yml +3 -1
  28. data/config/locales/it.yml +3 -1
  29. data/config/locales/ja.yml +3 -1
  30. data/config/locales/nl.yml +3 -1
  31. data/config/locales/pl.yml +3 -1
  32. data/config/locales/pt-BR.yml +3 -1
  33. data/config/locales/pt.yml +3 -1
  34. data/config/locales/ru.yml +3 -1
  35. data/config/locales/sk.yml +3 -1
  36. data/config/locales/tr.yml +3 -1
  37. data/config/locales/uk.yml +34 -0
  38. data/config/locales/zh.yml +3 -1
  39. data/config/routes.rb +9 -2
  40. data/init.rb +3 -3
  41. data/lib/apijs_attachment.rb +10 -5
  42. data/lib/apijs_const.rb +1 -1
  43. data/lib/apijs_files.rb +1 -1
  44. data/lib/image.py +162 -119
  45. data/lib/redmine_apijs.rb +1 -1
  46. data/lib/useragentparser.rb +10 -8
  47. data/lib/video.py +8 -6
  48. data/redmine_apijs.gemspec +9 -1
  49. metadata +11 -3
data/lib/redmine_apijs.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # Created L/13/07/2020
3
3
  # Updated D/27/08/2020
4
4
  #
5
- # Copyright 2008-2020 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
6
6
  # https://www.luigifab.fr/redmine/apijs
7
7
  #
8
8
  # This program is free software, you can redistribute it or modify
@@ -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.3.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|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,7 +80,7 @@ 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', 'UCBrowser' => 'UC Browser', 'YaBrowser' => 'Yandex', 'Iceweasel' => 'Firefox', 'Icecat' => 'Firefox', 'CriOS' => 'Chrome', 'Edg' => 'Edge', 'XiaoMi/MiuiBrowser' => 'MiuiBrowser'}, refkey, refbro)
82
84
  browser = refbro[0]
83
85
  version = result['version'][refkey[0]]
84
86
  elsif find(lowerBrowser, 'Playstation Vita', refkey, platform)
@@ -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,7 +1,7 @@
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.6.0'
5
5
  s.summary = 'Redmine Apijs plugin'
6
6
  s.description = 'Integrate the apijs javascript library into Redmine.'
7
7
  s.homepage = 'https://github.com/luigifab/redmine-apijs'
@@ -29,13 +29,20 @@ Gem::Specification.new do |s|
29
29
  assets/images/apijs/tv.gif
30
30
  assets/javascripts/apijs-redmine.min.js
31
31
  assets/javascripts/apijs.min.js
32
+ assets/javascripts/apijs.min.js.map
32
33
  assets/javascripts/app.js
34
+ assets/javascripts/app.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
35
38
  assets/stylesheets/apijs-redmine.min.css
36
39
  assets/stylesheets/apijs-screen-rtl.min.css
40
+ assets/stylesheets/apijs-screen-rtl.min.css.map
37
41
  assets/stylesheets/apijs-screen.min.css
42
+ assets/stylesheets/apijs-screen.min.css.map
43
+ assets/stylesheets/styles-rtl.min.css.map
38
44
  assets/stylesheets/styles.css
45
+ assets/stylesheets/styles.min.css.map
39
46
  config/locales/cs.yml
40
47
  config/locales/de.yml
41
48
  config/locales/en.yml
@@ -50,6 +57,7 @@ Gem::Specification.new do |s|
50
57
  config/locales/ru.yml
51
58
  config/locales/sk.yml
52
59
  config/locales/tr.yml
60
+ config/locales/uk.yml
53
61
  config/locales/zh.yml
54
62
  config/routes.rb
55
63
  Gemfile
metadata CHANGED
@@ -1,14 +1,14 @@
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.6.0
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-03-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Integrate the apijs javascript library into Redmine.
14
14
  email: code@luigifab.fr
@@ -33,13 +33,20 @@ files:
33
33
  - assets/images/apijs/tv.gif
34
34
  - assets/javascripts/apijs-redmine.min.js
35
35
  - assets/javascripts/apijs.min.js
36
+ - assets/javascripts/apijs.min.js.map
36
37
  - assets/javascripts/app.js
38
+ - assets/javascripts/app.min.js.map
37
39
  - assets/stylesheets/apijs-print.min.css
40
+ - assets/stylesheets/apijs-print.min.css.map
38
41
  - assets/stylesheets/apijs-redmine-rtl.min.css
39
42
  - assets/stylesheets/apijs-redmine.min.css
40
43
  - assets/stylesheets/apijs-screen-rtl.min.css
44
+ - assets/stylesheets/apijs-screen-rtl.min.css.map
41
45
  - assets/stylesheets/apijs-screen.min.css
46
+ - assets/stylesheets/apijs-screen.min.css.map
47
+ - assets/stylesheets/styles-rtl.min.css.map
42
48
  - assets/stylesheets/styles.css
49
+ - assets/stylesheets/styles.min.css.map
43
50
  - config/locales/cs.yml
44
51
  - config/locales/de.yml
45
52
  - config/locales/en.yml
@@ -54,6 +61,7 @@ files:
54
61
  - config/locales/ru.yml
55
62
  - config/locales/sk.yml
56
63
  - config/locales/tr.yml
64
+ - config/locales/uk.yml
57
65
  - config/locales/zh.yml
58
66
  - config/routes.rb
59
67
  - init.rb
@@ -87,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
95
  - !ruby/object:Gem::Version
88
96
  version: '0'
89
97
  requirements: []
90
- rubygems_version: 3.2.0.rc.2
98
+ rubygems_version: 3.2.5
91
99
  signing_key:
92
100
  specification_version: 4
93
101
  summary: Redmine Apijs plugin