redmine_apijs 6.6.0 → 6.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/README +8 -9
  3. data/app/controllers/apijs_controller.rb +7 -7
  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 +1 -1
  7. data/assets/javascripts/{app.js → apijs-redmine.js} +9 -6
  8. data/assets/javascripts/apijs-redmine.min.js +3 -3
  9. data/assets/javascripts/apijs-redmine.min.js.map +1 -0
  10. data/assets/javascripts/apijs.min.js +3 -3
  11. data/assets/javascripts/apijs.min.js.map +1 -1
  12. data/assets/stylesheets/apijs-print.min.css +2 -2
  13. data/assets/stylesheets/apijs-print.min.css.map +1 -1
  14. data/assets/stylesheets/apijs-redmine-rtl.min.css +2 -2
  15. data/assets/stylesheets/apijs-redmine-rtl.min.css.map +1 -0
  16. data/assets/stylesheets/{styles.css → apijs-redmine.css} +1 -1
  17. data/assets/stylesheets/apijs-redmine.min.css +2 -2
  18. data/assets/stylesheets/apijs-redmine.min.css.map +1 -0
  19. data/assets/stylesheets/apijs-screen-rtl.min.css +3 -3
  20. data/assets/stylesheets/apijs-screen-rtl.min.css.map +1 -1
  21. data/assets/stylesheets/apijs-screen.min.css +3 -3
  22. data/assets/stylesheets/apijs-screen.min.css.map +1 -1
  23. data/config/locales/el.yml +34 -0
  24. data/config/locales/hu.yml +34 -0
  25. data/config/locales/ro.yml +34 -0
  26. data/config/routes.rb +1 -1
  27. data/init.rb +4 -4
  28. data/lib/apijs_attachment.rb +1 -1
  29. data/lib/apijs_const.rb +1 -1
  30. data/lib/apijs_files.rb +1 -1
  31. data/lib/image.py +19 -13
  32. data/lib/redmine_apijs.rb +1 -1
  33. data/lib/useragentparser.rb +4 -4
  34. data/lib/video.py +1 -1
  35. data/redmine_apijs.gemspec +10 -7
  36. metadata +13 -9
  37. data/assets/javascripts/app.min.js.map +0 -1
  38. data/assets/stylesheets/styles-rtl.min.css.map +0 -1
  39. data/assets/stylesheets/styles.min.css.map +0 -1
data/config/routes.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # Created J/12/12/2013
3
3
  # Updated S/16/01/2021
4
4
  #
5
- # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2022 | 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/init.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
2
  # Created L/21/05/2012
3
- # Updated S/12/12/2020
3
+ # Updated V/22/10/2021
4
4
  #
5
- # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2022 | 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
@@ -25,8 +25,8 @@ Redmine::Plugin.register :redmine_apijs do
25
25
 
26
26
  name 'Redmine Apijs plugin'
27
27
  author 'Fabrice Creuzot'
28
- description 'Integrate the apijs javascript library into Redmine.'
29
- version '6.6.0-gem'
28
+ description 'Integrate the apijs JavaScript library into Redmine. Provides a gallery for image and video attachments.'
29
+ version '6.8.2-gem'
30
30
  url 'https://www.luigifab.fr/redmine/apijs'
31
31
  author_url 'https://www.luigifab.fr/'
32
32
 
@@ -2,7 +2,7 @@
2
2
  # Created V/27/12/2013
3
3
  # Updated J/18/02/2021
4
4
  #
5
- # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2022 | 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/apijs_const.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # Created L/01/09/2014
3
3
  # Updated J/23/07/2020
4
4
  #
5
- # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2022 | 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/apijs_files.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # Created L/21/05/2012
3
3
  # Updated D/03/05/2020
4
4
  #
5
- # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2022 | 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/image.py CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/python3
2
2
  # -*- coding: utf8 -*-
3
3
  # Created J/26/12/2013
4
- # Updated J/18/02/2021
4
+ # Updated M/11/05/2021
5
5
  #
6
- # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
7
- # Copyright 2020-2021 | Fabrice Creuzot <fabrice~cellublue~com>
6
+ # Copyright 2008-2022 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
7
+ # Copyright 2020-2022 | Fabrice Creuzot <fabrice~cellublue~com>
8
8
  # https://www.luigifab.fr/openmage/apijs
9
9
  #
10
10
  # This program is free software, you can redistribute it or modify
@@ -35,11 +35,14 @@ except:
35
35
  if not os.path.exists(os.path.dirname(fileout)):
36
36
  os.makedirs(os.path.dirname(fileout))
37
37
 
38
+ fileout = fileout + '.save'
38
39
 
39
- def versiontuple(v):
40
+
41
+ # tools
42
+ def versionTuple(v):
40
43
  return tuple(map(int, (v.split('.'))))
41
44
 
42
- def calcsize(source, size):
45
+ def calcSize(source, size):
43
46
 
44
47
  if size[1] == 0 and size[0] == 0:
45
48
  return source.size
@@ -50,12 +53,12 @@ def calcsize(source, size):
50
53
 
51
54
  return size
52
55
 
53
- def createthumb(source, size, fixed, new=False):
56
+ def createThumb(source, size, fixed, new=False):
54
57
 
55
58
  # https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.thumbnail
56
59
  # https://pillow.readthedocs.io/en/latest/handbook/concepts.html#filters-comparison-table
57
60
  # https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.paste
58
- if hasattr(Image, '__version__') and versiontuple(Image.__version__) > (7,0,0):
61
+ if hasattr(Image, '__version__') and versionTuple(Image.__version__) > (7,0,0):
59
62
  source.thumbnail(size, Image.LANCZOS, 4)
