redmine_apijs 6.9.5 → 6.9.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README +18 -14
  3. data/app/controllers/apijs_controller.rb +1 -1
  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 +36 -18
  7. data/assets/javascripts/apijs-redmine.js +3 -3
  8. data/assets/javascripts/apijs-redmine.min.js +1 -1
  9. data/assets/javascripts/apijs-redmine.min.js.map +1 -1
  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 -1
  16. data/assets/stylesheets/apijs-redmine.css +8 -10
  17. data/assets/stylesheets/apijs-redmine.min.css +2 -2
  18. data/assets/stylesheets/apijs-redmine.min.css.map +1 -1
  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/cs.yml +0 -2
  24. data/config/locales/de.yml +0 -2
  25. data/config/locales/el.yml +0 -2
  26. data/config/locales/en.yml +0 -2
  27. data/config/locales/es.yml +0 -2
  28. data/config/locales/fr.yml +0 -2
  29. data/config/locales/hu.yml +0 -2
  30. data/config/locales/it.yml +0 -2
  31. data/config/locales/ja.yml +0 -2
  32. data/config/locales/nl.yml +0 -2
  33. data/config/locales/pl.yml +0 -2
  34. data/config/locales/pt-BR.yml +0 -2
  35. data/config/locales/pt.yml +0 -2
  36. data/config/locales/ro.yml +0 -2
  37. data/config/locales/ru.yml +0 -2
  38. data/config/locales/sk.yml +0 -2
  39. data/config/locales/tr.yml +1 -3
  40. data/config/locales/uk.yml +0 -2
  41. data/config/locales/zh.yml +0 -2
  42. data/config/routes.rb +1 -1
  43. data/init.rb +2 -2
  44. data/lib/apijs_attachment.rb +1 -1
  45. data/lib/apijs_files.rb +1 -1
  46. data/lib/image.py +106 -97
  47. data/lib/redmine_apijs.rb +1 -1
  48. data/lib/useragentparser.rb +6 -6
  49. data/redmine_apijs.gemspec +1 -1
  50. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 17f8c7b2637bc19baf4c90f746395056b1f25f42854daa211a45ec6bb3f35235
4
- data.tar.gz: fa0b27e3131242ad7c044b6c1a11b1fde62183d96216330874bafd2ad4164355
3
+ metadata.gz: b87f02391afec47987b84f29a1c6adca0e02a8c96087944657ee5eb42d1e3c1e
4
+ data.tar.gz: 2ee54e532fa3af98fc67fabaff1812e703f61501820f09df0f2bd7d94fb672f3
5
5
  SHA512:
6
- metadata.gz: 1167d4ad1f1c944e3c9809e851ffc18110ac97c5ff8fdb38d7b400d1e77bc151f2b6429a1e1ca3875db9d22cee8dab81c0261f1fc3107027ce6e59ff91674ae4
7
- data.tar.gz: 0ce19ca1bdf90eea6ba64dba2f852387cc7e30ce0d5aabe3955e712b23d07b593ab7e449c1a5edb93cfd45080d6fb05b5653c79d01cab64aa34c0d1930eef581
6
+ metadata.gz: 156d7557ee4fe322ae84693651905213282926e7be0f82370a998519fe8231b89a7d9f57c3906779c22d75a0e781cba7c978cc57ba3f40cb9496b4213bc226a5
7
+ data.tar.gz: fe01ffb198a4f193c5848924f4683b24070a90ed893ce46c83baceaef58117ec47ed1a036e93694809c51f53667824033649933e01f6d6e0ea9213239743c30e
data/README CHANGED
@@ -1,40 +1,44 @@
1
1
  Docs : https://www.luigifab.fr/redmine/apijs
2
2
  Tracker : https://github.com/luigifab/redmine-apijs
