forked from rc/aircox
various fixes
This commit is contained in:
parent
a53a37021c
commit
d2a65bd1fe
Binary file not shown.
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Aircox 0.1\n"
|
"Project-Id-Version: Aircox 0.1\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-10-08 11:44+0000\n"
|
"POT-Creation-Date: 2022-12-12 10:15+0000\n"
|
||||||
"PO-Revision-Date: 2016-10-10 16:00+02\n"
|
"PO-Revision-Date: 2016-10-10 16:00+02\n"
|
||||||
"Last-Translator: Aarys\n"
|
"Last-Translator: Aarys\n"
|
||||||
"Language-Team: Aircox's translators team\n"
|
"Language-Team: Aircox's translators team\n"
|
||||||
|
@ -18,13 +18,13 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: aircox/admin/episode.py:29 aircox/models/episode.py:183
|
#: aircox/admin/episode.py:27 aircox/models/episode.py:183
|
||||||
#: aircox/models/log.py:82
|
#: aircox/models/log.py:82
|
||||||
msgid "start"
|
msgid "start"
|
||||||
msgstr "début"
|
msgstr "début"
|
||||||
|
|
||||||
#: aircox/admin/episode.py:33 aircox/models/episode.py:184
|
#: aircox/admin/episode.py:31 aircox/models/episode.py:184
|
||||||
#: aircox/models/program.py:473
|
#: aircox/models/program.py:469
|
||||||
msgid "end"
|
msgid "end"
|
||||||
msgstr "fin"
|
msgstr "fin"
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ msgstr "Tout"
|
||||||
msgid "Publication Settings"
|
msgid "Publication Settings"
|
||||||
msgstr "Paramètre de la publication"
|
msgstr "Paramètre de la publication"
|
||||||
|
|
||||||
#: aircox/admin/program.py:40 aircox/models/program.py:286
|
#: aircox/admin/program.py:40 aircox/models/program.py:282
|
||||||
msgid "Schedule"
|
msgid "Schedule"
|
||||||
msgstr "Horaire"
|
msgstr "Horaire"
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ msgstr "Horaire"
|
||||||
msgid "Program Settings"
|
msgid "Program Settings"
|
||||||
msgstr "Paramètres de l'émission"
|
msgstr "Paramètres de l'émission"
|
||||||
|
|
||||||
#: aircox/admin/program.py:64 aircox/models/program.py:122
|
#: aircox/admin/program.py:64 aircox/models/program.py:118
|
||||||
msgid "Program"
|
msgid "Program"
|
||||||
msgstr "Émission"
|
msgstr "Émission"
|
||||||
|
|
||||||
|
@ -68,23 +68,25 @@ msgstr "Émission"
|
||||||
msgid "Day"
|
msgid "Day"
|
||||||
msgstr "Jour"
|
msgstr "Jour"
|
||||||
|
|
||||||
#: aircox/admin/sound.py:35 aircox/admin/sound.py:67
|
#: aircox/admin/sound.py:37 aircox/admin/sound.py:71
|
||||||
msgid "Audio"
|
msgid "Audio"
|
||||||
msgstr "Audio"
|
msgstr "Audio"
|
||||||
|
|
||||||
#: aircox/admin/sound.py:63
|
#: aircox/admin/sound.py:65
|
||||||
msgid "Program / Episode"
|
msgid "Program / Episode"
|
||||||
msgstr "Émission / Épisode"
|
msgstr "Émission / Épisode"
|
||||||
|
|
||||||
#: aircox/admin/sound.py:81 aircox/templates/aircox/episode_detail.html:36
|
#: aircox/admin/sound.py:100
|
||||||
|
#: aircox/templates/admin/aircox/playlist_inline.html:20
|
||||||
|
#: aircox/templates/aircox/episode_detail.html:36
|
||||||
msgid "Playlist"
|
msgid "Playlist"
|
||||||
msgstr "Playlist"
|
msgstr "Playlist"
|
||||||
|
|
||||||
#: aircox/admin/sound.py:82
|
#: aircox/admin/sound.py:102
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "Info"
|
msgstr "Info"
|
||||||
|
|
||||||
#: aircox/admin/sound.py:96 aircox/models/sound.py:243
|
#: aircox/admin/sound.py:116 aircox/models/sound.py:240
|
||||||
msgid "timestamp"
|
msgid "timestamp"
|
||||||
msgstr "temps"
|
msgstr "temps"
|
||||||
|
|
||||||
|
@ -92,8 +94,8 @@ msgstr "temps"
|
||||||
msgid "Statistics"
|
msgid "Statistics"
|
||||||
msgstr "Statistiques"
|
msgstr "Statistiques"
|
||||||
|
|
||||||
#: aircox/filters.py:8 aircox/templates/admin/base.html:81
|
#: aircox/filters.py:8 aircox/templates/admin/base.html:84
|
||||||
#: aircox/templates/admin/base.html:95 aircox/templates/admin/base.html:109
|
#: aircox/templates/admin/base.html:98 aircox/templates/admin/base.html:112
|
||||||
#: aircox/templates/aircox/base.html:78
|
#: aircox/templates/aircox/base.html:78
|
||||||
#: aircox/templates/aircox/page_list.html:15
|
#: aircox/templates/aircox/page_list.html:15
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
|
@ -103,24 +105,24 @@ msgstr "Chercher"
|
||||||
msgid "Podcast"
|
msgid "Podcast"
|
||||||
msgstr "Podcast"
|
msgstr "Podcast"
|
||||||
|
|
||||||
#: aircox/management/commands/sounds_monitor.py:204
|
#: aircox/management/commands/sounds_monitor.py:205
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr "inconnu"
|
msgstr "inconnu"
|
||||||
|
|
||||||
#: aircox/models/article.py:14
|
#: aircox/models/article.py:16
|
||||||
msgid "Article"
|
msgid "Article"
|
||||||
msgstr "Article"
|
msgstr "Article"
|
||||||
|
|
||||||
#: aircox/models/article.py:15 aircox/templates/admin/base.html:92
|
#: aircox/models/article.py:17 aircox/templates/admin/base.html:95
|
||||||
#: aircox/templates/aircox/program_detail.html:19
|
#: aircox/templates/aircox/program_detail.html:19
|
||||||
msgid "Articles"
|
msgid "Articles"
|
||||||
msgstr "Articles"
|
msgstr "Articles"
|
||||||
|
|
||||||
#: aircox/models/episode.py:52
|
#: aircox/models/episode.py:52 aircox/templates/admin/aircox/statistics.html:23
|
||||||
msgid "Episode"
|
msgid "Episode"
|
||||||
msgstr "Épisode"
|
msgstr "Épisode"
|
||||||
|
|
||||||
#: aircox/models/episode.py:53 aircox/templates/admin/base.html:106
|
#: aircox/models/episode.py:53 aircox/templates/admin/base.html:109
|
||||||
msgid "Episodes"
|
msgid "Episodes"
|
||||||
msgstr "Épisodes"
|
msgstr "Épisodes"
|
||||||
|
|
||||||
|
@ -136,8 +138,8 @@ msgstr "non confirmé"
|
||||||
msgid "cancelled"
|
msgid "cancelled"
|
||||||
msgstr "annulé"
|
msgstr "annulé"
|
||||||
|
|
||||||
#: aircox/models/episode.py:174 aircox/models/sound.py:102
|
#: aircox/models/episode.py:174 aircox/models/sound.py:99
|
||||||
#: aircox/models/sound.py:233 aircox/templates/admin/aircox/statistics.html:23
|
#: aircox/models/sound.py:230
|
||||||
msgid "episode"
|
msgid "episode"
|
||||||
msgstr "épisode"
|
msgstr "épisode"
|
||||||
|
|
||||||
|
@ -146,7 +148,7 @@ msgid "schedule"
|
||||||
msgstr "horaire"
|
msgstr "horaire"
|
||||||
|
|
||||||
#: aircox/models/episode.py:181 aircox/models/log.py:91
|
#: aircox/models/episode.py:181 aircox/models/log.py:91
|
||||||
#: aircox/models/sound.py:105 aircox/models/station.py:142
|
#: aircox/models/sound.py:102 aircox/models/station.py:142
|
||||||
msgid "type"
|
msgid "type"
|
||||||
msgstr "type"
|
msgstr "type"
|
||||||
|
|
||||||
|
@ -171,12 +173,12 @@ msgstr "rediffusion"
|
||||||
msgid "stop"
|
msgid "stop"
|
||||||
msgstr "stop"
|
msgstr "stop"
|
||||||
|
|
||||||
#: aircox/models/log.py:84 aircox/models/sound.py:89
|
#: aircox/models/log.py:84 aircox/models/sound.py:86
|
||||||
msgid "other"
|
msgid "other"
|
||||||
msgstr "autre"
|
msgstr "autre"
|
||||||
|
|
||||||
#: aircox/models/log.py:89 aircox/models/page.py:248
|
#: aircox/models/log.py:89 aircox/models/page.py:248
|
||||||
#: aircox/models/program.py:55 aircox/models/station.py:139
|
#: aircox/models/program.py:54 aircox/models/station.py:139
|
||||||
msgid "station"
|
msgid "station"
|
||||||
msgstr "station"
|
msgstr "station"
|
||||||
|
|
||||||
|
@ -184,7 +186,7 @@ msgstr "station"
|
||||||
msgid "related station"
|
msgid "related station"
|
||||||
msgstr "station relative"
|
msgstr "station relative"
|
||||||
|
|
||||||
#: aircox/models/log.py:92 aircox/models/program.py:254
|
#: aircox/models/log.py:92 aircox/models/program.py:250
|
||||||
msgid "date"
|
msgid "date"
|
||||||
msgstr "date"
|
msgstr "date"
|
||||||
|
|
||||||
|
@ -200,11 +202,12 @@ msgstr "identifiant de la source relative à ce log"
|
||||||
msgid "comment"
|
msgid "comment"
|
||||||
msgstr "commentaire"
|
msgstr "commentaire"
|
||||||
|
|
||||||
#: aircox/models/log.py:107 aircox/models/sound.py:146
|
#: aircox/models/log.py:107 aircox/models/sound.py:143
|
||||||
msgid "Sound"
|
msgid "Sound"
|
||||||
msgstr "Son"
|
msgstr "Son"
|
||||||
|
|
||||||
#: aircox/models/log.py:112 aircox/models/sound.py:259
|
#: aircox/models/log.py:112 aircox/models/sound.py:259
|
||||||
|
#: aircox/templates/admin/aircox/statistics.html:24
|
||||||
msgid "Track"
|
msgid "Track"
|
||||||
msgstr "Morceau"
|
msgstr "Morceau"
|
||||||
|
|
||||||
|
@ -217,7 +220,7 @@ msgid "Logs"
|
||||||
msgstr "Logs"
|
msgstr "Logs"
|
||||||
|
|
||||||
#: aircox/models/page.py:30 aircox/models/page.py:251
|
#: aircox/models/page.py:30 aircox/models/page.py:251
|
||||||
#: aircox/models/sound.py:247
|
#: aircox/models/sound.py:244
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr "titre"
|
msgstr "titre"
|
||||||
|
|
||||||
|
@ -338,8 +341,8 @@ msgstr "Commentaires"
|
||||||
msgid "menu"
|
msgid "menu"
|
||||||
msgstr "menu"
|
msgstr "menu"
|
||||||
|
|
||||||
#: aircox/models/page.py:250 aircox/models/sound.py:107
|
#: aircox/models/page.py:250 aircox/models/sound.py:104
|
||||||
#: aircox/models/sound.py:240
|
#: aircox/models/sound.py:237
|
||||||
msgid "order"
|
msgid "order"
|
||||||
msgstr "ordre"
|
msgstr "ordre"
|
||||||
|
|
||||||
|
@ -359,234 +362,239 @@ msgstr "Élément du menu"
|
||||||
msgid "Menu items"
|
msgid "Menu items"
|
||||||
msgstr "Éléments de menu"
|
msgstr "Éléments de menu"
|
||||||
|
|
||||||
#: aircox/models/program.py:57 aircox/models/station.py:52
|
#: aircox/models/program.py:56 aircox/models/station.py:52
|
||||||
#: aircox/models/station.py:144
|
#: aircox/models/station.py:144
|
||||||
msgid "active"
|
msgid "active"
|
||||||
msgstr "actif"
|
msgstr "actif"
|
||||||
|
|
||||||
#: aircox/models/program.py:59
|
#: aircox/models/program.py:58
|
||||||
msgid "if not checked this program is no longer active"
|
msgid "if not checked this program is no longer active"
|
||||||
msgstr "si selectionné, cette émission n'est plus active"
|
msgstr "si selectionné, cette émission n'est plus active"
|
||||||
|
|
||||||
#: aircox/models/program.py:62
|
#: aircox/models/program.py:61
|
||||||
msgid "syncronise"
|
msgid "syncronise"
|
||||||
msgstr "synchroniser"
|
msgstr "synchroniser"
|
||||||
|
|
||||||
#: aircox/models/program.py:64
|
#: aircox/models/program.py:63
|
||||||
msgid "update later diffusions according to schedule changes"
|
msgid "update later diffusions according to schedule changes"
|
||||||
msgstr "met à jour les dates de diffusion à venir lorsque l'horaire change"
|
msgstr "met à jour les dates de diffusion à venir lorsque l'horaire change"
|
||||||
|
|
||||||
#: aircox/models/program.py:123 aircox/templates/admin/base.html:78
|
#: aircox/models/program.py:119 aircox/templates/admin/base.html:81
|
||||||
msgid "Programs"
|
msgid "Programs"
|
||||||
msgstr "Émissions"
|
msgstr "Émissions"
|
||||||
|
|
||||||
#: aircox/models/program.py:178 aircox/models/program.py:461
|
#: aircox/models/program.py:174 aircox/models/program.py:457
|
||||||
msgid "related program"
|
msgid "related program"
|
||||||
msgstr "émission apparentée"
|
msgstr "émission apparentée"
|
||||||
|
|
||||||
#: aircox/models/program.py:182
|
#: aircox/models/program.py:178
|
||||||
msgid "rerun of"
|
msgid "rerun of"
|
||||||
msgstr "rediffusion de"
|
msgstr "rediffusion de"
|
||||||
|
|
||||||
#: aircox/models/program.py:226
|
#: aircox/models/program.py:222
|
||||||
msgid "rerun must happen after original"
|
msgid "rerun must happen after original"
|
||||||
msgstr "la rediffusion doit être après l'original"
|
msgstr "la rediffusion doit être après l'original"
|
||||||
|
|
||||||
#: aircox/models/program.py:254
|
#: aircox/models/program.py:250
|
||||||
msgid "date of the first diffusion"
|
msgid "date of the first diffusion"
|
||||||
msgstr "date de la première diffusion"
|
msgstr "date de la première diffusion"
|
||||||
|
|
||||||
#: aircox/models/program.py:257
|
#: aircox/models/program.py:253
|
||||||
#: aircox/templates/admin/aircox/statistics.html:22
|
|
||||||
msgid "time"
|
msgid "time"
|
||||||
msgstr "heure"
|
msgstr "heure"
|
||||||
|
|
||||||
#: aircox/models/program.py:257
|
#: aircox/models/program.py:253
|
||||||
msgid "start time"
|
msgid "start time"
|
||||||
msgstr "heure de début"
|
msgstr "heure de début"
|
||||||
|
|
||||||
#: aircox/models/program.py:260
|
#: aircox/models/program.py:256
|
||||||
msgid "timezone"
|
msgid "timezone"
|
||||||
msgstr "zone horaire"
|
msgstr "zone horaire"
|
||||||
|
|
||||||
#: aircox/models/program.py:263
|
#: aircox/models/program.py:259
|
||||||
msgid "timezone used for the date"
|
msgid "timezone used for the date"
|
||||||
msgstr "zone horaire utilisée pour la date"
|
msgstr "zone horaire utilisée pour la date"
|
||||||
|
|
||||||
#: aircox/models/program.py:266 aircox/models/sound.py:120
|
#: aircox/models/program.py:262 aircox/models/sound.py:117
|
||||||
msgid "duration"
|
msgid "duration"
|
||||||
msgstr "durée"
|
msgstr "durée"
|
||||||
|
|
||||||
#: aircox/models/program.py:267
|
#: aircox/models/program.py:263
|
||||||
msgid "regular duration"
|
msgid "regular duration"
|
||||||
msgstr "durée normale"
|
msgstr "durée normale"
|
||||||
|
|
||||||
#: aircox/models/program.py:270
|
#: aircox/models/program.py:266
|
||||||
msgid "frequency"
|
msgid "frequency"
|
||||||
msgstr "fréquence"
|
msgstr "fréquence"
|
||||||
|
|
||||||
#: aircox/models/program.py:272
|
#: aircox/models/program.py:268
|
||||||
msgid "ponctual"
|
msgid "ponctual"
|
||||||
msgstr "ponctuel"
|
msgstr "ponctuel"
|
||||||
|
|
||||||
#: aircox/models/program.py:273
|
#: aircox/models/program.py:269
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "1st {day} of the month"
|
msgid "1st {day} of the month"
|
||||||
msgstr "1er {day} du mois"
|
msgstr "1er {day} du mois"
|
||||||
|
|
||||||
#: aircox/models/program.py:274
|
#: aircox/models/program.py:270
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "2nd {day} of the month"
|
msgid "2nd {day} of the month"
|
||||||
msgstr "2ème {day} du mois"
|
msgstr "2ème {day} du mois"
|
||||||
|
|
||||||
#: aircox/models/program.py:275
|
#: aircox/models/program.py:271
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "3rd {day} of the month"
|
msgid "3rd {day} of the month"
|
||||||
msgstr "3ème {day} du mois"
|
msgstr "3ème {day} du mois"
|
||||||
|
|
||||||
#: aircox/models/program.py:276
|
#: aircox/models/program.py:272
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "4th {day} of the month"
|
msgid "4th {day} of the month"
|
||||||
msgstr "4ème {day} du mois"
|
msgstr "4ème {day} du mois"
|
||||||
|
|
||||||
#: aircox/models/program.py:277
|
#: aircox/models/program.py:273
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "last {day} of the month"
|
msgid "last {day} of the month"
|
||||||
msgstr "dernier {day} du mois"
|
msgstr "dernier {day} du mois"
|
||||||
|
|
||||||
#: aircox/models/program.py:278
|
#: aircox/models/program.py:274
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "1st and 3rd {day} of the month"
|
msgid "1st and 3rd {day} of the month"
|
||||||
msgstr "1er et 3ème {day} du mois"
|
msgstr "1er et 3ème {day} du mois"
|
||||||
|
|
||||||
#: aircox/models/program.py:279
|
#: aircox/models/program.py:275
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "2nd and 4th {day} of the month"
|
msgid "2nd and 4th {day} of the month"
|
||||||
msgstr "2ème et 4ème {day} du mois"
|
msgstr "2ème et 4ème {day} du mois"
|
||||||
|
|
||||||
#: aircox/models/program.py:280
|
#: aircox/models/program.py:276
|
||||||
#, fuzzy, python-brace-format
|
|
||||||
#| msgid "every {day}"
|
|
||||||
msgid "{day}"
|
msgid "{day}"
|
||||||
msgstr "{day}"
|
msgstr "{day}"
|
||||||
|
|
||||||
#: aircox/models/program.py:281
|
#: aircox/models/program.py:277
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "one {day} on two"
|
msgid "one {day} on two"
|
||||||
msgstr "un {day} sur deux"
|
msgstr "un {day} sur deux"
|
||||||
|
|
||||||
#: aircox/models/program.py:287
|
#: aircox/models/program.py:283
|
||||||
msgid "Schedules"
|
msgid "Schedules"
|
||||||
msgstr "Horaires"
|
msgstr "Horaires"
|
||||||
|
|
||||||
#: aircox/models/program.py:464
|
#: aircox/models/program.py:460
|
||||||
msgid "delay"
|
msgid "delay"
|
||||||
msgstr "délai"
|
msgstr "délai"
|
||||||
|
|
||||||
#: aircox/models/program.py:465
|
#: aircox/models/program.py:461
|
||||||
msgid "minimal delay between two sound plays"
|
msgid "minimal delay between two sound plays"
|
||||||
msgstr "délai minimum entre deux sons joués"
|
msgstr "délai minimum entre deux sons joués"
|
||||||
|
|
||||||
#: aircox/models/program.py:468
|
#: aircox/models/program.py:464
|
||||||
msgid "begin"
|
msgid "begin"
|
||||||
msgstr "début"
|
msgstr "début"
|
||||||
|
|
||||||
#: aircox/models/program.py:469 aircox/models/program.py:475
|
#: aircox/models/program.py:465 aircox/models/program.py:471
|
||||||
msgid "used to define a time range this stream is played"
|
msgid "used to define a time range this stream is played"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"utilisé pour définir un intervalle de temps pendant lequel ce stream est joué"
|
"utilisé pour définir un intervalle de temps pendant lequel ce stream est joué"
|
||||||
|
|
||||||
#: aircox/models/sound.py:89
|
#: aircox/models/sound.py:86
|
||||||
msgid "archive"
|
msgid "archive"
|
||||||
msgstr "archive"
|
msgstr "archive"
|
||||||
|
|
||||||
#: aircox/models/sound.py:90
|
#: aircox/models/sound.py:87
|
||||||
msgid "excerpt"
|
msgid "excerpt"
|
||||||
msgstr "extrait"
|
msgstr "extrait"
|
||||||
|
|
||||||
#: aircox/models/sound.py:90
|
#: aircox/models/sound.py:87
|
||||||
msgid "removed"
|
msgid "removed"
|
||||||
msgstr "supprimé"
|
msgstr "supprimé"
|
||||||
|
|
||||||
#: aircox/models/sound.py:93 aircox/models/station.py:37
|
#: aircox/models/sound.py:90 aircox/models/station.py:37
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "nom"
|
msgstr "nom"
|
||||||
|
|
||||||
#: aircox/models/sound.py:96
|
#: aircox/models/sound.py:93
|
||||||
msgid "program"
|
msgid "program"
|
||||||
msgstr "émission"
|
msgstr "émission"
|
||||||
|
|
||||||
#: aircox/models/sound.py:97
|
#: aircox/models/sound.py:94
|
||||||
msgid "program related to it"
|
msgid "program related to it"
|
||||||
msgstr "émission apparentée à celui-ci"
|
msgstr "émission apparentée à celui-ci"
|
||||||
|
|
||||||
#: aircox/models/sound.py:107 aircox/models/sound.py:240
|
#: aircox/models/sound.py:104 aircox/models/sound.py:237
|
||||||
msgid "position in the playlist"
|
msgid "position in the playlist"
|
||||||
msgstr "position dans la playlist"
|
msgstr "position dans la playlist"
|
||||||
|
|
||||||
#: aircox/models/sound.py:116 aircox/models/station.py:135
|
#: aircox/models/sound.py:113 aircox/models/station.py:135
|
||||||
msgid "file"
|
msgid "file"
|
||||||
msgstr "fichier"
|
msgstr "fichier"
|
||||||
|
|
||||||
#: aircox/models/sound.py:122
|
#: aircox/models/sound.py:119
|
||||||
msgid "duration of the sound"
|
msgid "duration of the sound"
|
||||||
msgstr "durée du son"
|
msgstr "durée du son"
|
||||||
|
|
||||||
#: aircox/models/sound.py:125
|
#: aircox/models/sound.py:122
|
||||||
msgid "modification time"
|
msgid "modification time"
|
||||||
msgstr "dernière modification"
|
msgstr "dernière modification"
|
||||||
|
|
||||||
#: aircox/models/sound.py:127
|
#: aircox/models/sound.py:124
|
||||||
msgid "last modification date and time"
|
msgid "last modification date and time"
|
||||||
msgstr "date et heure de la dernière modification"
|
msgstr "date et heure de la dernière modification"
|
||||||
|
|
||||||
#: aircox/models/sound.py:130
|
#: aircox/models/sound.py:127
|
||||||
msgid "good quality"
|
msgid "good quality"
|
||||||
msgstr "bonne qualité"
|
msgstr "bonne qualité"
|
||||||
|
|
||||||
#: aircox/models/sound.py:130
|
#: aircox/models/sound.py:127
|
||||||
msgid "sound meets quality requirements"
|
msgid "sound meets quality requirements"
|
||||||
msgstr "le son rencontre les exigences de qualité"
|
msgstr "le son rencontre les exigences de qualité"
|
||||||
|
|
||||||
#: aircox/models/sound.py:134
|
#: aircox/models/sound.py:131
|
||||||
msgid "public"
|
msgid "public"
|
||||||
msgstr "publique"
|
msgstr "publique"
|
||||||
|
|
||||||
#: aircox/models/sound.py:134
|
#: aircox/models/sound.py:131
|
||||||
msgid "whether it is publicly available as podcast"
|
msgid "whether it is publicly available as podcast"
|
||||||
msgstr "coché pour rendre le podcast public"
|
msgstr "coché pour rendre le podcast public"
|
||||||
|
|
||||||
#: aircox/models/sound.py:138
|
#: aircox/models/sound.py:135
|
||||||
msgid "downloadable"
|
msgid "downloadable"
|
||||||
msgstr "téléchargeable"
|
msgstr "téléchargeable"
|
||||||
|
|
||||||
#: aircox/models/sound.py:139
|
#: aircox/models/sound.py:136
|
||||||
msgid ""
|
msgid ""
|
||||||
"whether it can be publicly downloaded by visitors (sound must be public)"
|
"whether it can be publicly downloaded by visitors (sound must be public)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"coché pour permettre le téléchargement public (le podcast doit être "
|
"coché pour permettre le téléchargement public (le podcast doit être "
|
||||||
"disponible publiquement)"
|
"disponible publiquement)"
|
||||||
|
|
||||||
#: aircox/models/sound.py:147
|
#: aircox/models/sound.py:144
|
||||||
msgid "Sounds"
|
msgid "Sounds"
|
||||||
msgstr "Sons"
|
msgstr "Sons"
|
||||||
|
|
||||||
#: aircox/models/sound.py:237
|
#: aircox/models/sound.py:234
|
||||||
msgid "sound"
|
msgid "sound"
|
||||||
msgstr "son"
|
msgstr "son"
|
||||||
|
|
||||||
#: aircox/models/sound.py:245
|
#: aircox/models/sound.py:242
|
||||||
msgid "position (in seconds)"
|
msgid "position (in seconds)"
|
||||||
msgstr "position (en secondes)"
|
msgstr "position (en secondes)"
|
||||||
|
|
||||||
#: aircox/models/sound.py:248
|
#: aircox/models/sound.py:245
|
||||||
msgid "artist"
|
msgid "artist"
|
||||||
msgstr "artiste"
|
msgstr "artiste"
|
||||||
|
|
||||||
#: aircox/models/sound.py:249 aircox/templates/admin/aircox/statistics.html:25
|
#: aircox/models/sound.py:246
|
||||||
|
msgid "album"
|
||||||
|
msgstr "album"
|
||||||
|
|
||||||
|
#: aircox/models/sound.py:247
|
||||||
msgid "tags"
|
msgid "tags"
|
||||||
msgstr "tags"
|
msgstr "tags"
|
||||||
|
|
||||||
|
#: aircox/models/sound.py:248
|
||||||
|
msgid "year"
|
||||||
|
msgstr "année"
|
||||||
|
|
||||||
#: aircox/models/sound.py:251
|
#: aircox/models/sound.py:251
|
||||||
msgid "information"
|
msgid "information"
|
||||||
msgstr "information"
|
msgstr "information"
|
||||||
|
@ -677,6 +685,18 @@ msgstr ""
|
||||||
"liste des paramètres disponibles séparés par des virgules; placé dans le "
|
"liste des paramètres disponibles séparés par des virgules; placé dans le "
|
||||||
"fichier de configuration en tant que code brut; relatif au plugin utilisé"
|
"fichier de configuration en tant que code brut; relatif au plugin utilisé"
|
||||||
|
|
||||||
|
#: aircox/models/user_settings.py:11
|
||||||
|
msgid "User"
|
||||||
|
msgstr "Utilisateur"
|
||||||
|
|
||||||
|
#: aircox/models/user_settings.py:14
|
||||||
|
msgid "Playlist Editor Columns"
|
||||||
|
msgstr "Colonnes de l'éditeur de playlist"
|
||||||
|
|
||||||
|
#: aircox/models/user_settings.py:16
|
||||||
|
msgid "Playlist Editor Separator"
|
||||||
|
msgstr "Séparateur de l'éditeur de playlist"
|
||||||
|
|
||||||
#: aircox/templates/admin/aircox/filters/filter.html:2
|
#: aircox/templates/admin/aircox/filters/filter.html:2
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid " By %(filter_title)s "
|
msgid " By %(filter_title)s "
|
||||||
|
@ -684,7 +704,7 @@ msgstr "Par %(filter_title)s "
|
||||||
|
|
||||||
#: aircox/templates/admin/aircox/page_change_form.html:9
|
#: aircox/templates/admin/aircox/page_change_form.html:9
|
||||||
#: aircox/templates/admin/aircox/page_change_list.html:7
|
#: aircox/templates/admin/aircox/page_change_list.html:7
|
||||||
#: aircox/templates/admin/base.html:163
|
#: aircox/templates/admin/base.html:166
|
||||||
#: aircox/templates/admin/change_list.html:30
|
#: aircox/templates/admin/change_list.html:30
|
||||||
#: aircox/templates/aircox/base.html:54
|
#: aircox/templates/aircox/base.html:54
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
|
@ -715,36 +735,46 @@ msgstr "Sauvegarder et continuer"
|
||||||
msgid "Publish"
|
msgid "Publish"
|
||||||
msgstr "Publier"
|
msgstr "Publier"
|
||||||
|
|
||||||
#: aircox/templates/admin/aircox/statistics.html:24
|
#: aircox/templates/admin/aircox/playlist_inline.html:33
|
||||||
msgid "track"
|
#: aircox/templates/admin/aircox/playlist_inline.html:34
|
||||||
msgstr "piste"
|
msgid "Track Position"
|
||||||
|
msgstr "Position dans la playlist"
|
||||||
|
|
||||||
|
#: aircox/templates/admin/aircox/statistics.html:22
|
||||||
|
msgid "Time"
|
||||||
|
msgstr "Heure"
|
||||||
|
|
||||||
|
#: aircox/templates/admin/aircox/statistics.html:25
|
||||||
|
#: aircox/templatetags/aircox_admin.py:52
|
||||||
|
msgid "Tags"
|
||||||
|
msgstr "Étiquettes"
|
||||||
|
|
||||||
#: aircox/templates/admin/aircox/statistics.html:67
|
#: aircox/templates/admin/aircox/statistics.html:67
|
||||||
msgid "Total"
|
msgid "Total"
|
||||||
msgstr "Total"
|
msgstr "Total"
|
||||||
|
|
||||||
#: aircox/templates/admin/base.html:65 aircox/templates/admin/index.html:11
|
#: aircox/templates/admin/base.html:68 aircox/templates/admin/index.html:11
|
||||||
#: aircox/templates/aircox/home.html:47
|
#: aircox/templates/aircox/home.html:47
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "Aujourd'hui"
|
msgstr "Aujourd'hui"
|
||||||
|
|
||||||
#: aircox/templates/admin/base.html:121
|
#: aircox/templates/admin/base.html:124
|
||||||
msgid "Tools"
|
msgid "Tools"
|
||||||
msgstr "Outils"
|
msgstr "Outils"
|
||||||
|
|
||||||
#: aircox/templates/admin/base.html:137
|
#: aircox/templates/admin/base.html:140
|
||||||
msgid "View site"
|
msgid "View site"
|
||||||
msgstr "Voir le site"
|
msgstr "Voir le site"
|
||||||
|
|
||||||
#: aircox/templates/admin/base.html:142
|
#: aircox/templates/admin/base.html:145
|
||||||
msgid "Documentation"
|
msgid "Documentation"
|
||||||
msgstr "Documentation"
|
msgstr "Documentation"
|
||||||
|
|
||||||
#: aircox/templates/admin/base.html:146
|
#: aircox/templates/admin/base.html:149
|
||||||
msgid "Change password"
|
msgid "Change password"
|
||||||
msgstr "Changer le mot de passe"
|
msgstr "Changer le mot de passe"
|
||||||
|
|
||||||
#: aircox/templates/admin/base.html:149
|
#: aircox/templates/admin/base.html:152
|
||||||
msgid "Log out"
|
msgid "Log out"
|
||||||
msgstr "Se déconnecter"
|
msgstr "Se déconnecter"
|
||||||
|
|
||||||
|
@ -958,67 +988,108 @@ msgstr "Épisode en ce moment sur les ondes"
|
||||||
msgid "Currently playing"
|
msgid "Currently playing"
|
||||||
msgstr "En ce moment"
|
msgstr "En ce moment"
|
||||||
|
|
||||||
#: aircox/urls.py:40
|
#: aircox/templatetags/aircox_admin.py:51
|
||||||
|
msgid "Artist"
|
||||||
|
msgstr "Artiste"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:51
|
||||||
|
msgid "Album"
|
||||||
|
msgstr "Album"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:51
|
||||||
|
msgid "Title"
|
||||||
|
msgstr "Titre"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:52
|
||||||
|
msgid "Year"
|
||||||
|
msgstr "Année"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:53
|
||||||
|
msgid "Save Settings"
|
||||||
|
msgstr "Enregistrer la configuration"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:54
|
||||||
|
msgid "Discard changes"
|
||||||
|
msgstr "Annuler les changements"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:55
|
||||||
|
msgid "Columns"
|
||||||
|
msgstr "Colonnes"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:56
|
||||||
|
msgid "Add a track"
|
||||||
|
msgstr "Ajouter un morceau"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:57
|
||||||
|
msgid "Remove"
|
||||||
|
msgstr "Supprimer"
|
||||||
|
|
||||||
|
#: aircox/templatetags/aircox_admin.py:58
|
||||||
|
#| msgid "timestamp"
|
||||||
|
msgid "Timestamp"
|
||||||
|
msgstr "Temps"
|
||||||
|
|
||||||
|
#: aircox/urls.py:44
|
||||||
msgid "articles/"
|
msgid "articles/"
|
||||||
msgstr "articles/"
|
msgstr "articles/"
|
||||||
|
|
||||||
#: aircox/urls.py:43
|
#: aircox/urls.py:47
|
||||||
msgid "articles/<slug:slug>/"
|
msgid "articles/<slug:slug>/"
|
||||||
msgstr "articles/<slug:slug>/"
|
msgstr "articles/<slug:slug>/"
|
||||||
|
|
||||||
#: aircox/urls.py:47
|
#: aircox/urls.py:51
|
||||||
msgid "episodes/"
|
msgid "episodes/"
|
||||||
msgstr "episodes/"
|
msgstr "episodes/"
|
||||||
|
|
||||||
#: aircox/urls.py:49
|
#: aircox/urls.py:53
|
||||||
msgid "episodes/<slug:slug>/"
|
msgid "episodes/<slug:slug>/"
|
||||||
msgstr "episodes/<slug:slug>/"
|
msgstr "episodes/<slug:slug>/"
|
||||||
|
|
||||||
#: aircox/urls.py:51
|
#: aircox/urls.py:55
|
||||||
msgid "week/"
|
msgid "week/"
|
||||||
msgstr "semaine/"
|
msgstr "semaine/"
|
||||||
|
|
||||||
#: aircox/urls.py:53
|
#: aircox/urls.py:57
|
||||||
msgid "week/<date:date>/"
|
msgid "week/<date:date>/"
|
||||||
msgstr "semaine/<date:date>/"
|
msgstr "semaine/<date:date>/"
|
||||||
|
|
||||||
#: aircox/urls.py:56
|
#: aircox/urls.py:60
|
||||||
msgid "logs/"
|
msgid "logs/"
|
||||||
msgstr "logs/"
|
msgstr "logs/"
|
||||||
|
|
||||||
#: aircox/urls.py:57
|
#: aircox/urls.py:61
|
||||||
msgid "logs/<date:date>/"
|
msgid "logs/<date:date>/"
|
||||||
msgstr "logs/<date:date>/"
|
msgstr "logs/<date:date>/"
|
||||||
|
|
||||||
#: aircox/urls.py:60
|
#: aircox/urls.py:64
|
||||||
msgid "publications/"
|
msgid "publications/"
|
||||||
msgstr "publications/"
|
msgstr "publications/"
|
||||||
|
|
||||||
#: aircox/urls.py:63
|
#: aircox/urls.py:67
|
||||||
msgid "pages/"
|
msgid "pages/"
|
||||||
msgstr "pages/"
|
msgstr "pages/"
|
||||||
|
|
||||||
#: aircox/urls.py:69
|
#: aircox/urls.py:73
|
||||||
msgid "pages/<slug:slug>/"
|
msgid "pages/<slug:slug>/"
|
||||||
msgstr "pages/<slug:slug>/"
|
msgstr "pages/<slug:slug>/"
|
||||||
|
|
||||||
#: aircox/urls.py:76
|
#: aircox/urls.py:80
|
||||||
msgid "programs/"
|
msgid "programs/"
|
||||||
msgstr "emissions/"
|
msgstr "emissions/"
|
||||||
|
|
||||||
#: aircox/urls.py:78
|
#: aircox/urls.py:82
|
||||||
msgid "programs/<slug:slug>/"
|
msgid "programs/<slug:slug>/"
|
||||||
msgstr "emissions/<slug:slug>/"
|
msgstr "emissions/<slug:slug>/"
|
||||||
|
|
||||||
#: aircox/urls.py:80
|
#: aircox/urls.py:84
|
||||||
msgid "programs/<slug:parent_slug>/episodes/"
|
msgid "programs/<slug:parent_slug>/episodes/"
|
||||||
msgstr "emissions/<slug:parent_slug>/episodes/"
|
msgstr "emissions/<slug:parent_slug>/episodes/"
|
||||||
|
|
||||||
#: aircox/urls.py:82
|
#: aircox/urls.py:86
|
||||||
msgid "programs/<slug:parent_slug>/articles/"
|
msgid "programs/<slug:parent_slug>/articles/"
|
||||||
msgstr "emissions/<slug:parent_slug>/articles/"
|
msgstr "emissions/<slug:parent_slug>/articles/"
|
||||||
|
|
||||||
#: aircox/urls.py:84
|
#: aircox/urls.py:88
|
||||||
msgid "programs/<slug:parent_slug>/publications/"
|
msgid "programs/<slug:parent_slug>/publications/"
|
||||||
msgstr "emissions/<slug:parent_slug>/publications/"
|
msgstr "emissions/<slug:parent_slug>/publications/"
|
||||||
|
|
||||||
|
@ -1026,6 +1097,9 @@ msgstr "emissions/<slug:parent_slug>/publications/"
|
||||||
msgid "comments are not allowed"
|
msgid "comments are not allowed"
|
||||||
msgstr "les commentaires ne sont pas autorisés"
|
msgstr "les commentaires ne sont pas autorisés"
|
||||||
|
|
||||||
|
#~ msgid "track"
|
||||||
|
#~ msgstr "morceau"
|
||||||
|
|
||||||
#~ msgid "if it can be podcasted from the server"
|
#~ msgid "if it can be podcasted from the server"
|
||||||
#~ msgstr "s'il peut être podcasté depuis le serveur"
|
#~ msgstr "s'il peut être podcasté depuis le serveur"
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -10,9 +10,6 @@
|
||||||
<a-playlist-editor
|
<a-playlist-editor
|
||||||
:labels="{% track_inline_labels %}"
|
:labels="{% track_inline_labels %}"
|
||||||
:init-data="{% track_inline_data formset=formset %}"
|
:init-data="{% track_inline_data formset=formset %}"
|
||||||
{% if not track_timestamp %}
|
|
||||||
:hide-columns="['timestamp']"
|
|
||||||
{% endif %}
|
|
||||||
settings-url="{% url "api:user-settings" %}"
|
settings-url="{% url "api:user-settings" %}"
|
||||||
data-prefix="{{ formset.prefix }}-">
|
data-prefix="{{ formset.prefix }}-">
|
||||||
<template #title>
|
<template #title>
|
||||||
|
@ -70,6 +67,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
:name="'{{ formset.prefix }}-' + cell.row + '-{{ field.name }}'"
|
:name="'{{ formset.prefix }}-' + cell.row + '-{{ field.name }}'"
|
||||||
v-model="item.data[attr]"
|
v-model="item.data[attr]"
|
||||||
|
title="{{ field.help }}"
|
||||||
@change="emit('change', col)"/>
|
@change="emit('change', col)"/>
|
||||||
{% if field.name not in 'artist,title,album' %}
|
{% if field.name not in 'artist,title,album' %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,10 +18,10 @@
|
||||||
<table class="table is-hoverable is-fullwidth">
|
<table class="table is-hoverable is-fullwidth">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% translate "time" %}</th>
|
<th>{% translate "Time" %}</th>
|
||||||
<th>{% translate "episode" %}</th>
|
<th>{% translate "Episode" %}</th>
|
||||||
<th>{% translate "track" %}</th>
|
<th>{% translate "Track" %}</th>
|
||||||
<th>{% translate "tags" %}</th>
|
<th>{% translate "Tags" %}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
|
@ -2,7 +2,7 @@ import json
|
||||||
from django import template
|
from django import template
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import gettext_lazy as _, gettext as __
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from aircox.serializers.admin import UserSettingsSerializer
|
from aircox.serializers.admin import UserSettingsSerializer
|
||||||
|
|
||||||
|
@ -47,17 +47,19 @@ def do_track_inline_data(context, formset, safe_string=False):
|
||||||
return safe_string and mark_safe(source) or source
|
return safe_string and mark_safe(source) or source
|
||||||
|
|
||||||
|
|
||||||
|
track_inline_labels_ = {
|
||||||
|
'artist': _('Artist'), 'album': _('Album'), 'title': _('Title'),
|
||||||
|
'tags': _('Tags'), 'year': _('Year'),
|
||||||
|
'save_settings': _('Save Settings'),
|
||||||
|
'discard_changes': _('Discard changes'),
|
||||||
|
'columns': _('Columns'),
|
||||||
|
'add_track': _('Add a track'),
|
||||||
|
'remove_track': _('Remove'),
|
||||||
|
'timestamp': _('Timestamp'),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag(name='track_inline_labels')
|
@register.simple_tag(name='track_inline_labels')
|
||||||
def do_track_inline_labels():
|
def do_track_inline_labels():
|
||||||
""" Return labels for columns in playlist editor as dict """
|
""" Return labels for columns in playlist editor as dict """
|
||||||
return json.dumps({
|
return json.dumps({k: str(v) for k, v in track_inline_labels_.items()})
|
||||||
'artist': __('Artist'), 'album': __('Album'), 'title': __('Title'),
|
|
||||||
'tags': __('Tags'), 'year': __('Year'),
|
|
||||||
'save_settings': __('Save Settings'),
|
|
||||||
'discard_changes': __('Discard changes'),
|
|
||||||
'columns': __('Columns'),
|
|
||||||
'add_track': __('Add a track'),
|
|
||||||
'remove_track': __('Remove'),
|
|
||||||
'timestamp': __('Timestamp'),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,18 @@
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<div class="mt-2">
|
<div class="mt-2">
|
||||||
|
<div class="float-right">
|
||||||
|
<a class="button is-warning p-2 ml-2"
|
||||||
|
@click="loadData({items: this.initData.items},true)">
|
||||||
|
<span class="icon"><i class="fa fa-rotate" /></span>
|
||||||
|
<span>{{ labels.discard_changes }}</span>
|
||||||
|
</a>
|
||||||
|
<a class="button is-primary p-2 ml-2" t-if="page == page.List"
|
||||||
|
@click="this.set.push(new this.set.model())">
|
||||||
|
<span class="icon"><i class="fa fa-plus"/></span>
|
||||||
|
<span>{{ labels.add_track }}</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
<div class="field is-inline-block is-vcentered mr-3">
|
<div class="field is-inline-block is-vcentered mr-3">
|
||||||
<label class="label is-inline mr-2"
|
<label class="label is-inline mr-2"
|
||||||
style="vertical-align: middle">
|
style="vertical-align: middle">
|
||||||
|
@ -101,18 +113,6 @@
|
||||||
{{ labels.save_settings }}
|
{{ labels.save_settings }}
|
||||||
</a-action-button>
|
</a-action-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="float-right">
|
|
||||||
<a class="button is-warning p-2 ml-2"
|
|
||||||
@click="loadData({items: this.initData.items},true)">
|
|
||||||
<span class="icon"><i class="fa fa-rotate" /></span>
|
|
||||||
<span>{{ labels.discard_changes }}</span>
|
|
||||||
</a>
|
|
||||||
<a class="button is-primary p-2 ml-2" t-if="page == page.List"
|
|
||||||
@click="this.set.push(new this.set.model())">
|
|
||||||
<span class="icon"><i class="fa fa-plus"/></span>
|
|
||||||
<span>{{ labels.add_track }}</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<slot name="bottom" :set="set" :columns="columns" :items="items"/>
|
<slot name="bottom" :set="set" :columns="columns" :items="items"/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -181,7 +181,9 @@ export default {
|
||||||
value = cols.concat(left)
|
value = cols.concat(left)
|
||||||
this.settings.playlist_editor_columns = value
|
this.settings.playlist_editor_columns = value
|
||||||
},
|
},
|
||||||
get() { return this.settings.playlist_editor_columns }
|
get() {
|
||||||
|
return this.settings.playlist_editor_columns
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
items() {
|
items() {
|
||||||
|
@ -205,12 +207,12 @@ export default {
|
||||||
|
|
||||||
formatMove({from, to}) {
|
formatMove({from, to}) {
|
||||||
const value = this.columns[from]
|
const value = this.columns[from]
|
||||||
this.columns.splice(from, 1)
|
this.settings.playlist_editor_columns.splice(from, 1)
|
||||||
this.columns.splice(to, 0, value)
|
this.settings.playlist_editor_columns.splice(to, 0, value)
|
||||||
if(this.page == Page.Text)
|
if(this.page == Page.Text)
|
||||||
this.updateList()
|
this.updateList()
|
||||||
else
|
else
|
||||||
this.updateText()
|
this.updateInput()
|
||||||
},
|
},
|
||||||
|
|
||||||
columnMove({from, to}) {
|
columnMove({from, to}) {
|
||||||
|
|
|
@ -30,20 +30,34 @@ export default {
|
||||||
emit: ['move', 'cell'],
|
emit: ['move', 'cell'],
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
|
//! Item to display in row
|
||||||
item: Object,
|
item: Object,
|
||||||
|
//! Columns to display, as items' attributes
|
||||||
columns: Array,
|
columns: Array,
|
||||||
|
//! Default cell's info
|
||||||
cell: {type: Object, default() { return {row: 0}}},
|
cell: {type: Object, default() { return {row: 0}}},
|
||||||
|
//! Cell component tag
|
||||||
cellTag: {type: String, default: 'td'},
|
cellTag: {type: String, default: 'td'},
|
||||||
|
//! If true, can reorder cell by drag & drop
|
||||||
orderable: {type: Boolean, default: false},
|
orderable: {type: Boolean, default: false},
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
row() { return this.cell && this.cell.row },
|
/**
|
||||||
|
* Row index
|
||||||
|
*/
|
||||||
|
row() { return this.cell && this.cell.row || 0 },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Item's data if model instance, otherwise item
|
||||||
|
*/
|
||||||
itemData() {
|
itemData() {
|
||||||
return this.item instanceof Model ? this.item.data : this.item;
|
return this.item instanceof Model ? this.item.data : this.item;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Computed cell infos
|
||||||
|
*/
|
||||||
cells() {
|
cells() {
|
||||||
const cell = isReactive(this.cell) && toRefs(this.cell) || this.cell || {}
|
const cell = isReactive(this.cell) && toRefs(this.cell) || this.cell || {}
|
||||||
const cells = []
|
const cells = []
|
||||||
|
@ -51,19 +65,16 @@ export default {
|
||||||
cells.push({...cell, col: Number(col)})
|
cells.push({...cell, col: Number(col)})
|
||||||
return cells
|
return cells
|
||||||
},
|
},
|
||||||
|
|
||||||
cellEls() {
|
|
||||||
return [...this.$el.querySelectorAll(self.cellTag)].filter(x => x.dataset.col)
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
/// Emit a 'cell' event.
|
/**
|
||||||
/// Event data: `{name, data, item, attr}`
|
* Emit a 'cell' event.
|
||||||
///
|
* Event data: `{name, cell, data, item}`
|
||||||
/// @param {Number} col: cell column's index
|
* @param {Number} col: cell column's index
|
||||||
/// @param {String} name: cell's event name
|
* @param {String} name: cell's event name
|
||||||
/// @param {} data: cell's event data
|
* @param {} data: cell's event data
|
||||||
|
*/
|
||||||
cellEmit(name, cell, data) {
|
cellEmit(name, cell, data) {
|
||||||
this.$emit('cell', {
|
this.$emit('cell', {
|
||||||
name, cell, data,
|
name, cell, data,
|
||||||
|
@ -83,6 +94,9 @@ export default {
|
||||||
ev.dataTransfer.dropEffect = 'move'
|
ev.dataTransfer.dropEffect = 'move'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle drop event, emit `'move': { from, to }`.
|
||||||
|
*/
|
||||||
onDrop(ev) {
|
onDrop(ev) {
|
||||||
const data = ev.dataTransfer.getData("text/cell")
|
const data = ev.dataTransfer.getData("text/cell")
|
||||||
if(!data || !data.startsWith('cell:'))
|
if(!data || !data.startsWith('cell:'))
|
||||||
|
@ -95,14 +109,28 @@ export default {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return DOM node for cells at provided position `col`
|
||||||
|
*/
|
||||||
|
getCellEl(col) {
|
||||||
|
const els = this.$el.querySelectorAll(this.cellTag)
|
||||||
|
for(var el of els)
|
||||||
|
if(col == Number(el.dataset.col))
|
||||||
|
return el;
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Focus cell's form input. If from is provided, related focus
|
||||||
|
*/
|
||||||
focus(col, from) {
|
focus(col, from) {
|
||||||
if(from)
|
if(from)
|
||||||
col += from.col
|
col += from.col
|
||||||
|
|
||||||
const target = this.cellEls[col]
|
const target = this.getCellEl(col)
|
||||||
if(!target)
|
if(!target)
|
||||||
return
|
return
|
||||||
const control = target.querySelector('input') ||
|
const control = target.querySelector('input:not([type="hidden"])') ||
|
||||||
target.querySelector('button') ||
|
target.querySelector('button') ||
|
||||||
target.querySelector('select') ||
|
target.querySelector('select') ||
|
||||||
target.querySelector('a');
|
target.querySelector('a');
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
<template v-for="(item,row) in items" :key="row">
|
<template v-for="(item,row) in items" :key="row">
|
||||||
<!-- data-index comes from AList component drag & drop -->
|
<!-- data-index comes from AList component drag & drop -->
|
||||||
<a-row :item="item" :cell="{row}" :columns="columns" :data-index="row"
|
<a-row :item="item" :cell="{row}" :columns="columns" :data-index="row"
|
||||||
|
:data-row="row"
|
||||||
:draggable="orderable"
|
:draggable="orderable"
|
||||||
@dragstart="onDragStart" @dragover="onDragOver" @drop="onDrop"
|
@dragstart="onDragStart" @dragover="onDragOver" @drop="onDrop"
|
||||||
@cell="onCellEvent(row, $event)">
|
@cell="onCellEvent(row, $event)">
|
||||||
|
@ -24,7 +25,7 @@
|
||||||
<slot :name="name" v-bind="data"/>
|
<slot :name="name" v-bind="data"/>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<div @keydown.ctrl="onControlKey($event, data.cell)">
|
<div>
|
||||||
<slot :name="name" v-bind="data"/>
|
<slot :name="name" v-bind="data"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -65,11 +66,6 @@ const Component = {
|
||||||
cells.push({row})
|
cells.push({row})
|
||||||
},
|
},
|
||||||
|
|
||||||
rows() {
|
|
||||||
return [...this.$el.querySelectorAll('tr')].filter(x => x.__row)
|
|
||||||
.map(x => x.__row)
|
|
||||||
},
|
|
||||||
|
|
||||||
rowSlots() {
|
rowSlots() {
|
||||||
return Object.keys(this.$slots).filter(x => x.startsWith('row-'))
|
return Object.keys(this.$slots).filter(x => x.startsWith('row-'))
|
||||||
.map(x => [x, x.slice(4)])
|
.map(x => [x, x.slice(4)])
|
||||||
|
@ -77,27 +73,6 @@ const Component = {
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
onControlKey(event, cell) {
|
|
||||||
switch(event.key) {
|
|
||||||
case "ArrowUp": this.focus(-1, 0, cell)
|
|
||||||
event.stopPropagation()
|
|
||||||
event.preventDefault()
|
|
||||||
break;
|
|
||||||
case "ArrowDown": this.focus(1, 0, cell)
|
|
||||||
event.stopPropagation()
|
|
||||||
event.preventDefault()
|
|
||||||
break;
|
|
||||||
case "ArrowLeft": this.focus(0, -1, cell)
|
|
||||||
event.stopPropagation()
|
|
||||||
event.preventDefault()
|
|
||||||
break;
|
|
||||||
case "ArrowRight": this.focus(0, 1, cell)
|
|
||||||
event.stopPropagation()
|
|
||||||
event.preventDefault()
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* React on 'cell' event, re-emitting it with additional values:
|
* React on 'cell' event, re-emitting it with additional values:
|
||||||
* - `set`: data set
|
* - `set`: data set
|
||||||
|
@ -108,27 +83,30 @@ const Component = {
|
||||||
*/
|
*/
|
||||||
onCellEvent(row, event) {
|
onCellEvent(row, event) {
|
||||||
if(event.name == 'focus')
|
if(event.name == 'focus')
|
||||||
this.cellFocus(event.data, event.cell)
|
this.focus(event.data, event.cell)
|
||||||
|
|
||||||
this.$emit('cell', {
|
this.$emit('cell', {
|
||||||
...event, row,
|
...event, row,
|
||||||
set: this.set
|
set: this.set
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
getCellNode(row, col) {
|
/**
|
||||||
const el = this.$refs[row]
|
* Return row component at provided index
|
||||||
return el && el.cellEls(col)
|
*/
|
||||||
|
getRow(row) {
|
||||||
|
const els = this.$el.querySelectorAll('tr')
|
||||||
|
for(var el of els)
|
||||||
|
if(el.__row && row == Number(el.dataset.row))
|
||||||
|
return el.__row
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Focus on a cell
|
* Focus on a cell
|
||||||
*/
|
*/
|
||||||
focus(row, col, from=null) {
|
focus(row, col, from=null) {
|
||||||
if(from)
|
if(from)
|
||||||
row += from.row
|
row += from.row
|
||||||
|
row = this.getRow(row)
|
||||||
row = this.rows[row]
|
|
||||||
row && row.focus(col, from)
|
row && row.focus(col, from)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue
Block a user