60
63
  else:
61
64
  source.thumbnail(size, Image.ANTIALIAS)
@@ -96,7 +99,7 @@ def resizeAnimatedGif(source, size, fixed):
96
99
 
97
100
  frame = Image.new('RGBA', source.size, (255,255,255,1))
98
101
  frame.paste(source, (0,0), source.convert('RGBA'))
99
- dest.append(createthumb(frame, size, fixed))
102
+ dest.append(createThumb(frame, size, fixed))
100
103
 
101
104
  idx = source.tell()
102
105
  source.seek(idx + 1)
@@ -117,7 +120,7 @@ def resizeAnimatedPng(source, size, fixed):
117
120
  while True:
118
121
  frame = Image.new('RGBA', source.size, (255,255,255,1))
119
122
  frame.paste(source, (0,0), source.convert('RGBA'))
120
- dest.append(createthumb(frame, size, fixed))
123
+ dest.append(createThumb(frame, size, fixed))
121
124
 
122
125
  idx = source.tell()
123
126
  source.seek(idx + 1)
@@ -138,7 +141,7 @@ def resizeAnimatedWebp(source, size, fixed):
138
141
  while True:
139
142
  frame = Image.new('RGBA', source.size, (255,255,255,1))
140
143
  frame.paste(source, (0,0), source.convert('RGBA'))
141
- dest.append(createthumb(frame, size, fixed))
144
+ dest.append(createThumb(frame, size, fixed))
142
145
 
143
146
  idx = source.tell()
144
147
  source.seek(idx + 1)
@@ -213,7 +216,7 @@ def saveJpg(dest, fileout, quality):
213
216
 
214
217
  # python-scour
215
218
  if ".svg" in fileout:
216
- from scour.scour import (sanitizeOptions, start)
219
+ from scour.scour import sanitizeOptions, start
217
220
  options = sanitizeOptions()
218
221
  options.strip_xml_prolog = True # --strip-xml-prolog
219
222
  options.remove_metadata = True # --remove-metadata
@@ -225,7 +228,7 @@ if ".svg" in fileout:
225
228
  else:
226
229
  from PIL import Image, ImageSequence
227
230
  source = Image.open(filein)
228
- size = calcsize(source, size)
231
+ size = calcSize(source, size)
229
232
 
230
233
  if source.format == 'GIF' and ".gif" in fileout:
231
234
  dest = resizeAnimatedGif(source, size, fixed)
@@ -237,7 +240,10 @@ else:
237
240
  dest = resizeAnimatedWeb(source, size, fixed)
238
241
  saveWebp(dest, fileout, quality)
239
242
  else:
240
- dest = createthumb(source, size, fixed, True)
243
+ dest = createThumb(source, size, fixed, True)
241
244
  saveJpg(dest, fileout, quality)
242
245
 
246
+ if os.path.isfile(fileout):
247
+ os.rename(fileout, fileout.replace('.save', ''))
248
+
243
249
  exit(0)
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-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2022 | 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
@@ -4,7 +4,7 @@
4
4
  # https://github.com/donatj/PhpUserAgent
5
5
  #
6
6
  # Copyright 2019-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
7
- # https://gist.github.com/luigifab/19a68d9aa98fa80f2961809d7cec59c0 (1.3.0-fork1)
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
@@ -49,7 +49,7 @@ class Useragentparser
49
49
  end
50
50
 
51
51
  result = userAgent.to_enum(:scan, # ["browser" => ["Firefox"...], "version" => ["45.0"...]]
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
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
53
53
  ).map { Regexp.last_match.names.collect{ |x| {x => $~[x]} }.reduce({}, :merge) }
54
54
  .reduce({}) { |h,pairs| pairs.each {|k,v| (h[k] ||= []) << v}; h }
55
55
 
@@ -80,9 +80,9 @@ class Useragentparser
80
80
  refpla = [platform]
81
81
  refval = ['']
82
82
 
83
- if findt(lowerBrowser, {'OPR' => 'Opera', 'UCBrowser' => 'UC Browser', 'YaBrowser' => 'Yandex', 'Iceweasel' => 'Firefox', 'Icecat' => 'Firefox', 'CriOS' => 'Chrome', 'Edg' => 'Edge', 'XiaoMi/MiuiBrowser' => 'MiuiBrowser'}, 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)
84
84
  browser = refbro[0]
85
- version = result['version'][refkey[0]]
85
+ version = result['version'][refkey[0]][0] =~ /[0-9]/ ? result['version'][refkey[0]] : nil
86
86
  elsif find(lowerBrowser, 'Playstation Vita', refkey, platform)
87
87
  platform = 'PlayStation Vita'
88
88
  browser = 'Browser'
data/lib/video.py CHANGED
@@ -3,7 +3,7 @@
3
3
  # Created J/26/12/2013
4
4
  # Updated W/16/12/2020
5
5
  #
6
- # Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
6
+ # Copyright 2008-2022 | 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
@@ -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.6.0'
4
+ s.version = '6.8.2'
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,33 +27,36 @@ 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
34
  assets/javascripts/apijs.min.js.map
33
- assets/javascripts/app.js
34
- assets/javascripts/app.min.js.map
35
35
  assets/stylesheets/apijs-print.min.css
36
36
  assets/stylesheets/apijs-print.min.css.map
37
37
  assets/stylesheets/apijs-redmine-rtl.min.css
38
+ assets/stylesheets/apijs-redmine-rtl.min.css.map
39
+ assets/stylesheets/apijs-redmine.css
38
40
  assets/stylesheets/apijs-redmine.min.css
