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.
- checksums.yaml +4 -4
- data/README +6 -7
- data/app/controllers/apijs_controller.rb +25 -6
- data/app/views/application/_browser.html.erb +1 -1
- data/app/views/attachments/_links.html.erb +1 -1
- data/app/views/settings/_apijs.html.erb +7 -4
- data/assets/javascripts/apijs-redmine.min.js +4 -3
- data/assets/javascripts/apijs.min.js +5 -4
- data/assets/javascripts/apijs.min.js.map +1 -0
- data/assets/javascripts/app.js +18 -2
- data/assets/javascripts/app.min.js.map +1 -0
- data/assets/stylesheets/apijs-print.min.css +5 -5
- data/assets/stylesheets/apijs-print.min.css.map +1 -0
- data/assets/stylesheets/apijs-redmine-rtl.min.css +4 -4
- data/assets/stylesheets/apijs-redmine.min.css +4 -4
- data/assets/stylesheets/apijs-screen-rtl.min.css +5 -5
- data/assets/stylesheets/apijs-screen-rtl.min.css.map +1 -0
- data/assets/stylesheets/apijs-screen.min.css +5 -5
- data/assets/stylesheets/apijs-screen.min.css.map +1 -0
- data/assets/stylesheets/styles-rtl.min.css.map +1 -0
- data/assets/stylesheets/styles.css +6 -4
- data/assets/stylesheets/styles.min.css.map +1 -0
- data/config/locales/cs.yml +3 -1
- data/config/locales/de.yml +3 -1
- data/config/locales/en.yml +3 -1
- data/config/locales/es.yml +3 -1
- data/config/locales/fr.yml +3 -1
- data/config/locales/it.yml +3 -1
- data/config/locales/ja.yml +3 -1
- data/config/locales/nl.yml +3 -1
- data/config/locales/pl.yml +3 -1
- data/config/locales/pt-BR.yml +3 -1
- data/config/locales/pt.yml +3 -1
- data/config/locales/ru.yml +3 -1
- data/config/locales/sk.yml +3 -1
- data/config/locales/tr.yml +3 -1
- data/config/locales/uk.yml +34 -0
- data/config/locales/zh.yml +3 -1
- data/config/routes.rb +9 -2
- data/init.rb +3 -3
- data/lib/apijs_attachment.rb +10 -5
- data/lib/apijs_const.rb +1 -1
- data/lib/apijs_files.rb +1 -1
- data/lib/image.py +162 -119
- data/lib/redmine_apijs.rb +1 -1
- data/lib/useragentparser.rb +10 -8
- data/lib/video.py +8 -6
- data/redmine_apijs.gemspec +9 -1
- 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-
|
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
|
data/lib/useragentparser.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
#
|
3
|
-
# Copyright 2013-
|
3
|
+
# Copyright 2013-2021 | Jesse G. Donat <donatj~gmail~com>
|
4
4
|
# https://github.com/donatj/PhpUserAgent
|
5
5
|
#
|
6
|
-
# Copyright 2019-
|
7
|
-
# https://gist.github.com/luigifab/19a68d9aa98fa80f2961809d7cec59c0 (1.
|
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
|
4
|
+
# Updated W/16/12/2020
|
5
5
|
#
|
6
|
-
# Copyright 2008-
|
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(
|
48
|
-
offset_y = int(
|
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)):
|
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
|
-
|
79
|
+
|
80
|
+
dest.convert('RGB').save(fileout, 'JPEG', optimize=True, subsampling=0, quality=quality)
|
data/redmine_apijs.gemspec
CHANGED
@@ -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.
|
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.
|
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:
|
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.
|
98
|
+
rubygems_version: 3.2.5
|
91
99
|
signing_key:
|
92
100
|
specification_version: 4
|
93
101
|
summary: Redmine Apijs plugin
|