3
- Rubygems : https://rubygems.org/gems/redmine_apijs
4
- Plugin : Luigifab/Apijs
5
- License : GNU GPL 2+ (https://opensource.org/licenses/gpl-2.0)
6
- Copyright : 2008-2023 Fabrice Creuzot (luigifab) <code~luigifab~fr>
3
+ RubyGems : https://rubygems.org/gems/redmine_apijs
4
+ Plugin : Luigifab/Apijs (original)
5
+ License : GNU GPL 2.0+ (https://opensource.org/licenses/gpl-2.0)
6
+ Copyright : 2008-2024 Fabrice Creuzot (luigifab) <code~luigifab~fr>
7
7
 
8
8
 
9
9
 
10
10
 
11
11
 
12
- IF YOU FOUND A MISTAKE OR A BUG, PLEASE CONTACT ME (IN FRENCH OR IN ENGLISH).
13
- CSS AND JS FILES ARE MINIFIED WITH clean-css (github.com/jakubpawlowicz/clean-css) AND uglify-js (github.com/mishoo/uglifyjs).
14
- ALL FILES (INCLUDING DOCUMENTATION AND TRANSLATIONS) ARE LICENSED UNDER THE TERMS OF THE GNU GPL 2+ LICENSE.
15
- THAT BEING SAID SOME FILES COME FROM OTHER PROJECTS AND ARE UNDER OTHER LICENSES (SEE AT THE END OF THIS FILE).
12
+ CSS AND JS FILES ARE MINIFIED WITH clean-css (github.com/jakubpawlowicz/clean-css) AND uglify-js (github.com/mishoo/uglifyjs)
13
+ YML LOCALES FILES ARE GENERATED WITH translator (https://github.com/luigifab/translator)
14
+ ALL FILES ARE LICENSED UNDER THE TERMS OF THE GNU GPL 2.0+ LICENSE
15
+ THAT BEING SAID SOME FILES COME FROM OTHER PROJECTS AND ARE UNDER OTHER LICENSES (SEE AT THE END OF THIS FILE)
16
16
 
17
17
 
18
18
  Rewrite
19
19
  - app/views/attachments/_links.html.erb
20
20
  - lib/apijs_attachment.rb
21
21
  Depends
22
+ - python3
22
23
  - python-pil
23
24
  - python-scour
24
25
  - libimage-exiftool-perl (optional)
25
26
  - ffmpegthumbnailer (optional)
26
- - also used: command -v, python3, nproc, du -hs, cut -f1
27
+ - nproc
28
+ - du -hs | cut -f1
27
29
  Notes
28
30
  - For the app, read: https://www.luigifab.fr/apijs
29
31
  - For the Redmine plugin, read: https://www.luigifab.fr/redmine/apijs
30
32
  - For the OpenMage module, read: https://www.luigifab.fr/openmage/apijs
33
+ - For the Dolibarr module, read install: https://www.luigifab.fr/apijs
34
+ - For the Symfony bundle, read install: https://www.luigifab.fr/apijs
31
35
 
32
36
 
33
37
  Translations in de-DE (deutsch/Deutschland) by:
34
38
  - Philip Junietz <info~label-park~com> 2016
35
39
  - Pamela Steinborn <st.pamela~laposte~net> 2016
36
40
  Translations in en-US (english/United-States) by:
37
- - Fabrice Creuzot (luigifab) <code~luigifab~fr> 2008-2023
41
+ - Fabrice Creuzot (luigifab) <code~luigifab~fr> 2008-2024
38
42
  - Brian Legrand <mrbibi1987~gmail~com> 2012
39
43
  - Pascale Scellier <scellier.pascale~orange~fr> 2016
40
44
  Translations in es-ES (español/España) by:
@@ -44,7 +48,7 @@ Translations in es-ES (español/España) by:
44
48
  - Hélène Vergine <vergineh~gmail~com> 2017, 2020
45
49
  - Guillaume Genetet <genetet.incorporated~gmail~com> 2018 https://fr.tipeee.com/william-broome
46
50
  Translations in fr-FR (français/France) by:
47
- - Fabrice Creuzot (luigifab) <code~luigifab~fr> 2008-2023
51
+ - Fabrice Creuzot (luigifab) <code~luigifab~fr> 2008-2024
48
52
  - Pascale Scellier <scellier.pascale~orange~fr> 2016
49
53
  Translations in it-IT (italiano/Italia) by:
50
54
  - Maria Grasso <mgrasso~outlook~fr> 2016-2017
@@ -60,9 +64,9 @@ If you like, take some of your time to improve the translations, go to https://b
60
64
 
61
65
 
62
66
  File: /lib/useragentparser.rb
63
- Source: https://github.com/donatj/PhpUserAgent + https://gist.github.com/luigifab/19a68d9aa98fa80f2961809d7cec59c0 (1.7.0-fork1)
64
- Copyright: 2013-2022 Jesse G. Donat <donatj~gmail~com>
65
- Copyright: 2019-2022 Fabrice Creuzot (luigifab) <code~luigifab~fr>
67
+ Source: https://github.com/donatj/PhpUserAgent + https://gist.github.com/luigifab/19a68d9aa98fa80f2961809d7cec59c0 (1.8.0-fork2)
68
+ Copyright: 2013-2023 Jesse G. Donat <donatj~gmail~com>
69
+ Copyright: 2019-2023 Fabrice Creuzot (luigifab) <code~luigifab~fr>
66
70
  License: MIT (https://opensource.org/licenses/mit)
67
71
 
68
72
  Files: /assets/fonts/apijs/fontello.woff /assets/fonts/apijs/fontello.woff2
@@ -2,7 +2,7 @@
2
2
  # Created J/12/12/2013
3
3
  # Updated M/05/07/2022
4
4
  #
5
- # Copyright 2008-2023 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
6
6
  # https://github.com/luigifab/redmine-apijs
7
7
  #
8
8
  # This program is free software, you can redistribute it or modify
@@ -2,7 +2,7 @@
2
2
  # Created S/17/08/2019
3
3
  # Updated L/25/05/2020
4
4
  #
5
- # Copyright 2008-2023 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
6
6
  # https://github.com/luigifab/redmine-apijs
7
7
  #
8
8
  # This program is free software, you can redistribute it or modify
@@ -2,7 +2,7 @@
2
2
  # Created L/21/05/2012
3
3
  # Updated J/26/05/2022
4
4
  #
5
- # Copyright 2008-2023 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
6
6
  # https://github.com/luigifab/redmine-apijs
7
7
  #
8
8
  # This program is free software, you can redistribute it or modify
@@ -1,8 +1,8 @@
1
1
  <%
2
2
  # Created J/12/12/2013
3
- # Updated V/05/08/2022
3
+ # Updated V/22/12/2023
4
4
  #
5
- # Copyright 2008-2023 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ # Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
6
6
  # https://github.com/luigifab/redmine-apijs
7
7
  #
8
8
  # This program is free software, you can redistribute it or modify
@@ -25,33 +25,49 @@ size_show = 0
25
25
  if File.directory?(ALL_FILES)
26
26
  size_files = `du -hs #{ALL_FILES} | cut -f1`.strip!
27
27
  size = size_files.to_f
28
- size_files = number_to_human_size(size * 1024 * 1024 * 1024) if size_files =~ /G/
29
- size_files = number_to_human_size(size * 1024 * 1024) if size_files =~ /M/
30
- size_files = number_to_human_size(size * 1024) if size_files =~ /K/
28
+ if size_files =~ /G/
29
+ size_files = number_to_human_size(size * 1024 * 1024 * 1024)
30
+ elsif size_files =~ /M/
31
+ size_files = number_to_human_size(size * 1024 * 1024)
32
+ elsif size_files =~ /K/
33
+ size_files = number_to_human_size(size * 1024)
34
+ end
31
35
  end
32
36
 
33
37
  if File.directory?(File.join(APIJS_ROOT, 'thumb'))
34
38
  size_thumb = `du -hs #{APIJS_ROOT}/thumb/ | cut -f1`.strip!
35
39
  size = size_thumb.to_f
36
- size_thumb = number_to_human_size(size * 1024 * 1024 * 1024) if size_thumb =~ /G/i
37
- size_thumb = number_to_human_size(size * 1024 * 1024) if size_thumb =~ /M/i
38
- size_thumb = number_to_human_size(size * 1024) if size_thumb =~ /K/i
40
+ if size_thumb =~ /G/i
41
+ size_thumb = number_to_human_size(size * 1024 * 1024 * 1024)
42
+ elsif size_thumb =~ /M/i
43
+ size_thumb = number_to_human_size(size * 1024 * 1024)
44
+ elsif size_thumb =~ /K/i
45
+ size_thumb = number_to_human_size(size * 1024)
46
+ end
39
47
  end
40
48
 
41
49
  if File.directory?(File.join(APIJS_ROOT, 'srcset'))
42
50
  size_srcset = `du -hs #{APIJS_ROOT}/srcset/ | cut -f1`.strip!
43
51
  size = size_srcset.to_f
44
- size_srcset = number_to_human_size(size * 1024 * 1024 * 1024) if size_srcset =~ /G/i
45
- size_srcset = number_to_human_size(size * 1024 * 1024) if size_srcset =~ /M/i
46
- size_srcset = number_to_human_size(size * 1024) if size_srcset =~ /K/i
52
+ if size_srcset =~ /G/i
53
+ size_srcset = number_to_human_size(size * 1024 * 1024 * 1024)
54
+ elsif size_srcset =~ /M/i
55
+ size_srcset = number_to_human_size(size * 1024 * 1024)
56
+ elsif size_srcset =~ /K/i
57
+ size_srcset = number_to_human_size(size * 1024)
58
+ end
47
59
  end
48
60
 
49
61
  if File.directory?(File.join(APIJS_ROOT, 'show'))
50
62
  size_show = `du -hs #{APIJS_ROOT}/show/ | cut -f1`.strip!
51
63
  size = size_show.to_f
52
- size_show = number_to_human_size(size * 1024 * 1024 * 1024) if size_show =~ /G/i
53
- size_show = number_to_human_size(size * 1024 * 1024) if size_show =~ /M/i
54
- size_show = number_to_human_size(size * 1024) if size_show =~ /K/i
64
+ if size_show =~ /G/i
65
+ size_show = number_to_human_size(size * 1024 * 1024 * 1024)
66
+ elsif size_show =~ /M/i
67
+ size_show = number_to_human_size(size * 1024 * 1024)
68
+ elsif size_show =~ /K/i
69
+ size_show = number_to_human_size(size * 1024)
70
+ end
55
71
  end
56
72
  %>
57
73
 
@@ -59,13 +75,15 @@ end
59
75
 
60
76
  <p style="margin:0.5em 1em; padding:0.5em;">
61
77
  Luigifab/Apijs <%= Redmine::Plugin.find(:redmine_apijs).version %>
62
- <span style="float:<%= l(:direction) == 'rtl' ? 'left' : 'right' %>; font-size:11px;">Stop russian war. <b>🇺🇦 Free Ukraine!</b> | <a href="https://www.redmine.org/plugins/apijs">redmine.org/plugins/apijs</a> | <a href="https://www.luigifab.fr/redmine/apijs">luigifab.fr/redmine/apijs</a> | <a href="https://www.luigifab.fr/apijs">luigifab.fr/apijs</a> | ⚠ IPv6</span>
78
+ <span style="float:<%= l(:direction) == 'rtl' ? 'left' : 'right' %>; font-size:11px;">
79
+ Stop russian war. <b>🇺🇦 Free Ukraine!</b> | <a href="https://www.redmine.org/plugins/apijs">redmine.org</a> | <a href="https://github.com/luigifab/redmine-apijs">github.com</a> | <a href="https://www.luigifab.fr/redmine/apijs">luigifab.fr/redmine/apijs</a> - <a href="https://www.luigifab.fr/apijs">luigifab.fr/apijs</a> - ⚠ IPv6
80
+ </span>
63
81
  </p>
64
82
 
65
83
  <fieldset class="box apijs tabular settings">
66
84
  <legend><%= raw l(:apijs_config_apijs) %></legend>
67
85
  <p>
68
- <label for="apijsEnabled"><%= raw l(:apijs_config_enable) %></label>
86
+ <label for="apijsEnabled"><%= raw l(:button_activate) %></label>
69
87
  <select name="settings[enabled]" id="apijsEnabled">
70
88
  <option value="0" <%= raw 'selected="selected"' if settings['enabled'] != '1' %>><%= raw l(:general_text_No) %></option>
71
89
  <option value="1" <%= raw 'selected="selected"' if settings['enabled'] == '1' %>><%= raw l(:general_text_Yes) %></option>
@@ -88,7 +106,7 @@ end
88
106
  <option value="0" <%= raw 'selected="selected"' if settings['browser'] != '1' %>><%= raw l(:general_text_No) %></option>
89
107
  <option value="1" <%= raw 'selected="selected"' if settings['browser'] == '1' %>><%= raw l(:general_text_Yes) %></option>
90
108
  </select>
91
- <em class="info"><%= raw l(:apijs_config_browser_help) %></em>
109
+ <em class="info">Firefox 36+, Chrome 32+, Opera 19+, Edge 16+, Safari 9+</em>
92
110
  </p>
93
111
  <p>
94
112
  <label><%= raw l(:label_role_and_permissions) %></label>
@@ -220,7 +238,7 @@ end
220
238
  <p dir="ltr">
221
239
  <label>python / python-pil / python-scour</label>
222
240
  <span class="cmd"><%= raw Attachment.new.getProgramVersions(
223
- '(jpg jpeg gif png webp..., <a href="https://pillow.readthedocs.io/en/latest/">docs</a>)',
241
+ '(jpg png gif webp..., <a href="https://pillow.readthedocs.io/en/latest/">docs</a>)',
224
242
  '(svg, <a href="https://github.com/scour-project/scour/wiki/Documentation">docs</a>)') %></span>
225
243
  <em class="info">python3 .../redmine_apijs/lib/image.py .../xyz.jpg .../xyz.jpg 200 150 90 2&gt;&amp;1</em>
226
244
  <em class="info">python3 .../redmine_apijs/lib/image.py .../xyz.ogv .../xyz.jpg 200 150 90 2&gt;&amp;1</em>
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Created D/15/12/2013
3
- * Updated J/11/08/2022
3
+ * Updated D/03/12/2023
4
4
  *
5
- * Copyright 2008-2023 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
5
+ * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
6
6
  * https://github.com/luigifab/redmine-apijs
7
7
  *
8
8
  * This program is free software, you can redistribute it or modify
@@ -24,7 +24,7 @@ var apijsRedmine = new (function () {
24
24
 
25
25
  var d = apijs.i18n.data;
26
26
  if (!d.frca) d.frca = {};
27
- // https://docs.google.com/spreadsheets/d/1UUpKZ-YAAlcfvGHYwt6aUM9io390j0-fIL0vMRh1pW0/edit?usp=sharing
27
+ // @see https://docs.google.com/spreadsheets/d/1UUpKZ-YAAlcfvGHYwt6aUM9io390j0-fIL0vMRh1pW0/edit?usp=sharing
28
28
  // auto start
29
29
  d.cs[250] = "Smazat soubor";
30
30
  d.cs[251] = "Opravdu chcete tento soubor smazat?[br]Pozor, tuto operaci nelze vrátit zpět.";
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Copyright 2008-2023 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
2
+ * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>
3
3
  * https://github.com/luigifab/redmine-apijs
4
4
  * This program is free software, you can redistribute it or modify
5
5
  * it under the terms of the GNU General Public License (GPL).
@@ -1 +1 @@
1
- {"version":3,"sources":["apijs-redmine.js"],"sourcesContent":["/**\n * Created D/15/12/2013\n * Updated J/11/08/2022\n *\n * Copyright 2008-2023 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/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.init = 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.el[252] = \"Σφάλμα\";\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.hu[252] = \"Hiba\";\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.ro[252] = \"Eroare\";\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.tr[259] = \"Önbelleği temizle\";\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.substring(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.substring(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.substring(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.substring(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\tattachment.remove();\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.remove();\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.init.bind(apijsRedmine));"],"names":["apijsRedmine","this","init","d","apijs","i18n","data","frca","cs","de","el","en","es","fr","hu","it","ja","nl","pl","pt","ro","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","substring","removeAttachment","dialogConfirmation","actionRemoveAttachment","attachment","elems","idx","querySelectorAll","length","forEach","clearCache","actionClearCache","href","addEventListener","bind"],"mappings":"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"}
1
+ {"version":3,"sources":["apijs-redmine.js"],"sourcesContent":["/**\n * Created D/15/12/2013\n * Updated D/03/12/2023\n *\n * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/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.init = function () {\n\n\t\tvar d = apijs.i18n.data;\n\t\tif (!d.frca) d.frca = {};\n\t\t// @see 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.el[252] = \"Σφάλμα\";\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.hu[252] = \"Hiba\";\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.ro[252] = \"Eroare\";\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.tr[259] = \"Önbelleği temizle\";\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.substring(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.substring(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.substring(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.substring(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\tattachment.remove();\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.remove();\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.init.bind(apijsRedmine));"],"names":["apijsRedmine","this","init","d","apijs","i18n","data","frca","cs","de","el","en","es","fr","hu","it","ja","nl","pl","pt","ro","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","substring","removeAttachment","dialogConfirmation","actionRemoveAttachment","attachment","elems","idx","querySelectorAll","length","forEach","clearCache","actionClearCache","href","addEventListener","bind"],"mappings":"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"}