redmine_apijs 6.6.0 → 6.8.2

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 (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; }"]}