redmine_apijs 6.9.5 → 6.9.7
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.
- checksums.yaml +4 -4
- data/README +20 -15
- data/app/controllers/apijs_controller.rb +1 -1
- data/app/views/application/_browser.html.erb +1 -1
- data/app/views/attachments/_links.html.erb +1 -1
- data/app/views/settings/_apijs.html.erb +36 -18
- data/assets/javascripts/apijs-redmine.js +3 -3
- data/assets/javascripts/apijs-redmine.min.js +2 -2
- data/assets/javascripts/apijs-redmine.min.js.map +1 -1
- data/assets/javascripts/apijs.min.js +3 -3
- data/assets/javascripts/apijs.min.js.map +1 -1
- data/assets/stylesheets/apijs-print.min.css +2 -2
- data/assets/stylesheets/apijs-print.min.css.map +1 -1
- data/assets/stylesheets/apijs-redmine-rtl.min.css +2 -2
- data/assets/stylesheets/apijs-redmine-rtl.min.css.map +1 -1
- data/assets/stylesheets/apijs-redmine.css +8 -10
- data/assets/stylesheets/apijs-redmine.min.css +2 -2
- data/assets/stylesheets/apijs-redmine.min.css.map +1 -1
- data/assets/stylesheets/apijs-screen-rtl.min.css +3 -3
- data/assets/stylesheets/apijs-screen-rtl.min.css.map +1 -1
- data/assets/stylesheets/apijs-screen.min.css +3 -3
- data/assets/stylesheets/apijs-screen.min.css.map +1 -1
- data/config/locales/cs.yml +0 -2
- data/config/locales/de.yml +0 -2
- data/config/locales/el.yml +0 -2
- data/config/locales/en.yml +0 -2
- data/config/locales/es.yml +0 -2
- data/config/locales/fr.yml +0 -2
- data/config/locales/hu.yml +0 -2
- data/config/locales/it.yml +0 -2
- data/config/locales/ja.yml +0 -2
- data/config/locales/nl.yml +0 -2
- data/config/locales/pl.yml +0 -2
- data/config/locales/pt-BR.yml +0 -2
- data/config/locales/pt.yml +0 -2
- data/config/locales/ro.yml +0 -2
- data/config/locales/ru.yml +0 -2
- data/config/locales/sk.yml +0 -2
- data/config/locales/tr.yml +1 -3
- data/config/locales/uk.yml +0 -2
- data/config/locales/zh.yml +0 -2
- data/config/routes.rb +1 -1
- data/init.rb +3 -3
- data/lib/apijs_attachment.rb +5 -3
- data/lib/apijs_files.rb +1 -1
- data/lib/image.py +106 -97
- data/lib/redmine_apijs.rb +1 -1
- data/lib/useragentparser.rb +17 -11
- data/redmine_apijs.gemspec +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 185b348a4bc0b92a4bed92fec1775e320cc677418ac02ee81024d520b605a821
|
4
|
+
data.tar.gz: 9ecfc4c17ac8021b390d5fba9ae4921b2141a3b82a07e97cce87f746cd713688
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6286006c99bc98f3b29e1b6b727fdf0be9ba7f9f0024f9deeeda70d62362f986bd74b798b3b33e8c7eef5352950702f6942d2bcc7e9357220f00f55a9d9fcd3
|
7
|
+
data.tar.gz: 1e3875c4ff19a1d2afb314b1b1a6a4e2b2f7bd21515e8d5dc2afe81a8195618b489e80533965a97c85996e2a66f05ccfc03de6ed1a8a70ec9433504d444e181b
|
data/README
CHANGED
@@ -1,40 +1,45 @@
|
|
1
1
|
Docs : https://www.luigifab.fr/redmine/apijs
|
2
2
|
Tracker : https://github.com/luigifab/redmine-apijs
|
3
|
-
|
4
|
-
Plugin : Luigifab/Apijs
|
5
|
-
License : GNU GPL 2+ (https://opensource.org/licenses/gpl-2.0)
|
6
|
-
Copyright : 2008-
|
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-2025 Fabrice Creuzot (luigifab) <code~luigifab~fr>
|
7
7
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
ALL FILES
|
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
|
-
- libimage-exiftool-perl
|
25
|
+
- libimage-exiftool-perl
|
25
26
|
- ffmpegthumbnailer (optional)
|
26
|
-
-
|
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
|
32
|
+
- For the Maho module, read: https://www.luigifab.fr/maho/apijs
|
30
33
|
- For the OpenMage module, read: https://www.luigifab.fr/openmage/apijs
|
34
|
+
- For the Dolibarr module, read install: https://www.luigifab.fr/apijs
|
35
|
+
- For the Symfony bundle, read install: https://www.luigifab.fr/apijs
|
31
36
|
|
32
37
|
|
33
38
|
Translations in de-DE (deutsch/Deutschland) by:
|
34
39
|
- Philip Junietz <info~label-park~com> 2016
|
35
40
|
- Pamela Steinborn <st.pamela~laposte~net> 2016
|
36
41
|
Translations in en-US (english/United-States) by:
|
37
|
-
- Fabrice Creuzot (luigifab) <code~luigifab~fr> 2008-
|
42
|
+
- Fabrice Creuzot (luigifab) <code~luigifab~fr> 2008-2025
|
38
43
|
- Brian Legrand <mrbibi1987~gmail~com> 2012
|
39
44
|
- Pascale Scellier <scellier.pascale~orange~fr> 2016
|
40
45
|
Translations in es-ES (español/España) by:
|
@@ -44,7 +49,7 @@ Translations in es-ES (español/España) by:
|
|
44
49
|
- Hélène Vergine <vergineh~gmail~com> 2017, 2020
|
45
50
|
- Guillaume Genetet <genetet.incorporated~gmail~com> 2018 https://fr.tipeee.com/william-broome
|
46
51
|
Translations in fr-FR (français/France) by:
|
47
|
-
- Fabrice Creuzot (luigifab) <code~luigifab~fr> 2008-
|
52
|
+
- Fabrice Creuzot (luigifab) <code~luigifab~fr> 2008-2025
|
48
53
|
- Pascale Scellier <scellier.pascale~orange~fr> 2016
|
49
54
|
Translations in it-IT (italiano/Italia) by:
|
50
55
|
- Maria Grasso <mgrasso~outlook~fr> 2016-2017
|
@@ -60,9 +65,9 @@ If you like, take some of your time to improve the translations, go to https://b
|
|
60
65
|
|
61
66
|
|
62
67
|
File: /lib/useragentparser.rb
|
63
|
-
Source: https://github.com/donatj/PhpUserAgent + https://gist.github.com/luigifab/19a68d9aa98fa80f2961809d7cec59c0 (1.
|
64
|
-
Copyright: 2013-
|
65
|
-
Copyright: 2019-
|
68
|
+
Source: https://github.com/donatj/PhpUserAgent + https://gist.github.com/luigifab/19a68d9aa98fa80f2961809d7cec59c0 (1.10.0-fork1)
|
69
|
+
Copyright: 2013-2024 Jesse G. Donat <donatj~gmail~com>
|
70
|
+
Copyright: 2019-2025 Fabrice Creuzot (luigifab) <code~luigifab~fr>
|
66
71
|
License: MIT (https://opensource.org/licenses/mit)
|
67
72
|
|
68
73
|
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-
|
5
|
+
# Copyright 2008-2025 | 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-
|
5
|
+
# Copyright 2008-2025 | 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-
|
5
|
+
# Copyright 2008-2025 | 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/
|
3
|
+
# Updated V/22/12/2023
|
4
4
|
#
|
5
|
-
# Copyright 2008-
|
5
|
+
# Copyright 2008-2025 | 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
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
45
|
-
|
46
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
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;">
|
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(:
|
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"
|
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
|
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>&1</em>
|
226
244
|
<em class="info">python3 .../redmine_apijs/lib/image.py .../xyz.ogv .../xyz.jpg 200 150 90 2>&1</em>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
/**
|
2
2
|
* Created D/15/12/2013
|
3
|
-
* Updated
|
3
|
+
* Updated D/03/12/2023
|
4
4
|
*
|
5
|
-
* Copyright 2008-
|
5
|
+
* Copyright 2008-2025 | 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,8 +1,8 @@
|
|
1
1
|
/*!
|
2
|
-
* Copyright 2008-
|
2
|
+
* Copyright 2008-2025 | 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).
|
6
6
|
*/
|
7
|
-
var apijsRedmine=new function(){
|
7
|
+
var apijsRedmine=new function(){this.init=function(){var e=apijs.i18n.data;e.frca||(e.frca={}),e.cs[250]="Smazat soubor",e.cs[251]="Opravdu chcete tento soubor smazat?[br]Pozor, tuto operaci nelze vrátit zpět.",e.cs[252]="Chyba",e.de[250]="Eine Datei löschen",e.de[251]="Sind Sie sicher, dass Sie diese Datei löschen möchten?[br]Achtung, diese Aktion ist unrückgängig.",e.de[252]="Fehler",e.de[253]="Sie verfügen nicht über die notwendigen Rechte um diese Operation durchzuführen, bitte [a §]aktualisieren Sie die Seite[/a].",e.de[254]="Es tut uns leid, diese Datei existiert nicht mehr, bitte [a §]aktualisieren Sie die Seite[/a].",e.de[255]="Eine Beschreibung bearbeiten",e.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.",e.el[252]="Σφάλμα",e.en[250]="Remove file",e.en[251]="Are you sure you want to remove this file?[br]Be careful, you can't cancel this operation.",e.en[252]="Error",e.en[253]="You are not authorized to perform this operation, please [a §]refresh the page[/a].",e.en[254]="Sorry, the file no longer exists, please [a §]refresh the page[/a].",e.en[255]="Edit description",e.en[256]="Enter below the new description for the file. To remove the description, leave the field empty.",e.en[257]="Rename file",e.en[258]="Enter below the new name for the file.",e.en[259]="Clear cache",e.en[260]="Are you sure you want to clear the cache?[br]Be careful, you can't cancel this operation.",e.es[250]="Borrar un archivo",e.es[251]="¿Está usted seguro(a) de que desea eliminar este archivo?[br]Atención, pues no podrá cancelar esta operación.",e.es[253]="No está autorizado-a para llevar a cabo esta operación, por favor [a §]actualice la página[/a].",e.es[254]="Disculpe, pero el archivo ya no existe, por favor [a §]actualice la página[/a].",e.es[255]="Editar una descripción",e.es[256]="Introduzca a continuación la nueva descripción para el archivo. Para eliminar la descripción, deje el campo en blanco.",e.es[259]="Vaciar la caché",e.es[260]="¿Está usted seguro(a) de querer vaciar la caché?[br]Cuidado, esta operación no puede ser cancelada.",e.fr[250]="Supprimer le fichier",e.fr[251]="Êtes-vous sûr(e) de vouloir supprimer ce fichier ?[br]Attention, cette opération n'est pas annulable.",e.fr[252]="Erreur",e.fr[253]="Vous n'êtes pas autorisé(e) à effectuer cette opération, veuillez [a §]actualiser la page[/a].",e.fr[254]="Désolé, le fichier n'existe plus, veuillez [a §]actualiser la page[/a].",e.fr[255]="Modifier la description",e.fr[256]="Saisissez ci-dessous la nouvelle description pour ce fichier. Pour supprimer la description, laissez le champ vide.",e.fr[257]="Renommer le fichier",e.fr[258]="Saisissez ci-dessous le nouveau nom pour ce fichier.",e.fr[259]="Vider le cache",e.fr[260]="Êtes-vous certain(e) de vouloir vider le cache ?[br]Attention, cette opération n'est pas annulable.",e.hu[252]="Hiba",e.it[250]="Cancella i file",e.it[251]="Sei sicura di voler eliminare il file?[br]Attenzione, questa operazione non può essere annullata.",e.it[252]="Errore",e.it[253]="Non siete autorizzati a eseguire questa operazione, vi preghiamo di [a §]ricaricare la pagina[/a].",e.it[254]="Spiacenti, il file non esiste più, vi preghiamo di [a §]ricaricare la pagina[/a].",e.it[255]="Modificare una descrizione",e.it[256]="Inserire qui sotto la nuova descrizione del file. Per cancellare la descrizione, lasciate lo spazio vuoto.",e.ja[250]="ファイルを削除",e.ja[252]="エラー",e.nl[252]="Fout",e.pl[250]="Usuń plik",e.pl[251]="Jesteś pewny, że chcesz usunąć ten plik?[br]Uwaga! Nie ma odwrotu od tej operacji.",e.pl[252]="Błąd",e.pt[250]="Suprimir um ficheiro",e.pt[251]="Tem certeza de que quer suprimir este ficheiro?[br]Cuidado, não pode cancelar esta operação.",e.pt[252]="Erro",e.pt[253]="Não é autorizado(a) para efetuar esta operação, por favor [a §]atualize a página[/a].",e.pt[254]="Lamento, o ficheiro já não existe, por favor [a §]atualize a página[/a].",e.pt[255]="Modificar uma descrição",e.pt[256]="Digite abaixo a nova descrição para este ficheiro. Para suprimir a descrição, deixe o campo vazio.",e.ro[252]="Eroare",e.ru[250]="Удалить файл",e.ru[251]="Вы уверены, что хотите удалить этот файл?[br]Осторожно, вы не сможете отменить эту операцию.",e.ru[252]="Ошибка",e.ru[253]="Вы не авторизованы для выполнения этой операции, пожалуйста [a §]обновите страницу[/a].",e.ru[254]="Извините, но файл не существует, пожалуйста [a §]обновите страницу[/a].",e.ru[255]="Редактировать описание",e.ru[256]="Ниже введите новое описание файла. Оставьте поле пустым, чтобы удалить описание.",e.sk[252]="Chyba",e.tr[252]="Hata",e.tr[259]="Önbelleği temizle",e.uk[252]="Помилка",e.zh[252]="错误信息"},this.error=function(e){"string"==typeof e&&e.indexOf("<!DOCTYPE")<0?apijs.dialog.dialogInformation(apijs.i18n.translate(252),e,"error"):(apijs.dialog.remove("lock"),self.location.reload())},this.editAttachment=function(e,t,a,i){var r=apijs.i18n.translate(255),e=e.parentNode.parentNode.querySelector(".description").textContent.trim(),e='[p][label for="apijsinput"]'+apijs.i18n.translate(256)+'[/label][/p][input type="text" name="description" value="'+e+'" spellcheck="true" id="apijsinput"]';apijs.dialog.dialogFormOptions(r,e,a,apijsRedmine.actionEditAttachment,[t,a,i],"editattach"),apijs.dialog.t1.querySelector("input").select()},this.actionEditAttachment=function(e,t){if("boolean"==typeof e)return!0;var a;"string"==typeof e&&((a=new XMLHttpRequest).open("POST",t[1]+"?id="+t[0]+"&isAjax=true",!0),a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.setRequestHeader("X-CSRF-Token",t[2]),a.onreadystatechange=function(){var e,t;4===a.readyState&&([0,200].has(a.status)?0===a.responseText.indexOf("attachmentId")?(t=a.responseText.slice(0,a.responseText.indexOf(":")),e=a.responseText.slice(a.responseText.indexOf(":")+1),(t=document.getElementById(t)).querySelector(".description").textContent=e,(t=t.querySelector("input"))&&(t.value=t.value.slice(0,t.value.lastIndexOf("|")+1)+e),apijs.dialog.actionClose()):apijsRedmine.error(a.responseText):apijsRedmine.error(a.status))},a.send("desc="+encodeURIComponent(document.getElementById("apijsinput").value)))},this.renameAttachment=function(e,t,a,i){var r=apijs.i18n.translate(257),e=e.parentNode.parentNode.querySelector(".filename").textContent.trim(),e='[p][label for="apijsinput"]'+apijs.i18n.translate(258)+'[/label][/p][input type="text" name="name" value="'+e+'" spellcheck="false" id="apijsinput"]';apijs.dialog.dialogFormOptions(r,e,a,apijsRedmine.actionRenameAttachment,[t,a,i],"editattach")},this.actionRenameAttachment=function(e,t){if("boolean"==typeof e)return!0;var r;"string"==typeof e&&((r=new XMLHttpRequest).open("POST",t[1]+"?id="+t[0]+"&isAjax=true",!0),r.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),r.setRequestHeader("X-CSRF-Token",t[2]),r.onreadystatechange=function(){var e,t,a,i;4===r.readyState&&([0,200].has(r.status)?0===r.responseText.indexOf("attachmentId")?(i=r.responseText.slice(0,r.responseText.indexOf(":")),a=r.responseText.slice(r.responseText.indexOf(":")+1),(i=document.getElementById(i)).querySelector(".filename").textContent=a,(e=i.querySelector("input"))&&(t=e.getAttribute("value"),e.setAttribute("value",a+t.substring(t.indexOf("|")))),(e=i.querySelector("a"))&&(t=e.getAttribute("href"),e.setAttribute("href",t.substring(0,t.lastIndexOf("/")+1)+a)),(e=i.querySelector("button.download"))&&(t=e.getAttribute("onclick"),e.setAttribute("onclick",t.substring(0,t.lastIndexOf("/")+1)+a+"';")),(e=i.querySelector("button.show"))&&(t=e.getAttribute("onclick"),e.setAttribute("onclick",t.substring(0,t.lastIndexOf("/")+1)+a+"';")),apijs.dialog.actionClose()):apijsRedmine.error(r.responseText):apijsRedmine.error(r.status))},r.send("name="+encodeURIComponent(document.getElementById("apijsinput").value)))},this.removeAttachment=function(e,t,a,i){apijs.dialog.dialogConfirmation(apijs.i18n.translate(250),apijs.i18n.translate(251),apijsRedmine.actionRemoveAttachment,[t,a,i])},this.actionRemoveAttachment=function(e){var i=new XMLHttpRequest;i.open("POST",e[1]+"?id="+e[0]+"&isAjax=true",!0),i.setRequestHeader("X-CSRF-Token",e[2]),i.onreadystatechange=function(){var e,t,a;4===i.readyState&&([0,200].has(i.status)?0===i.responseText.indexOf("attachmentId")?(t=(e=document.getElementById(i.responseText)).parentNode,a=0,e.remove(),t.querySelectorAll("dl, li").length<1?t.remove():t.querySelectorAll("a[id][type]").forEach(function(e){e.setAttribute("id",e.getAttribute("id").slice(0,e.getAttribute("id").lastIndexOf(".")+1)+a++)}),apijs.dialog.actionClose()):apijsRedmine.error(i.responseText):apijsRedmine.error(i.status))},i.send()},this.clearCache=function(e){apijs.dialog.dialogConfirmation(apijs.i18n.translate(259),apijs.i18n.translate(260),apijsRedmine.actionClearCache,e)},this.actionClearCache=function(e){apijs.dialog.remove("waiting","lock"),self.location.href=e}};"function"==typeof self.addEventListener&&self.addEventListener("apijsload",apijsRedmine.init.bind(apijsRedmine));
|
8
8
|
//# sourceMappingURL=apijs-redmine.min.js.map
|
@@ -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-2025 | 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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"}
|