41
+ assets/stylesheets/apijs-redmine.min.css.map
39
42
  assets/stylesheets/apijs-screen-rtl.min.css
40
43
  assets/stylesheets/apijs-screen-rtl.min.css.map
41
44
  assets/stylesheets/apijs-screen.min.css
42
45
  assets/stylesheets/apijs-screen.min.css.map
43
- assets/stylesheets/styles-rtl.min.css.map
44
- assets/stylesheets/styles.css
45
- assets/stylesheets/styles.min.css.map
46
46
  config/locales/cs.yml
47
47
  config/locales/de.yml
48
+ config/locales/el.yml
48
49
  config/locales/en.yml
49
50
  config/locales/es.yml
50
51
  config/locales/fr.yml
52
+ config/locales/hu.yml
51
53
  config/locales/it.yml
52
54
  config/locales/ja.yml
53
55
  config/locales/nl.yml
54
56
  config/locales/pl.yml
55
57
  config/locales/pt-BR.yml
56
58
  config/locales/pt.yml
59
+ config/locales/ro.yml
57
60
  config/locales/ru.yml
58
61
  config/locales/sk.yml
59
62
  config/locales/tr.yml
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.6.0
4
+ version: 6.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabrice Creuzot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-03 00:00:00.000000000 Z
11
+ date: 2022-01-01 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,33 +32,36 @@ 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
39
  - assets/javascripts/apijs.min.js.map
37
- - assets/javascripts/app.js
38
- - assets/javascripts/app.min.js.map
39
40
  - assets/stylesheets/apijs-print.min.css
40
41
  - assets/stylesheets/apijs-print.min.css.map
41
42
  - assets/stylesheets/apijs-redmine-rtl.min.css
43
+ - assets/stylesheets/apijs-redmine-rtl.min.css.map
44
+ - assets/stylesheets/apijs-redmine.css
42
45
  - assets/stylesheets/apijs-redmine.min.css
46
+ - assets/stylesheets/apijs-redmine.min.css.map
43
47
  - assets/stylesheets/apijs-screen-rtl.min.css
44
48
  - assets/stylesheets/apijs-screen-rtl.min.css.map
45
49
  - assets/stylesheets/apijs-screen.min.css
46
50
  - assets/stylesheets/apijs-screen.min.css.map
47
- - assets/stylesheets/styles-rtl.min.css.map
48
- - assets/stylesheets/styles.css
49
- - assets/stylesheets/styles.min.css.map
50
51
  - config/locales/cs.yml
51
52
  - config/locales/de.yml
53
+ - config/locales/el.yml
52
54
  - config/locales/en.yml
53
55
  - config/locales/es.yml
54
56
  - config/locales/fr.yml
57
+ - config/locales/hu.yml
55
58
  - config/locales/it.yml
56
59
  - config/locales/ja.yml
57
60
  - config/locales/nl.yml
58
61
  - config/locales/pl.yml
59
62
  - config/locales/pt-BR.yml
60
63
  - config/locales/pt.yml
64
+ - config/locales/ro.yml
61
65
  - config/locales/ru.yml
62
66
  - config/locales/sk.yml
63
67
  - config/locales/tr.yml
@@ -95,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
99
  - !ruby/object:Gem::Version
96
100
  version: '0'
97
101
  requirements: []
98
- rubygems_version: 3.2.5
102
+ rubygems_version: 3.2.27
99
103
  signing_key:
100
104
  specification_version: 4
101
105
  summary: Redmine Apijs plugin
