redmine_apijs 6.5.0 → 6.8.1

Sign up to get free protection for your applications and to get access to all the features.
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