@@ -1 +0,0 @@
1
- {"version":3,"sources":["app.js"],"sourcesContent":["/**\n * Created D/15/12/2013\n * Updated S/16/01/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/redmine/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\nvar apijsRedmine = new (function () {\n\n\t\"use strict\";\n\n\tthis.start = function () {\n\n\t\tvar d = apijs.i18n.data;\n\t\tif (!d.frca) d.frca = {};\n\t\t// https://docs.google.com/spreadsheets/d/1UUpKZ-YAAlcfvGHYwt6aUM9io390j0-fIL0vMRh1pW0/edit?usp=sharing\n\t\t// auto start\n\t\td.cs[250] = \"Smazat soubor\";\n\t\td.cs[251] = \"Opravdu chcete tento soubor smazat?[br]Pozor, tuto operaci nelze vrátit zpět.\";\n\t\td.cs[252] = \"Chyba\";\n\t\td.de[250] = \"Eine Datei löschen\";\n\t\td.de[251] = \"Sind Sie sicher, dass Sie diese Datei löschen möchten?[br]Achtung, diese Aktion ist unrückgängig.\";\n\t\td.de[252] = \"Fehler\";\n\t\td.de[253] = \"Sie verfügen nicht über die notwendigen Rechte um diese Operation durchzuführen, bitte [a §]aktualisieren Sie die Seite[/a].\";\n\t\td.de[254] = \"Es tut uns leid, diese Datei existiert nicht mehr, bitte [a §]aktualisieren Sie die Seite[/a].\";\n\t\td.de[255] = \"Eine Beschreibung bearbeiten\";\n\t\td.de[256] = \"Bitte geben Sie weiter unten die neue Beschreibung für diese Datei an. Um die Beschreibung zu löschen lassen Sie das Feld leer.\";\n\t\td.en[250] = \"Remove file\";\n\t\td.en[251] = \"Are you sure you want to remove this file?[br]Be careful, you can't cancel this operation.\";\n\t\td.en[252] = \"Error\";\n\t\td.en[253] = \"You are not authorized to perform this operation, please [a §]refresh the page[/a].\";\n\t\td.en[254] = \"Sorry, the file no longer exists, please [a §]refresh the page[/a].\";\n\t\td.en[255] = \"Edit description\";\n\t\td.en[256] = \"Enter below the new description for the file. To remove the description, leave the field empty.\";\n\t\td.en[257] = \"Rename file\";\n\t\td.en[258] = \"Enter below the new name for the file.\";\n\t\td.en[259] = \"Clear cache\";\n\t\td.en[260] = \"Are you sure you want to clear the cache?[br]Be careful, you can't cancel this operation.\";\n\t\td.es[250] = \"Borrar un archivo\";\n\t\td.es[251] = \"¿Está usted seguro(a) de que desea eliminar este archivo?[br]Atención, pues no podrá cancelar esta operación.\";\n\t\td.es[253] = \"No está autorizado-a para llevar a cabo esta operación, por favor [a §]actualice la página[/a].\";\n\t\td.es[254] = \"Disculpe, pero el archivo ya no existe, por favor [a §]actualice la página[/a].\";\n\t\td.es[255] = \"Editar una descripción\";\n\t\td.es[256] = \"Introduzca a continuación la nueva descripción para el archivo. Para eliminar la descripción, deje el campo en blanco.\";\n\t\td.es[259] = \"Vaciar la caché\";\n\t\td.es[260] = \"¿Está usted seguro(a) de querer vaciar la caché?[br]Cuidado, esta operación no puede ser cancelada.\";\n\t\td.fr[250] = \"Supprimer le fichier\";\n\t\td.fr[251] = \"Êtes-vous sûr(e) de vouloir supprimer ce fichier ?[br]Attention, cette opération n'est pas annulable.\";\n\t\td.fr[252] = \"Erreur\";\n\t\td.fr[253] = \"Vous n'êtes pas autorisé(e) à effectuer cette opération, veuillez [a §]actualiser la page[/a].\";\n\t\td.fr[254] = \"Désolé, le fichier n'existe plus, veuillez [a §]actualiser la page[/a].\";\n\t\td.fr[255] = \"Modifier la description\";\n\t\td.fr[256] = \"Saisissez ci-dessous la nouvelle description pour ce fichier. Pour supprimer la description, laissez le champ vide.\";\n\t\td.fr[257] = \"Renommer le fichier\";\n\t\td.fr[258] = \"Saisissez ci-dessous le nouveau nom pour ce fichier.\";\n\t\td.fr[259] = \"Vider le cache\";\n\t\td.fr[260] = \"Êtes-vous certain(e) de vouloir vider le cache ?[br]Attention, cette opération n'est pas annulable.\";\n\t\td.it[250] = \"Cancella i file\";\n\t\td.it[251] = \"Sei sicura di voler eliminare il file?[br]Attenzione, questa operazione non può essere annullata.\";\n\t\td.it[252] = \"Errore\";\n\t\td.it[253] = \"Non siete autorizzati a eseguire questa operazione, vi preghiamo di [a §]ricaricare la pagina[/a].\";\n\t\td.it[254] = \"Spiacenti, il file non esiste più, vi preghiamo di [a §]ricaricare la pagina[/a].\";\n\t\td.it[255] = \"Modificare una descrizione\";\n\t\td.it[256] = \"Inserire qui sotto la nuova descrizione del file. Per cancellare la descrizione, lasciate lo spazio vuoto.\";\n\t\td.ja[250] = \"ファイルを削除\";\n\t\td.ja[252] = \"エラー\";\n\t\td.nl[252] = \"Fout\";\n\t\td.pl[250] = \"Usuń plik\";\n\t\td.pl[251] = \"Jesteś pewny, że chcesz usunąć ten plik?[br]Uwaga! Nie ma odwrotu od tej operacji.\";\n\t\td.pl[252] = \"Błąd\";\n\t\td.pt[250] = \"Suprimir um ficheiro\";\n\t\td.pt[251] = \"Tem certeza de que quer suprimir este ficheiro?[br]Cuidado, não pode cancelar esta operação.\";\n\t\td.pt[252] = \"Erro\";\n\t\td.pt[253] = \"Não é autorizado(a) para efetuar esta operação, por favor [a §]atualize a página[/a].\";\n\t\td.pt[254] = \"Lamento, o ficheiro já não existe, por favor [a §]atualize a página[/a].\";\n\t\td.pt[255] = \"Modificar uma descrição\";\n\t\td.pt[256] = \"Digite abaixo a nova descrição para este ficheiro. Para suprimir a descrição, deixe o campo vazio.\";\n\t\td.ru[250] = \"Удалить файл\";\n\t\td.ru[251] = \"Вы уверены, что хотите удалить этот файл?[br]Осторожно, вы не сможете отменить эту операцию.\";\n\t\td.ru[252] = \"Ошибка\";\n\t\td.ru[253] = \"Вы не авторизованы для выполнения этой операции, пожалуйста [a §]обновите страницу[/a].\";\n\t\td.ru[254] = \"Извините, но файл не существует, пожалуйста [a §]обновите страницу[/a].\";\n\t\td.ru[255] = \"Редактировать описание\";\n\t\td.ru[256] = \"Ниже введите новое описание файла. Оставьте поле пустым, чтобы удалить описание.\";\n\t\td.sk[252] = \"Chyba\";\n\t\td.tr[252] = \"Hata\";\n\t\td.uk[252] = \"Помилка\";\n\t\td.zh[252] = \"错误信息\";\n\t\t// auto end\n\t};\n\n\tthis.error = function (data) {\n\n\t\tif ((typeof data == 'string') && (data.indexOf('<!DOCTYPE') < 0)) {\n\t\t\tapijs.dialog.dialogInformation(apijs.i18n.translate(252), data, 'error');\n\t\t}\n\t\telse {\n\t\t\tapijs.dialog.remove('lock'); // obligatoire sinon demande de confirmation de quitter la page\n\t\t\tself.location.reload();\n\t\t}\n\t};\n\n\tthis.editAttachment = function (elem, id, action, token) {\n\n\t\tvar desc, text, title = apijs.i18n.translate(255);\n\n\t\tdesc = elem.parentNode.parentNode.querySelector('.description').textContent.trim();\n\t\ttext = '[p][label for=\"apijsinput\"]' + apijs.i18n.translate(256) + '[/label][/p]' +\n\t\t\t\t'[input type=\"text\" name=\"description\" value=\"' + desc + '\" spellcheck=\"true\" id=\"apijsinput\"]';\n\n\t\tapijs.dialog.dialogFormOptions(title, text, action, apijsRedmine.actionEditAttachment, [id, action, token], 'editattach');\n\t\tapijs.dialog.t1.querySelector('input').select();\n\t};\n\n\tthis.actionEditAttachment = function (action, args) {\n\n\t\t// vérification de la nouvelle description\n\t\tif (typeof action == 'boolean') {\n\t\t\treturn true;\n\t\t}\n\t\t// sauvegarde de la nouvelle description\n\t\telse if (typeof action == 'string') {\n\n\t\t\t// args = [id, action, token]\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\txhr.open('POST', args[1] + '?id=' + args[0] + '&isAjax=true', true);\n\t\t\txhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\t\t\txhr.setRequestHeader('X-CSRF-Token', args[2]);\n\n\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\tif ([0, 200].has(xhr.status)) {\n\t\t\t\t\t\tif (xhr.responseText.indexOf('attachmentId') === 0) {\n\n\t\t\t\t\t\t\t// extrait l'id et la description du fichier enregistré\n\t\t\t\t\t\t\tvar elem, id, text;\n\t\t\t\t\t\t\tid = xhr.responseText.slice(0, xhr.responseText.indexOf(':'));\n\t\t\t\t\t\t\ttext = xhr.responseText.slice(xhr.responseText.indexOf(':') + 1);\n\n\t\t\t\t\t\t\t// description\n\t\t\t\t\t\t\telem = document.getElementById(id);\n\t\t\t\t\t\t\telem.querySelector('.description').textContent = text;\n\n\t\t\t\t\t\t\t// input type hidden\n\t\t\t\t\t\t\telem = elem.querySelector('input');\n\t\t\t\t\t\t\tif (elem)\n\t\t\t\t\t\t\t\telem.value = elem.value.slice(0, elem.value.lastIndexOf('|') + 1) + text;\n\n\t\t\t\t\t\t\tapijs.dialog.actionClose();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tapijsRedmine.error(xhr.responseText);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tapijsRedmine.error(xhr.status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\txhr.send('desc=' + encodeURIComponent(document.getElementById('apijsinput').value));\n\t\t}\n\t};\n\n\tthis.renameAttachment = function (elem, id, action, token) {\n\n\t\tvar name, text, title = apijs.i18n.translate(257);\n\n\t\tname = elem.parentNode.parentNode.querySelector('.filename').textContent.trim();\n\t\ttext = '[p][label for=\"apijsinput\"]' + apijs.i18n.translate(258) + '[/label][/p]' +\n\t\t\t\t'[input type=\"text\" name=\"name\" value=\"' + name + '\" spellcheck=\"false\" id=\"apijsinput\"]';\n\n\t\tapijs.dialog.dialogFormOptions(title, text, action, apijsRedmine.actionRenameAttachment, [id, action, token], 'editattach');\n\t};\n\n\tthis.actionRenameAttachment = function (action, args) {\n\n\t\t// vérification du nouveau nom\n\t\tif (typeof action == 'boolean') {\n\t\t\treturn true;\n\t\t}\n\t\t// sauvegarde du nouveau nom\n\t\telse if (typeof action == 'string') {\n\n\t\t\t// args = [id, action, token]\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\txhr.open('POST', args[1] + '?id=' + args[0] + '&isAjax=true', true);\n\t\t\txhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\t\t\txhr.setRequestHeader('X-CSRF-Token', args[2]);\n\n\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\tif ([0, 200].has(xhr.status)) {\n\t\t\t\t\t\tif (xhr.responseText.indexOf('attachmentId') === 0) {\n\n\t\t\t\t\t\t\t// extrait l'id et le nom du fichier enregistré\n\t\t\t\t\t\t\tvar elem, id, name, subelem, text;\n\t\t\t\t\t\t\tid = xhr.responseText.slice(0, xhr.responseText.indexOf(':'));\n\t\t\t\t\t\t\tname = xhr.responseText.slice(xhr.responseText.indexOf(':') + 1);\n\n\t\t\t\t\t\t\t// nom\n\t\t\t\t\t\t\telem = document.getElementById(id);\n\t\t\t\t\t\t\telem.querySelector('.filename').textContent = name;\n\n\t\t\t\t\t\t\t// urls sur a/href et input/value et button.download/onclick et button.show/onclick\n\t\t\t\t\t\t\t// pas de maj de src et srcset sur img pour éviter un appel réseau inutile\n\t\t\t\t\t\t\tsubelem = elem.querySelector('input');\n\t\t\t\t\t\t\tif (subelem) {\n\t\t\t\t\t\t\t\ttext = subelem.getAttribute('value');\n\t\t\t\t\t\t\t\tsubelem.setAttribute('value', name + text.substr(text.indexOf('|')));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsubelem = elem.querySelector('a');\n\t\t\t\t\t\t\tif (subelem) {\n\t\t\t\t\t\t\t\ttext = subelem.getAttribute('href');\n\t\t\t\t\t\t\t\tsubelem.setAttribute('href', text.substr(0, text.lastIndexOf('/') + 1) + name);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsubelem = elem.querySelector('button.download');\n\t\t\t\t\t\t\tif (subelem) {\n\t\t\t\t\t\t\t\ttext = subelem.getAttribute('onclick');\n\t\t\t\t\t\t\t\tsubelem.setAttribute('onclick', text.substr(0, text.lastIndexOf('/') + 1) + name + \"';\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsubelem = elem.querySelector('button.show');\n\t\t\t\t\t\t\tif (subelem) {\n\t\t\t\t\t\t\t\ttext = subelem.getAttribute('onclick');\n\t\t\t\t\t\t\t\tsubelem.setAttribute('onclick', text.substr(0, text.lastIndexOf('/') + 1) + name + \"';\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tapijs.dialog.actionClose();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tapijsRedmine.error(xhr.responseText);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tapijsRedmine.error(xhr.status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\txhr.send('name=' + encodeURIComponent(document.getElementById('apijsinput').value));\n\t\t}\n\t};\n\n\tthis.removeAttachment = function (elem, id, action, token) {\n\t\tapijs.dialog.dialogConfirmation(apijs.i18n.translate(250), apijs.i18n.translate(251), apijsRedmine.actionRemoveAttachment, [id, action, token]);\n\t};\n\n\tthis.actionRemoveAttachment = function (args) {\n\n\t\t// args = [id, action, token]\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('POST', args[1] + '?id=' + args[0] + '&isAjax=true', true);\n\t\txhr.setRequestHeader('X-CSRF-Token', args[2]);\n\n\t\txhr.onreadystatechange = function () {\n\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tif ([0, 200].has(xhr.status)) {\n\t\t\t\t\tif (xhr.responseText.indexOf('attachmentId') === 0) {\n\n\t\t\t\t\t\t// supprime le fichier de la page grâce à son id\n\t\t\t\t\t\tvar attachment = document.getElementById(xhr.responseText), elems = attachment.parentNode, idx = 0;\n\t\t\t\t\t\telems.removeChild(attachment);\n\n\t\t\t\t\t\t// supprime la liste des fichiers\n\t\t\t\t\t\tif (elems.querySelectorAll('dl, li').length < 1) {\n\t\t\t\t\t\t\telems.parentNode.removeChild(elems);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ou réattribue les ids du diaporama (pas de réinitialisation, on remet juste les ids en place)\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\telems.querySelectorAll('a[id][type]').forEach(function (elem) {\n\t\t\t\t\t\t\t\telem.setAttribute('id', elem.getAttribute('id').slice(0, elem.getAttribute('id').lastIndexOf('.') + 1) + idx++);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tapijs.dialog.actionClose();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tapijsRedmine.error(xhr.responseText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tapijsRedmine.error(xhr.status);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\txhr.send();\n\t};\n\n\tthis.clearCache = function (action) {\n\t\tapijs.dialog.dialogConfirmation(apijs.i18n.translate(259), apijs.i18n.translate(260), apijsRedmine.actionClearCache, action);\n\t};\n\n\tthis.actionClearCache = function (args) {\n\t\tapijs.dialog.remove('waiting', 'lock'); // obligatoire sinon demande de confirmation de quitter la page\n\t\tself.location.href = args;\n\t};\n\n})();\n\nif (typeof self.addEventListener == 'function')\n\tself.addEventListener('apijsload', apijsRedmine.start.bind(apijsRedmine));"],"names":["apijsRedmine","this","start","d","apijs","i18n","data","frca","cs","de","en","es","fr","it","ja","nl","pl","pt","ru","sk","tr","uk","zh","error","indexOf","dialog","dialogInformation","translate","remove","self","location","reload","editAttachment","elem","id","action","token","title","desc","parentNode","querySelector","textContent","trim","text","dialogFormOptions","actionEditAttachment","t1","select","args","xhr","XMLHttpRequest","open","setRequestHeader","onreadystatechange","readyState","has","status","responseText","slice","document","getElementById","value","lastIndexOf","actionClose","send","encodeURIComponent","renameAttachment","name","actionRenameAttachment","subelem","getAttribute","setAttribute","substr","removeAttachment","dialogConfirmation","actionRemoveAttachment","attachment","elems","idx","removeChild","querySelectorAll","length","forEach","clearCache","actionClearCache","href","addEventListener","bind"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../tmp/9r9f0y","styles-rtl.css"],"names":[],"mappings":"AAAA;;;;;;ACmBA,aAAe,OAAO,EAEtB,UAAY,UAAU,MAAQ,OAAO,EACrC,YAAc,MAAM,KACpB,iBAAmB,OAAO,KAE1B,8CACC,QAAQ,MAAO,QAAQ,KAAO,MAAM,wBACpC,OAAO,IAAI,MAAM,KAAM,iBAAiB,KAIzC,2BAA6B,OAAO,IAAI,EAAG,WAAW,MACtD,8BAAgC,SAAS,SAAU,OAAO,KAAM,EAAE,EAAE,EAAG,MAAM,MAAO,WAAW,MAC/F,kCAAoC,WAAW,IAC/C,kCAAoC,MAAM,KAC1C,0CAA4C,MAAM,KAElD,mCACC,QAAQ,MAAO,YAAY,KAAM,SAAS,OAC1C,UAAU,QAAS,MAAM,QAAS,YAAY,OAAQ,cAAc,SAGrE,+CAAiD,YAAY,KAE7D,oBAAsB,OAAO,IAAI,EAAG,QAAQ,EAAG,WAAW,KAC1D,uBAAyB,QAAQ,MAAO,KAAO,WAAW,iBAAiB,IAC3E,6BAA+B,iBAAiB,QAEhD,yBAA2B,eAAe,OAC1C,8BAAgC,QAAQ,EAAE,KAC1C,4BAA8B,QAAQ,EAAE,KACxC,iCAAmC,MAAM,KACzC,iCAAmC,MAAM,KAGzC,uBAAwB,qCACvB,QAAQ,aAAc,OAAO,EAAG,QAAQ,EAAG,MAAM,KAAM,OAAO,KAAM,eAAe,OACnF,gBAAgB,eAAiB,OAAO,EAAG,iBAAiB,YAAa,OAAO,QAAS,QAAQ,IAGlG,4BAA6B,qCAAyC,iBAAiB,qCACvF,gCAAkC,iBAAiB,sCACnD,8BAAgC,iBAAiB,kCACjD,8BAAgC,iBAAiB,qCACjD,4BAA8B,iBAAiB,gCAG/C,qCAAuC,OAAO,IAAK,QAAQ,KAAO,OAAO,IAAI,MAAM,KACnF,gDAAkD,YAAY,SAC9D,+CAAiD,OAAO,KAAM,EAAG,YAAY,KAC7E,iDAAqD,OAAO,EAC5D,iDAAmD,aAAa,IAAK,YAAY,KAAO,MAAM,KAAM,UAAU,MAAO,WAAW,MAChI,uDAAyD,OAAO,EAGhE,wBAA0B,OAAO,EAAG,OAAO,EAAG,cAAc,EAAG,UAAU","sourcesContent":["/*!\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/redmine/apijs\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL).\n */\n","/**\n * Created D/15/12/2013\n * Updated M/16/02/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/redmine/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& dialogues &&& */\n#apijsDialog { margin:0; }\n\n#apijsBox { font-size:0.8rem; border:0; }\n#apijsBox a { color:blue; }\n#apijsBox button { height:auto; }\n\n#apijsBox.options.editattach input[type=\"text\"] {\n\tdisplay:block; padding:0.3em; width:calc(100% - 4px - 0.6em);\n\tborder:1px solid #888; background-color:#EEE;\n}\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& albums et listes &&& */\nbody div.attachments.album { margin:1em 0; text-align:right; }\nbody div.attachments.album dd { position:relative; margin:0.5em 0 0 0; width:202px; min-height:1.8em; }\nbody div.attachments.album dd.big { min-height:5em; }\nbody div.attachments.album dd div { float:left; }\nbody div.attachments.album dd span.author { clear:both; }\n\nbody div.attachments.album dd span {\n\tdisplay:block; line-height:16px; overflow:hidden;\n\tfont-size:inherit; color:inherit; white-space:nowrap; text-overflow:ellipsis;\n}\n\nbody div.attachments.album dd span:first-child { margin-left:60px; }\n\nbody ul.attachments { margin:1em 0; padding:0; list-style:none; }\nbody ul.attachments li { padding:0.25em 0.5em; transition:background-color 0.3s; }\nbody ul.attachments li:hover { background-color:#EFEFEF; }\n\nbody ul.attachments li a { vertical-align:middle; }\nbody ul.attachments li strong { padding:0 0.3em; }\nbody ul.attachments li span { padding:0 0.1em; }\nbody ul.attachments li span.size { color:gray; }\nbody ul.attachments li span.date { color:gray; }\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& boutons &&& */\nbody button.attachment, body ul.attachments a[id^=\"slideshow\"] {\n\tdisplay:inline-block; margin:0; padding:0; width:16px; height:16px; vertical-align:middle;\n\ttext-decoration:none !important; border:0; background-color:transparent; cursor:pointer; opacity:0.75;\n}\n\nbody button.attachment.show, body ul.attachments a[id^=\"slideshow\"] { background-image:url(\"../../../images/magnifier.png\"); }\nbody button.attachment.download { background-image:url(\"../../../images/attachment.png\"); }\nbody button.attachment.delete { background-image:url(\"../../../images/delete.png\"); }\nbody button.attachment.rename { background-image:url(\"../../../images/wiki_edit.png\"); }\nbody button.attachment.edit { background-image:url(\"../../../images/edit.png\"); }\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& configuration &&& */\nbody fieldset.apijs.tabular.settings { margin:1em; padding:0.5em; border:1px solid #CCC; }\nbody fieldset.apijs.tabular.settings p span.cmd { white-space:pre-wrap; }\nbody fieldset.apijs.tabular.settings p em.info { margin:0.2em 0; line-height:140%; }\nbody fieldset.apijs.tabular.settings p a + em.info { margin:0; }\nbody fieldset.apijs.tabular.settings p label.bis { margin-right:1px; margin-left:0.7em; width:auto; min-width:5.5em; text-align:right; }\nbody fieldset.apijs.tabular.settings p label.bis input { margin:0; }\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& navigateur &&& */\nbody .flash.error.apijs { margin:0; border:0; border-radius:0; font-size:11px; }"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../tmp/iCXibM","styles.css"],"names":[],"mappings":"AAAA;;;;;;ACmBA,aAAe,OAAO,EAEtB,UAAY,UAAU,MAAQ,OAAO,EACrC,YAAc,MAAM,KACpB,iBAAmB,OAAO,KAE1B,8CACC,QAAQ,MAAO,QAAQ,KAAO,MAAM,wBACpC,OAAO,IAAI,MAAM,KAAM,iBAAiB,KAIzC,2BAA6B,OAAO,IAAI,EAAG,WAAW,KACtD,8BAAgC,SAAS,SAAU,OAAO,KAAM,EAAE,EAAE,EAAG,MAAM,MAAO,WAAW,MAC/F,kCAAoC,WAAW,IAC/C,kCAAoC,MAAM,MAC1C,0CAA4C,MAAM,KAElD,mCACC,QAAQ,MAAO,YAAY,KAAM,SAAS,OAC1C,UAAU,QAAS,MAAM,QAAS,YAAY,OAAQ,cAAc,SAGrE,+CAAiD,aAAa,KAE9D,oBAAsB,OAAO,IAAI,EAAG,QAAQ,EAAG,WAAW,KAC1D,uBAAyB,QAAQ,MAAO,KAAO,WAAW,iBAAiB,IAC3E,6BAA+B,iBAAiB,QAEhD,yBAA2B,eAAe,OAC1C,8BAAgC,QAAQ,EAAE,KAC1C,4BAA8B,QAAQ,EAAE,KACxC,iCAAmC,MAAM,KACzC,iCAAmC,MAAM,KAGzC,uBAAwB,qCACvB,QAAQ,aAAc,OAAO,EAAG,QAAQ,EAAG,MAAM,KAAM,OAAO,KAAM,eAAe,OACnF,gBAAgB,eAAiB,OAAO,EAAG,iBAAiB,YAAa,OAAO,QAAS,QAAQ,IAGlG,4BAA6B,qCAAyC,iBAAiB,qCACvF,gCAAkC,iBAAiB,sCACnD,8BAAgC,iBAAiB,kCACjD,8BAAgC,iBAAiB,qCACjD,4BAA8B,iBAAiB,gCAG/C,qCAAuC,OAAO,IAAK,QAAQ,KAAO,OAAO,IAAI,MAAM,KACnF,gDAAkD,YAAY,SAC9D,+CAAiD,OAAO,KAAM,EAAG,YAAY,KAC7E,iDAAqD,OAAO,EAC5D,iDAAmD,YAAY,IAAK,aAAa,KAAO,MAAM,KAAM,UAAU,MAAO,WAAW,KAChI,uDAAyD,OAAO,EAGhE,wBAA0B,OAAO,EAAG,OAAO,EAAG,cAAc,EAAG,UAAU","sourcesContent":["/*!\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/redmine/apijs\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL).\n */\n","/**\n * Created D/15/12/2013\n * Updated M/16/02/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/redmine/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& dialogues &&& */\n#apijsDialog { margin:0; }\n\n#apijsBox { font-size:0.8rem; border:0; }\n#apijsBox a { color:blue; }\n#apijsBox button { height:auto; }\n\n#apijsBox.options.editattach input[type=\"text\"] {\n\tdisplay:block; padding:0.3em; width:calc(100% - 4px - 0.6em);\n\tborder:1px solid #888; background-color:#EEE;\n}\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& albums et listes &&& */\nbody div.attachments.album { margin:1em 0; text-align:left; }\nbody div.attachments.album dd { position:relative; margin:0.5em 0 0 0; width:202px; min-height:1.8em; }\nbody div.attachments.album dd.big { min-height:5em; }\nbody div.attachments.album dd div { float:right; }\nbody div.attachments.album dd span.author { clear:both; }\n\nbody div.attachments.album dd span {\n\tdisplay:block; line-height:16px; overflow:hidden;\n\tfont-size:inherit; color:inherit; white-space:nowrap; text-overflow:ellipsis;\n}\n\nbody div.attachments.album dd span:first-child { margin-right:60px; }\n\nbody ul.attachments { margin:1em 0; padding:0; list-style:none; }\nbody ul.attachments li { padding:0.25em 0.5em; transition:background-color 0.3s; }\nbody ul.attachments li:hover { background-color:#EFEFEF; }\n\nbody ul.attachments li a { vertical-align:middle; }\nbody ul.attachments li strong { padding:0 0.3em; }\nbody ul.attachments li span { padding:0 0.1em; }\nbody ul.attachments li span.size { color:gray; }\nbody ul.attachments li span.date { color:gray; }\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& boutons &&& */\nbody button.attachment, body ul.attachments a[id^=\"slideshow\"] {\n\tdisplay:inline-block; margin:0; padding:0; width:16px; height:16px; vertical-align:middle;\n\ttext-decoration:none !important; border:0; background-color:transparent; cursor:pointer; opacity:0.75;\n}\n\nbody button.attachment.show, body ul.attachments a[id^=\"slideshow\"] { background-image:url(\"../../../images/magnifier.png\"); }\nbody button.attachment.download { background-image:url(\"../../../images/attachment.png\"); }\nbody button.attachment.delete { background-image:url(\"../../../images/delete.png\"); }\nbody button.attachment.rename { background-image:url(\"../../../images/wiki_edit.png\"); }\nbody button.attachment.edit { background-image:url(\"../../../images/edit.png\"); }\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& configuration &&& */\nbody fieldset.apijs.tabular.settings { margin:1em; padding:0.5em; border:1px solid #CCC; }\nbody fieldset.apijs.tabular.settings p span.cmd { white-space:pre-wrap; }\nbody fieldset.apijs.tabular.settings p em.info { margin:0.2em 0; line-height:140%; }\nbody fieldset.apijs.tabular.settings p a + em.info { margin:0; }\nbody fieldset.apijs.tabular.settings p label.bis { margin-left:1px; margin-right:0.7em; width:auto; min-width:5.5em; text-align:left; }\nbody fieldset.apijs.tabular.settings p label.bis input { margin:0; }\n\n/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& navigateur &&& */\nbody .flash.error.apijs { margin:0; border:0; border-radius:0; font-size:11px; }"]}