Compare commits
43 Commits
9378435345
...
1aababe2ae
Author | SHA1 | Date | |
---|---|---|---|
1aababe2ae | |||
0dd961e0bb | |||
f9da318a38 | |||
26fa426416 | |||
71f4d2473e | |||
2e9ebaded2 | |||
c6a4196319 | |||
be224d0efb | |||
89f80ad103 | |||
6d556fcd5d | |||
4201d50f4b | |||
6c942f36fa | |||
d51b9ee58b | |||
1a27ae2a76 | |||
e5862ee59b | |||
8f88b15536 | |||
10dfe3811b | |||
f71c201020 | |||
0812f3a0a1 | |||
ad2ed17c34 | |||
9db69580e0 | |||
4ead6b154b | |||
811cc97e07 | |||
b794e24d0c | |||
269b29b2c1 | |||
![]() |
df41885cca | ||
![]() |
2a75608701 | ||
![]() |
e1cf455384 | ||
![]() |
93e286fa62 | ||
![]() |
e3966ca5cb | ||
![]() |
c335ed9fb9 | ||
![]() |
ad90255570 | ||
![]() |
cab6cacd0b | ||
![]() |
1475a80316 | ||
![]() |
b9148933f4 | ||
![]() |
5bb52a9d67 | ||
![]() |
8cf57c07b2 | ||
![]() |
20aa3aba9d | ||
![]() |
d53cb3e935 | ||
![]() |
25ceacdff9 | ||
![]() |
0adcacf375 | ||
![]() |
c31d776504 | ||
![]() |
69b77a675b |
|
@ -86,8 +86,8 @@ class Settings(BaseSettings):
|
|||
# TODO include content_type in order to avoid clash with potential
|
||||
# extra applications
|
||||
# aircox
|
||||
"change_program",
|
||||
"change_episode",
|
||||
"view_program",
|
||||
"view_episode",
|
||||
"change_diffusion",
|
||||
"add_comment",
|
||||
"change_comment",
|
||||
|
|
4
aircox/context_processors/__init__.py
Normal file
4
aircox/context_processors/__init__.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
def station(request):
|
||||
station = request.station
|
||||
audio_streams = station.streams if station else None
|
||||
return {"station": station, "audio_streams": audio_streams}
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Aircox 0.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-01-16 13:25+0000\n"
|
||||
"POT-Creation-Date: 2024-02-01 18:22+0000\n"
|
||||
"PO-Revision-Date: 2016-10-10 16:00+02\n"
|
||||
"Last-Translator: Aarys\n"
|
||||
"Language-Team: Aircox's translators team\n"
|
||||
|
@ -19,7 +19,7 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: aircox/admin/diffusion.py:26 aircox/models/diffusion.py:122
|
||||
#: aircox/models/log.py:75
|
||||
#: aircox/models/log.py:76
|
||||
msgid "start"
|
||||
msgstr "début"
|
||||
|
||||
|
@ -40,7 +40,7 @@ msgstr "Depuis"
|
|||
msgid "Until"
|
||||
msgstr "Jusque"
|
||||
|
||||
#: aircox/admin/filters.py:28 aircox/models/page.py:260
|
||||
#: aircox/admin/filters.py:28 aircox/models/page.py:263
|
||||
#: aircox/tests/admin/test_filters.py:53
|
||||
msgid "None"
|
||||
msgstr "Aucun"
|
||||
|
@ -77,7 +77,7 @@ msgstr "Audio"
|
|||
msgid "Program / Episode"
|
||||
msgstr "Émission / Épisode"
|
||||
|
||||
#: aircox/admin/sound.py:135 aircox/templates/aircox/episode_detail.html:30
|
||||
#: aircox/admin/sound.py:135 aircox/templates/aircox/episode_detail.html:29
|
||||
msgid "Playlist"
|
||||
msgstr "Playlist"
|
||||
|
||||
|
@ -115,7 +115,7 @@ msgstr "Article"
|
|||
msgid "Articles"
|
||||
msgstr "Articles"
|
||||
|
||||
#: aircox/models/diffusion.py:100 aircox/models/log.py:77
|
||||
#: aircox/models/diffusion.py:100 aircox/models/log.py:78
|
||||
msgid "on air"
|
||||
msgstr "à l'antenne"
|
||||
|
||||
|
@ -123,7 +123,7 @@ msgstr "à l'antenne"
|
|||
msgid "not confirmed"
|
||||
msgstr "non confirmé"
|
||||
|
||||
#: aircox/models/diffusion.py:102 aircox/models/log.py:76
|
||||
#: aircox/models/diffusion.py:102 aircox/models/log.py:77
|
||||
msgid "cancelled"
|
||||
msgstr "annulé"
|
||||
|
||||
|
@ -136,12 +136,12 @@ msgstr "épisode"
|
|||
msgid "schedule"
|
||||
msgstr "horaire"
|
||||
|
||||
#: aircox/models/diffusion.py:118 aircox/models/log.py:87
|
||||
#: aircox/models/sound.py:113 aircox/models/station.py:156
|
||||
#: aircox/models/diffusion.py:118 aircox/models/log.py:88
|
||||
#: aircox/models/sound.py:113 aircox/models/station.py:160
|
||||
msgid "type"
|
||||
msgstr "type"
|
||||
|
||||
#: aircox/models/diffusion.py:133 aircox/models/log.py:126
|
||||
#: aircox/models/diffusion.py:133 aircox/models/log.py:127
|
||||
msgid "Diffusion"
|
||||
msgstr "Date de diffusion"
|
||||
|
||||
|
@ -165,57 +165,57 @@ msgstr "Épisode"
|
|||
msgid "Episodes"
|
||||
msgstr "Épisodes"
|
||||
|
||||
#: aircox/models/log.py:74
|
||||
#: aircox/models/log.py:75
|
||||
msgid "stop"
|
||||
msgstr "stop"
|
||||
|
||||
#: aircox/models/log.py:78 aircox/models/sound.py:90
|
||||
#: aircox/models/log.py:79 aircox/models/sound.py:90
|
||||
msgid "other"
|
||||
msgstr "autre"
|
||||
|
||||
#: aircox/models/log.py:84 aircox/models/page.py:320
|
||||
#: aircox/models/program.py:50 aircox/models/station.py:154
|
||||
#: aircox/models/log.py:85 aircox/models/page.py:323
|
||||
#: aircox/models/program.py:50 aircox/models/station.py:158
|
||||
msgid "station"
|
||||
msgstr "station"
|
||||
|
||||
#: aircox/models/log.py:85
|
||||
#: aircox/models/log.py:86
|
||||
msgid "related station"
|
||||
msgstr "station relative"
|
||||
|
||||
#: aircox/models/log.py:88 aircox/models/schedule.py:48
|
||||
#: aircox/models/log.py:89 aircox/models/schedule.py:48
|
||||
msgid "date"
|
||||
msgstr "date"
|
||||
|
||||
#: aircox/models/log.py:95
|
||||
#: aircox/models/log.py:96
|
||||
msgid "source"
|
||||
msgstr "source"
|
||||
|
||||
#: aircox/models/log.py:96
|
||||
#: aircox/models/log.py:97
|
||||
msgid "identifier of the source related to this log"
|
||||
msgstr "identifiant de la source relative à ce log"
|
||||
|
||||
#: aircox/models/log.py:102
|
||||
#: aircox/models/log.py:103
|
||||
msgid "comment"
|
||||
msgstr "commentaire"
|
||||
|
||||
#: aircox/models/log.py:110 aircox/models/sound.py:163
|
||||
#: aircox/models/log.py:111 aircox/models/sound.py:163
|
||||
msgid "Sound"
|
||||
msgstr "Son"
|
||||
|
||||
#: aircox/models/log.py:118 aircox/models/sound.py:294
|
||||
#: aircox/models/log.py:119 aircox/models/sound.py:294
|
||||
#: aircox/templates/admin/aircox/statistics.html:24
|
||||
msgid "Track"
|
||||
msgstr "Morceau"
|
||||
|
||||
#: aircox/models/log.py:150
|
||||
#: aircox/models/log.py:151
|
||||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
#: aircox/models/log.py:151
|
||||
#: aircox/models/log.py:152
|
||||
msgid "Logs"
|
||||
msgstr "Logs"
|
||||
|
||||
#: aircox/models/page.py:43 aircox/models/page.py:323
|
||||
#: aircox/models/page.py:43 aircox/models/page.py:326
|
||||
#: aircox/models/sound.py:277
|
||||
msgid "title"
|
||||
msgstr "titre"
|
||||
|
@ -253,125 +253,117 @@ msgstr "statut"
|
|||
msgid "cover"
|
||||
msgstr "couverture"
|
||||
|
||||
#: aircox/models/page.py:111 aircox/models/page.py:300
|
||||
#: aircox/models/page.py:111 aircox/models/page.py:303
|
||||
msgid "content"
|
||||
msgstr "contenu"
|
||||
|
||||
#: aircox/models/page.py:205
|
||||
#: aircox/models/page.py:208
|
||||
msgid "category"
|
||||
msgstr "catégorie"
|
||||
|
||||
#: aircox/models/page.py:210
|
||||
#: aircox/models/page.py:213
|
||||
msgid "publication date"
|
||||
msgstr "date de publication"
|
||||
|
||||
#: aircox/models/page.py:212
|
||||
#: aircox/models/page.py:215
|
||||
msgid "featured"
|
||||
msgstr "en avant"
|
||||
|
||||
#: aircox/models/page.py:216
|
||||
#: aircox/models/page.py:219
|
||||
msgid "allow comments"
|
||||
msgstr "autoriser les commentaires"
|
||||
|
||||
#: aircox/models/page.py:240
|
||||
#: aircox/models/page.py:243
|
||||
msgid "Publication"
|
||||
msgstr "Publication"
|
||||
|
||||
#: aircox/models/page.py:241
|
||||
#: aircox/models/page.py:244
|
||||
msgid "Publications"
|
||||
msgstr "Publications"
|
||||
|
||||
#: aircox/models/page.py:261
|
||||
#, fuzzy
|
||||
#| msgid "Home page"
|
||||
#: aircox/models/page.py:264
|
||||
msgid "Home Page"
|
||||
msgstr "Page d'accueil"
|
||||
|
||||
#: aircox/models/page.py:262
|
||||
#, fuzzy
|
||||
#| msgid "Timestamp"
|
||||
#: aircox/models/page.py:265
|
||||
msgid "Timetable"
|
||||
msgstr "Temps"
|
||||
|
||||
#: aircox/models/page.py:263
|
||||
#: aircox/models/page.py:266
|
||||
msgid "Programs list"
|
||||
msgstr "Liste des émissions"
|
||||
|
||||
#: aircox/models/page.py:264
|
||||
#: aircox/models/page.py:267
|
||||
msgid "Episodes list"
|
||||
msgstr "Liste des épisodes"
|
||||
|
||||
#: aircox/models/page.py:265
|
||||
#: aircox/models/page.py:268
|
||||
msgid "Articles list"
|
||||
msgstr "Liste des articles"
|
||||
|
||||
#: aircox/models/page.py:266
|
||||
#, fuzzy
|
||||
#| msgid "Publications"
|
||||
#: aircox/models/page.py:269
|
||||
msgid "Publications list"
|
||||
msgstr "Publications"
|
||||
|
||||
#: aircox/models/page.py:267
|
||||
#, fuzzy
|
||||
#| msgid "Podcasts"
|
||||
#: aircox/models/page.py:270
|
||||
msgid "Podcasts list"
|
||||
msgstr "Podcasts"
|
||||
|
||||
#: aircox/models/page.py:270
|
||||
#: aircox/models/page.py:273
|
||||
msgid "attach to"
|
||||
msgstr "attacher à"
|
||||
|
||||
#: aircox/models/page.py:275
|
||||
#: aircox/models/page.py:278
|
||||
msgid "display this page content to related element"
|
||||
msgstr "Afficher le contenu de cette page pour l'élément sélectionné"
|
||||
|
||||
#: aircox/models/page.py:293
|
||||
#: aircox/models/page.py:296
|
||||
msgid "related page"
|
||||
msgstr "page liée"
|
||||
|
||||
#: aircox/models/page.py:297
|
||||
#: aircox/models/page.py:300
|
||||
msgid "nickname"
|
||||
msgstr "pseudo"
|
||||
|
||||
#: aircox/models/page.py:298
|
||||
#: aircox/models/page.py:301
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: aircox/models/page.py:313
|
||||
#: aircox/models/page.py:316
|
||||
msgid "Comment"
|
||||
msgstr "Commentaire"
|
||||
|
||||
#: aircox/models/page.py:314 aircox/templates/aircox/page_detail.html:59
|
||||
#: aircox/models/page.py:317 aircox/templates/aircox/page_detail.html:60
|
||||
msgid "Comments"
|
||||
msgstr "Commentaires"
|
||||
|
||||
#: aircox/models/page.py:321
|
||||
#: aircox/models/page.py:324
|
||||
msgid "menu"
|
||||
msgstr "menu"
|
||||
|
||||
#: aircox/models/page.py:322 aircox/models/sound.py:115
|
||||
#: aircox/models/page.py:325 aircox/models/sound.py:115
|
||||
#: aircox/models/sound.py:267
|
||||
msgid "order"
|
||||
msgstr "ordre"
|
||||
|
||||
#: aircox/models/page.py:324
|
||||
#: aircox/models/page.py:327
|
||||
msgid "url"
|
||||
msgstr "url"
|
||||
|
||||
#: aircox/models/page.py:329
|
||||
#: aircox/models/page.py:332
|
||||
msgid "page"
|
||||
msgstr "page"
|
||||
|
||||
#: aircox/models/page.py:335
|
||||
#: aircox/models/page.py:338
|
||||
msgid "Menu item"
|
||||
msgstr "Élément du menu"
|
||||
|
||||
#: aircox/models/page.py:336
|
||||
#: aircox/models/page.py:339
|
||||
msgid "Menu items"
|
||||
msgstr "Éléments de menu"
|
||||
|
||||
#: aircox/models/program.py:52 aircox/models/station.py:48
|
||||
#: aircox/models/station.py:157
|
||||
#: aircox/models/station.py:161
|
||||
msgid "active"
|
||||
msgstr "actif"
|
||||
|
||||
|
@ -533,7 +525,7 @@ msgstr "émission apparentée à celui-ci"
|
|||
msgid "position in the playlist"
|
||||
msgstr "position dans la playlist"
|
||||
|
||||
#: aircox/models/sound.py:125 aircox/models/station.py:151
|
||||
#: aircox/models/sound.py:125 aircox/models/station.py:155
|
||||
msgid "file"
|
||||
msgstr "fichier"
|
||||
|
||||
|
@ -666,27 +658,35 @@ msgstr ""
|
|||
msgid "Default pages' cover"
|
||||
msgstr "Couverture par défault des pages."
|
||||
|
||||
#: aircox/models/station.py:133
|
||||
#: aircox/models/station.py:80
|
||||
msgid "Music stream's title"
|
||||
msgstr "Titre du flux musical"
|
||||
|
||||
#: aircox/models/station.py:81
|
||||
msgid "Music stream"
|
||||
msgstr "Flux musical"
|
||||
|
||||
#: aircox/models/station.py:137
|
||||
msgid "input"
|
||||
msgstr "entrée"
|
||||
|
||||
#: aircox/models/station.py:134
|
||||
#: aircox/models/station.py:138
|
||||
msgid "output"
|
||||
msgstr "sortie"
|
||||
|
||||
#: aircox/models/station.py:155
|
||||
#: aircox/models/station.py:159
|
||||
msgid "direction"
|
||||
msgstr "direction"
|
||||
|
||||
#: aircox/models/station.py:157
|
||||
#: aircox/models/station.py:161
|
||||
msgid "this port is active"
|
||||
msgstr "ce port est actif"
|
||||
|
||||
#: aircox/models/station.py:159
|
||||
#: aircox/models/station.py:163
|
||||
msgid "port settings"
|
||||
msgstr "paramètres du port"
|
||||
|
||||
#: aircox/models/station.py:161
|
||||
#: aircox/models/station.py:165
|
||||
msgid ""
|
||||
"list of comma separated params available; this is put in the output config "
|
||||
"file as raw code; plugin related"
|
||||
|
@ -757,7 +757,7 @@ msgid "Total"
|
|||
msgstr "Total"
|
||||
|
||||
#: aircox/templates/admin/base.html:72 aircox/templates/admin/index.html:12
|
||||
#: aircox/templates/aircox/home.html:48
|
||||
#: aircox/templates/aircox/home.html:51
|
||||
msgid "Today"
|
||||
msgstr "Aujourd'hui"
|
||||
|
||||
|
@ -817,24 +817,9 @@ msgstr "Dernières publications"
|
|||
msgid "Administration"
|
||||
msgstr "Administration"
|
||||
|
||||
#. Translators: in page detail sidebar
|
||||
#: aircox/templates/aircox/article_detail.html:12
|
||||
msgid "Latest news"
|
||||
msgstr "Dernières nouvelles"
|
||||
|
||||
#: aircox/templates/aircox/article_detail.html:23
|
||||
msgid "Show all news"
|
||||
msgstr "Afficher toutes les nouvelles"
|
||||
|
||||
#: aircox/templates/aircox/article_detail.html:24
|
||||
msgid "More news"
|
||||
msgstr "Plus de nouvelles"
|
||||
|
||||
#: aircox/templates/aircox/base.html:61
|
||||
#, fuzzy
|
||||
#| msgid "menu"
|
||||
msgid "Main menu"
|
||||
msgstr "menu"
|
||||
msgstr "Menu principal"
|
||||
|
||||
#: aircox/templates/aircox/base.html:71
|
||||
msgid "Admin"
|
||||
|
@ -853,8 +838,8 @@ msgstr "pagination"
|
|||
msgid "Previous"
|
||||
msgstr "Précédent"
|
||||
|
||||
#: aircox/templates/aircox/basepage_list.html:53
|
||||
#: aircox/templates/aircox/basepage_list.html:54
|
||||
#: aircox/templates/aircox/basepage_list.html:57
|
||||
#: aircox/templates/aircox/basepage_list.html:58
|
||||
msgid "Next"
|
||||
msgstr "Prochain"
|
||||
|
||||
|
@ -863,17 +848,17 @@ msgstr "Prochain"
|
|||
msgid "This week on %(station)s"
|
||||
msgstr "Cette semaine sur %(station)s"
|
||||
|
||||
#: aircox/templates/aircox/episode_detail.html:17
|
||||
#: aircox/templates/aircox/episode_detail.html:16
|
||||
#: aircox/templates/aircox/episode_list.html:8
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
#: aircox/templates/aircox/episode_detail.html:35
|
||||
#: aircox/templates/aircox/episode_detail.html:34
|
||||
#: aircox/templatetags/aircox_admin.py:48
|
||||
msgid "Artist"
|
||||
msgstr "Artiste"
|
||||
|
||||
#: aircox/templates/aircox/episode_detail.html:36
|
||||
#: aircox/templates/aircox/episode_detail.html:35
|
||||
#: aircox/templatetags/aircox_admin.py:50
|
||||
msgid "Title"
|
||||
msgstr "Titre"
|
||||
|
@ -915,35 +900,30 @@ msgstr "Si vous êtes un visiteur ou visiteuse, contactez votre radio favorite"
|
|||
msgid "Today on %(station)s"
|
||||
msgstr "Aujourd'hui sur %(station)s"
|
||||
|
||||
#: aircox/templates/aircox/home.html:40
|
||||
#: aircox/templates/aircox/home.html:42
|
||||
msgid "It just happened"
|
||||
msgstr "Ça vient juste d'arriver"
|
||||
|
||||
#: aircox/templates/aircox/home.html:47
|
||||
#: aircox/templates/aircox/home.html:50
|
||||
msgid "Show all program's for today"
|
||||
msgstr "Tous les articles de l'émission"
|
||||
|
||||
#: aircox/templates/aircox/home.html:57
|
||||
#: aircox/templates/aircox/home.html:60
|
||||
msgid "Last podcasts"
|
||||
msgstr "Derniers Podcasts"
|
||||
|
||||
#: aircox/templates/aircox/home.html:58
|
||||
#: aircox/templates/aircox/home.html:61
|
||||
msgid "All podcasts"
|
||||
msgstr "Tous les podcasts"
|
||||
|
||||
#: aircox/templates/aircox/home.html:64
|
||||
#: aircox/templates/aircox/home.html:67
|
||||
msgid "Last publications"
|
||||
msgstr "Dernières publications"
|
||||
|
||||
#: aircox/templates/aircox/home.html:65
|
||||
#: aircox/templates/aircox/home.html:68
|
||||
msgid "All publications"
|
||||
msgstr "Toutes les publications"
|
||||
|
||||
#: aircox/templates/aircox/log_list.html:9
|
||||
#, python-format
|
||||
msgid "That happened on %(station)s"
|
||||
msgstr "C'est passé sur %(station)s"
|
||||
|
||||
#: aircox/templates/aircox/page_detail.html:21
|
||||
msgid "Edit"
|
||||
msgstr "Éditer"
|
||||
|
@ -953,11 +933,11 @@ msgstr "Éditer"
|
|||
msgid "Related %(models)s"
|
||||
msgstr "%(models)s connexes"
|
||||
|
||||
#: aircox/templates/aircox/page_detail.html:71
|
||||
#: aircox/templates/aircox/page_detail.html:72
|
||||
msgid "Post a comment"
|
||||
msgstr "Poster un commentaire"
|
||||
|
||||
#: aircox/templates/aircox/page_detail.html:98
|
||||
#: aircox/templates/aircox/page_detail.html:99
|
||||
msgid "Post comment"
|
||||
msgstr "Commenter"
|
||||
|
||||
|
@ -971,24 +951,18 @@ msgid "Rerun"
|
|||
msgstr "Rediffusion"
|
||||
|
||||
#: aircox/templates/aircox/program_detail.html:41
|
||||
#, fuzzy
|
||||
#| msgid "Episodes"
|
||||
msgid "Last Episodes"
|
||||
msgstr "Épisodes"
|
||||
msgstr "Derniers Épisodes"
|
||||
|
||||
#: aircox/templates/aircox/program_detail.html:42
|
||||
msgid "All episodes"
|
||||
msgstr "Tous les épisodes"
|
||||
|
||||
#: aircox/templates/aircox/program_detail.html:49
|
||||
#, fuzzy
|
||||
#| msgid "Articles"
|
||||
msgid "Last Articles"
|
||||
msgstr "Derniers articles"
|
||||
|
||||
#: aircox/templates/aircox/program_detail.html:50
|
||||
#, fuzzy
|
||||
#| msgid "Articles"
|
||||
msgid "All articles"
|
||||
msgstr "Tous les articles"
|
||||
|
||||
|
@ -998,7 +972,7 @@ msgstr "Plus d'infos"
|
|||
|
||||
#: aircox/templates/aircox/widgets/carousel.html:25
|
||||
msgid "Show all"
|
||||
msgstr "Afficher tout"
|
||||
msgstr "Tout Afficher"
|
||||
|
||||
#: aircox/templates/aircox/widgets/comment.html:37
|
||||
#: aircox/templates/aircox/widgets/comment.html:38
|
||||
|
@ -1019,8 +993,6 @@ msgid "Dates"
|
|||
msgstr "Dates"
|
||||
|
||||
#: aircox/templates/aircox/widgets/dates_menu.html:33
|
||||
#, fuzzy
|
||||
#| msgid "pick a date"
|
||||
msgid "Pick a date"
|
||||
msgstr "Choisir une date"
|
||||
|
||||
|
@ -1036,6 +1008,10 @@ msgstr "Diffusion différée"
|
|||
msgid "Listen"
|
||||
msgstr "Écouter"
|
||||
|
||||
#: aircox/templates/aircox/widgets/page.html:40
|
||||
msgid "Show"
|
||||
msgstr "Voir"
|
||||
|
||||
#: aircox/templates/aircox/widgets/page_list.html:20
|
||||
msgid "Show all publications"
|
||||
msgstr "Afficher toutes les publications"
|
||||
|
@ -1060,11 +1036,11 @@ msgstr "Lire ou suspendre l'audio"
|
|||
msgid "Track currently on air"
|
||||
msgstr "Morceau en ce moment sur les ondes"
|
||||
|
||||
#: aircox/templates/aircox/widgets/player.html:42
|
||||
#: aircox/templates/aircox/widgets/player.html:44
|
||||
msgid "Diffusion currently on air"
|
||||
msgstr "Épisode en ce moment sur les ondes"
|
||||
|
||||
#: aircox/templates/aircox/widgets/player.html:46
|
||||
#: aircox/templates/aircox/widgets/player.html:48
|
||||
msgid "Currently playing"
|
||||
msgstr "En ce moment"
|
||||
|
||||
|
@ -1101,108 +1077,115 @@ msgid "Timestamp"
|
|||
msgstr "Temps"
|
||||
|
||||
#: aircox/urls.py:44
|
||||
msgid "articles/"
|
||||
msgstr "articles/"
|
||||
|
||||
#: aircox/urls.py:49
|
||||
#, fuzzy
|
||||
#| msgid "articles/<slug:slug>/"
|
||||
msgid "articles/c/<slug:category_slug>/"
|
||||
msgstr "articles/<slug:slug>/"
|
||||
|
||||
#: aircox/urls.py:52
|
||||
msgid "articles/<slug:slug>/"
|
||||
msgstr "articles/<slug:slug>/"
|
||||
|
||||
#: aircox/urls.py:57
|
||||
msgid "episodes/"
|
||||
msgstr "episodes/"
|
||||
#: aircox/urls.py:49
|
||||
msgid "articles/"
|
||||
msgstr "articles/"
|
||||
|
||||
#: aircox/urls.py:58
|
||||
msgid "episodes/c/<slug:category_slug>/"
|
||||
msgstr "episodes/c/<slug:category_slug>/"
|
||||
#: aircox/urls.py:54
|
||||
msgid "articles/c/<slug:category_slug>/"
|
||||
msgstr "articles/<slug:slug>/"
|
||||
|
||||
#: aircox/urls.py:60
|
||||
msgid "episodes/<slug:slug>/"
|
||||
msgstr "episodes/<slug:slug>/"
|
||||
|
||||
#: aircox/urls.py:64
|
||||
msgid "podcasts/"
|
||||
msgstr "podcasts/"
|
||||
|
||||
#: aircox/urls.py:65
|
||||
msgid "podcasts/c/<slug:category_slug>/"
|
||||
msgstr "podcasts/c/<slug:category_slug>/"
|
||||
|
||||
#: aircox/urls.py:68
|
||||
#: aircox/urls.py:59
|
||||
msgid "timetable/"
|
||||
msgstr "grille/"
|
||||
|
||||
#: aircox/urls.py:70
|
||||
#: aircox/urls.py:61
|
||||
msgid "timetable/<date:date>/"
|
||||
msgstr "grille/<date:date>/"
|
||||
|
||||
#: aircox/urls.py:76
|
||||
#: aircox/urls.py:67
|
||||
msgid "publications/"
|
||||
msgstr "publications/"
|
||||
|
||||
#: aircox/urls.py:81
|
||||
#, fuzzy
|
||||
#| msgid "publications/c/<slug:category_slug>/"
|
||||
#: aircox/urls.py:72
|
||||
msgid "publications/c/<slug:category_slug>"
|
||||
msgstr "publications/c/<slug:category_slug>/"
|
||||
|
||||
#: aircox/urls.py:86
|
||||
msgid "pages/"
|
||||
msgstr "pages/"
|
||||
|
||||
#: aircox/urls.py:94
|
||||
#: aircox/urls.py:77
|
||||
msgid "pages/<slug:slug>/"
|
||||
msgstr "pages/<slug:slug>/"
|
||||
|
||||
#: aircox/urls.py:102
|
||||
#: aircox/urls.py:85
|
||||
msgid "pages/"
|
||||
msgstr "pages/"
|
||||
|
||||
#: aircox/urls.py:93
|
||||
msgid "programs/"
|
||||
msgstr "emissions/"
|
||||
|
||||
#: aircox/urls.py:103
|
||||
#: aircox/urls.py:94
|
||||
msgid "programs/c/<slug:category_slug>/"
|
||||
msgstr "emissions/c/<slug:category_slug>/"
|
||||
|
||||
#: aircox/urls.py:105
|
||||
msgid "programs/<slug:slug>/"
|
||||
msgstr "emissions/<slug:slug>/"
|
||||
#: aircox/urls.py:96
|
||||
msgid "programs/<slug:slug>"
|
||||
msgstr "emissions/<slug:slug>"
|
||||
|
||||
#: aircox/urls.py:109
|
||||
msgid "programs/<slug:parent_slug>/articles/"
|
||||
msgstr "emissions/<slug:parent_slug>/articles/"
|
||||
#: aircox/urls.py:100
|
||||
msgid "programs/<slug:parent_slug>/articles"
|
||||
msgstr "emissions/<slug:parent_slug>/articles"
|
||||
|
||||
#: aircox/urls.py:101
|
||||
msgid "programs/<slug:parent_slug>/podcasts"
|
||||
msgstr "emissions/<slug:parent_slug>/podcasts"
|
||||
|
||||
#: aircox/urls.py:102
|
||||
msgid "programs/<slug:parent_slug>/episodes"
|
||||
msgstr "emissions/<slug:parent_slug>/episodes"
|
||||
|
||||
#: aircox/urls.py:103
|
||||
msgid "programs/<slug:parent_slug>/diffusions"
|
||||
msgstr "emissions/<slug:parent_slug>/diffusions"
|
||||
|
||||
#: aircox/urls.py:105
|
||||
msgid "programs/<slug:parent_slug>/publications"
|
||||
msgstr "emissions/<slug:parent_slug>/publications"
|
||||
|
||||
#: aircox/urls.py:110
|
||||
msgid "programs/<slug:parent_slug>/podcasts/"
|
||||
msgstr "emissions/<slug:parent_slug>/episodes/"
|
||||
msgid "programs/episodes/"
|
||||
msgstr "emissions/episodes/"
|
||||
|
||||
#: aircox/urls.py:111
|
||||
msgid "programs/<slug:parent_slug>/episodes/"
|
||||
msgstr "emissions/<slug:parent_slug>/episodes/"
|
||||
msgid "programs/episodes/c/<slug:category_slug>"
|
||||
msgstr "emissions/episodes/c/<slug:category_slug>"
|
||||
|
||||
#: aircox/urls.py:112
|
||||
msgid "programs/<slug:parent_slug>/diffusions/"
|
||||
msgstr "emissions/<slug:parent_slug>/diffusions/"
|
||||
#: aircox/urls.py:113
|
||||
msgid "programs/episodes/<slug:slug>"
|
||||
msgstr "emissions/episodes/<slug:slug>"
|
||||
|
||||
#: aircox/urls.py:119
|
||||
#, fuzzy
|
||||
#| msgid "programs/<slug:parent_slug>/publications/"
|
||||
msgid "program/<slug:parent_slug>/publications"
|
||||
msgstr "emissions/<slug:parent_slug>/publications/"
|
||||
#: aircox/urls.py:117
|
||||
msgid "podcasts/"
|
||||
msgstr "podcasts/"
|
||||
|
||||
#: aircox/views/page.py:69
|
||||
#: aircox/urls.py:118
|
||||
msgid "podcasts/c/<slug:category_slug>/"
|
||||
msgstr "podcasts/c/<slug:category_slug>/"
|
||||
|
||||
#: aircox/views/page.py:75
|
||||
#, python-brace-format
|
||||
msgid "{model}"
|
||||
msgstr "{model}"
|
||||
|
||||
#: aircox/views/page.py:192
|
||||
#: aircox/views/page.py:180
|
||||
msgid "comments are not allowed"
|
||||
msgstr "les commentaires ne sont pas autorisés"
|
||||
|
||||
#~ msgid "Latest news"
|
||||
#~ msgstr "Dernières nouvelles"
|
||||
|
||||
#~ msgid "Show all news"
|
||||
#~ msgstr "Afficher toutes les nouvelles"
|
||||
|
||||
#~ msgid "More news"
|
||||
#~ msgstr "Plus de nouvelles"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "That happened on %(station)s"
|
||||
#~ msgstr "C'est passé sur %(station)s"
|
||||
|
||||
#~ msgid "Diffusions page"
|
||||
#~ msgstr "Grille horaire"
|
||||
|
||||
|
|
25
aircox/migrations/0015_program_editors.py
Normal file
25
aircox/migrations/0015_program_editors.py
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Generated by Django 4.2.5 on 2023-10-18 13:50
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("auth", "0012_alter_user_first_name_max_length"),
|
||||
("aircox", "0014_alter_schedule_timezone"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="program",
|
||||
name="editors",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="auth.group",
|
||||
verbose_name="editors",
|
||||
),
|
||||
),
|
||||
]
|
12
aircox/migrations/0019_merge_20240119_1022.py
Normal file
12
aircox/migrations/0019_merge_20240119_1022.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
# Generated by Django 4.2.7 on 2024-01-19 09:22
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("aircox", "0015_program_editors"),
|
||||
("aircox", "0018_alter_staticpage_attach_to"),
|
||||
]
|
||||
|
||||
operations = []
|
|
@ -0,0 +1,42 @@
|
|||
# Generated by Django 4.2.1 on 2024-02-01 18:12
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("aircox", "0018_alter_staticpage_attach_to"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="station",
|
||||
name="music_stream_title",
|
||||
field=models.CharField(
|
||||
default="Music stream",
|
||||
max_length=64,
|
||||
verbose_name="Music stream's title",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="staticpage",
|
||||
name="attach_to",
|
||||
field=models.CharField(
|
||||
blank=True,
|
||||
choices=[
|
||||
("", "None"),
|
||||
("home", "Home Page"),
|
||||
("timetable-list", "Timetable"),
|
||||
("program-list", "Programs list"),
|
||||
("episode-list", "Episodes list"),
|
||||
("article-list", "Articles list"),
|
||||
("page-list", "Publications list"),
|
||||
("podcast-list", "Podcasts list"),
|
||||
],
|
||||
help_text="display this page content to related element",
|
||||
max_length=32,
|
||||
null=True,
|
||||
verbose_name="attach to",
|
||||
),
|
||||
),
|
||||
]
|
12
aircox/migrations/0020_merge_20240205_1027.py
Normal file
12
aircox/migrations/0020_merge_20240205_1027.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
# Generated by Django 4.2.7 on 2024-02-05 09:27
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("aircox", "0019_merge_20240119_1022"),
|
||||
("aircox", "0019_station_program_streams_title_and_more"),
|
||||
]
|
||||
|
||||
operations = []
|
623
aircox/migrations/0021_alter_schedule_timezone.py
Normal file
623
aircox/migrations/0021_alter_schedule_timezone.py
Normal file
|
@ -0,0 +1,623 @@
|
|||
# Generated by Django 4.2.7 on 2024-02-06 08:13
|
||||
|
||||
import aircox.models.schedule
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("aircox", "0020_merge_20240205_1027"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="schedule",
|
||||
name="timezone",
|
||||
field=models.CharField(
|
||||
choices=[
|
||||
("Africa/Abidjan", "Africa/Abidjan"),
|
||||
("Africa/Accra", "Africa/Accra"),
|
||||
("Africa/Addis_Ababa", "Africa/Addis_Ababa"),
|
||||
("Africa/Algiers", "Africa/Algiers"),
|
||||
("Africa/Asmara", "Africa/Asmara"),
|
||||
("Africa/Asmera", "Africa/Asmera"),
|
||||
("Africa/Bamako", "Africa/Bamako"),
|
||||
("Africa/Bangui", "Africa/Bangui"),
|
||||
("Africa/Banjul", "Africa/Banjul"),
|
||||
("Africa/Bissau", "Africa/Bissau"),
|
||||
("Africa/Blantyre", "Africa/Blantyre"),
|
||||
("Africa/Brazzaville", "Africa/Brazzaville"),
|
||||
("Africa/Bujumbura", "Africa/Bujumbura"),
|
||||
("Africa/Cairo", "Africa/Cairo"),
|
||||
("Africa/Casablanca", "Africa/Casablanca"),
|
||||
("Africa/Ceuta", "Africa/Ceuta"),
|
||||
("Africa/Conakry", "Africa/Conakry"),
|
||||
("Africa/Dakar", "Africa/Dakar"),
|
||||
("Africa/Dar_es_Salaam", "Africa/Dar_es_Salaam"),
|
||||
("Africa/Djibouti", "Africa/Djibouti"),
|
||||
("Africa/Douala", "Africa/Douala"),
|
||||
("Africa/El_Aaiun", "Africa/El_Aaiun"),
|
||||
("Africa/Freetown", "Africa/Freetown"),
|
||||
("Africa/Gaborone", "Africa/Gaborone"),
|
||||
("Africa/Harare", "Africa/Harare"),
|
||||
("Africa/Johannesburg", "Africa/Johannesburg"),
|
||||
("Africa/Juba", "Africa/Juba"),
|
||||
("Africa/Kampala", "Africa/Kampala"),
|
||||
("Africa/Khartoum", "Africa/Khartoum"),
|
||||
("Africa/Kigali", "Africa/Kigali"),
|
||||
("Africa/Kinshasa", "Africa/Kinshasa"),
|
||||
("Africa/Lagos", "Africa/Lagos"),
|
||||
("Africa/Libreville", "Africa/Libreville"),
|
||||
("Africa/Lome", "Africa/Lome"),
|
||||
("Africa/Luanda", "Africa/Luanda"),
|
||||
("Africa/Lubumbashi", "Africa/Lubumbashi"),
|
||||
("Africa/Lusaka", "Africa/Lusaka"),
|
||||
("Africa/Malabo", "Africa/Malabo"),
|
||||
("Africa/Maputo", "Africa/Maputo"),
|
||||
("Africa/Maseru", "Africa/Maseru"),
|
||||
("Africa/Mbabane", "Africa/Mbabane"),
|
||||
("Africa/Mogadishu", "Africa/Mogadishu"),
|
||||
("Africa/Monrovia", "Africa/Monrovia"),
|
||||
("Africa/Nairobi", "Africa/Nairobi"),
|
||||
("Africa/Ndjamena", "Africa/Ndjamena"),
|
||||
("Africa/Niamey", "Africa/Niamey"),
|
||||
("Africa/Nouakchott", "Africa/Nouakchott"),
|
||||
("Africa/Ouagadougou", "Africa/Ouagadougou"),
|
||||
("Africa/Porto-Novo", "Africa/Porto-Novo"),
|
||||
("Africa/Sao_Tome", "Africa/Sao_Tome"),
|
||||
("Africa/Timbuktu", "Africa/Timbuktu"),
|
||||
("Africa/Tripoli", "Africa/Tripoli"),
|
||||
("Africa/Tunis", "Africa/Tunis"),
|
||||
("Africa/Windhoek", "Africa/Windhoek"),
|
||||
("America/Adak", "America/Adak"),
|
||||
("America/Anchorage", "America/Anchorage"),
|
||||
("America/Anguilla", "America/Anguilla"),
|
||||
("America/Antigua", "America/Antigua"),
|
||||
("America/Araguaina", "America/Araguaina"),
|
||||
("America/Argentina/Buenos_Aires", "America/Argentina/Buenos_Aires"),
|
||||
("America/Argentina/Catamarca", "America/Argentina/Catamarca"),
|
||||
("America/Argentina/ComodRivadavia", "America/Argentina/ComodRivadavia"),
|
||||
("America/Argentina/Cordoba", "America/Argentina/Cordoba"),
|
||||
("America/Argentina/Jujuy", "America/Argentina/Jujuy"),
|
||||
("America/Argentina/La_Rioja", "America/Argentina/La_Rioja"),
|
||||
("America/Argentina/Mendoza", "America/Argentina/Mendoza"),
|
||||
("America/Argentina/Rio_Gallegos", "America/Argentina/Rio_Gallegos"),
|
||||
("America/Argentina/Salta", "America/Argentina/Salta"),
|
||||
("America/Argentina/San_Juan", "America/Argentina/San_Juan"),
|
||||
("America/Argentina/San_Luis", "America/Argentina/San_Luis"),
|
||||
("America/Argentina/Tucuman", "America/Argentina/Tucuman"),
|
||||
("America/Argentina/Ushuaia", "America/Argentina/Ushuaia"),
|
||||
("America/Aruba", "America/Aruba"),
|
||||
("America/Asuncion", "America/Asuncion"),
|
||||
("America/Atikokan", "America/Atikokan"),
|
||||
("America/Atka", "America/Atka"),
|
||||
("America/Bahia", "America/Bahia"),
|
||||
("America/Bahia_Banderas", "America/Bahia_Banderas"),
|
||||
("America/Barbados", "America/Barbados"),
|
||||
("America/Belem", "America/Belem"),
|
||||
("America/Belize", "America/Belize"),
|
||||
("America/Blanc-Sablon", "America/Blanc-Sablon"),
|
||||
("America/Boa_Vista", "America/Boa_Vista"),
|
||||
("America/Bogota", "America/Bogota"),
|
||||
("America/Boise", "America/Boise"),
|
||||
("America/Buenos_Aires", "America/Buenos_Aires"),
|
||||
("America/Cambridge_Bay", "America/Cambridge_Bay"),
|
||||
("America/Campo_Grande", "America/Campo_Grande"),
|
||||
("America/Cancun", "America/Cancun"),
|
||||
("America/Caracas", "America/Caracas"),
|
||||
("America/Catamarca", "America/Catamarca"),
|
||||
("America/Cayenne", "America/Cayenne"),
|
||||
("America/Cayman", "America/Cayman"),
|
||||
("America/Chicago", "America/Chicago"),
|
||||
("America/Chihuahua", "America/Chihuahua"),
|
||||
("America/Ciudad_Juarez", "America/Ciudad_Juarez"),
|
||||
("America/Coral_Harbour", "America/Coral_Harbour"),
|
||||
("America/Cordoba", "America/Cordoba"),
|
||||
("America/Costa_Rica", "America/Costa_Rica"),
|
||||
("America/Creston", "America/Creston"),
|
||||
("America/Cuiaba", "America/Cuiaba"),
|
||||
("America/Curacao", "America/Curacao"),
|
||||
("America/Danmarkshavn", "America/Danmarkshavn"),
|
||||
("America/Dawson", "America/Dawson"),
|
||||
("America/Dawson_Creek", "America/Dawson_Creek"),
|
||||
("America/Denver", "America/Denver"),
|
||||
("America/Detroit", "America/Detroit"),
|
||||
("America/Dominica", "America/Dominica"),
|
||||
("America/Edmonton", "America/Edmonton"),
|
||||
("America/Eirunepe", "America/Eirunepe"),
|
||||
("America/El_Salvador", "America/El_Salvador"),
|
||||
("America/Ensenada", "America/Ensenada"),
|
||||
("America/Fort_Nelson", "America/Fort_Nelson"),
|
||||
("America/Fort_Wayne", "America/Fort_Wayne"),
|
||||
("America/Fortaleza", "America/Fortaleza"),
|
||||
("America/Glace_Bay", "America/Glace_Bay"),
|
||||
("America/Godthab", "America/Godthab"),
|
||||
("America/Goose_Bay", "America/Goose_Bay"),
|
||||
("America/Grand_Turk", "America/Grand_Turk"),
|
||||
("America/Grenada", "America/Grenada"),
|
||||
("America/Guadeloupe", "America/Guadeloupe"),
|
||||
("America/Guatemala", "America/Guatemala"),
|
||||
("America/Guayaquil", "America/Guayaquil"),
|
||||
("America/Guyana", "America/Guyana"),
|
||||
("America/Halifax", "America/Halifax"),
|
||||
("America/Havana", "America/Havana"),
|
||||
("America/Hermosillo", "America/Hermosillo"),
|
||||
("America/Indiana/Indianapolis", "America/Indiana/Indianapolis"),
|
||||
("America/Indiana/Knox", "America/Indiana/Knox"),
|
||||
("America/Indiana/Marengo", "America/Indiana/Marengo"),
|
||||
("America/Indiana/Petersburg", "America/Indiana/Petersburg"),
|
||||
("America/Indiana/Tell_City", "America/Indiana/Tell_City"),
|
||||
("America/Indiana/Vevay", "America/Indiana/Vevay"),
|
||||
("America/Indiana/Vincennes", "America/Indiana/Vincennes"),
|
||||
("America/Indiana/Winamac", "America/Indiana/Winamac"),
|
||||
("America/Indianapolis", "America/Indianapolis"),
|
||||
("America/Inuvik", "America/Inuvik"),
|
||||
("America/Iqaluit", "America/Iqaluit"),
|
||||
("America/Jamaica", "America/Jamaica"),
|
||||
("America/Jujuy", "America/Jujuy"),
|
||||
("America/Juneau", "America/Juneau"),
|
||||
("America/Kentucky/Louisville", "America/Kentucky/Louisville"),
|
||||
("America/Kentucky/Monticello", "America/Kentucky/Monticello"),
|
||||
("America/Knox_IN", "America/Knox_IN"),
|
||||
("America/Kralendijk", "America/Kralendijk"),
|
||||
("America/La_Paz", "America/La_Paz"),
|
||||
("America/Lima", "America/Lima"),
|
||||
("America/Los_Angeles", "America/Los_Angeles"),
|
||||
("America/Louisville", "America/Louisville"),
|
||||
("America/Lower_Princes", "America/Lower_Princes"),
|
||||
("America/Maceio", "America/Maceio"),
|
||||
("America/Managua", "America/Managua"),
|
||||
("America/Manaus", "America/Manaus"),
|
||||
("America/Marigot", "America/Marigot"),
|
||||
("America/Martinique", "America/Martinique"),
|
||||
("America/Matamoros", "America/Matamoros"),
|
||||
("America/Mazatlan", "America/Mazatlan"),
|
||||
("America/Mendoza", "America/Mendoza"),
|
||||
("America/Menominee", "America/Menominee"),
|
||||
("America/Merida", "America/Merida"),
|
||||
("America/Metlakatla", "America/Metlakatla"),
|
||||
("America/Mexico_City", "America/Mexico_City"),
|
||||
("America/Miquelon", "America/Miquelon"),
|
||||
("America/Moncton", "America/Moncton"),
|
||||
("America/Monterrey", "America/Monterrey"),
|
||||
("America/Montevideo", "America/Montevideo"),
|
||||
("America/Montreal", "America/Montreal"),
|
||||
("America/Montserrat", "America/Montserrat"),
|
||||
("America/Nassau", "America/Nassau"),
|
||||
("America/New_York", "America/New_York"),
|
||||
("America/Nipigon", "America/Nipigon"),
|
||||
("America/Nome", "America/Nome"),
|
||||
("America/Noronha", "America/Noronha"),
|
||||
("America/North_Dakota/Beulah", "America/North_Dakota/Beulah"),
|
||||
("America/North_Dakota/Center", "America/North_Dakota/Center"),
|
||||
("America/North_Dakota/New_Salem", "America/North_Dakota/New_Salem"),
|
||||
("America/Nuuk", "America/Nuuk"),
|
||||
("America/Ojinaga", "America/Ojinaga"),
|
||||
("America/Panama", "America/Panama"),
|
||||
("America/Pangnirtung", "America/Pangnirtung"),
|
||||
("America/Paramaribo", "America/Paramaribo"),
|
||||
("America/Phoenix", "America/Phoenix"),
|
||||
("America/Port-au-Prince", "America/Port-au-Prince"),
|
||||
("America/Port_of_Spain", "America/Port_of_Spain"),
|
||||
("America/Porto_Acre", "America/Porto_Acre"),
|
||||
("America/Porto_Velho", "America/Porto_Velho"),
|
||||
("America/Puerto_Rico", "America/Puerto_Rico"),
|
||||
("America/Punta_Arenas", "America/Punta_Arenas"),
|
||||
("America/Rainy_River", "America/Rainy_River"),
|
||||
("America/Rankin_Inlet", "America/Rankin_Inlet"),
|
||||
("America/Recife", "America/Recife"),
|
||||
("America/Regina", "America/Regina"),
|
||||
("America/Resolute", "America/Resolute"),
|
||||
("America/Rio_Branco", "America/Rio_Branco"),
|
||||
("America/Rosario", "America/Rosario"),
|
||||
("America/Santa_Isabel", "America/Santa_Isabel"),
|
||||
("America/Santarem", "America/Santarem"),
|
||||
("America/Santiago", "America/Santiago"),
|
||||
("America/Santo_Domingo", "America/Santo_Domingo"),
|
||||
("America/Sao_Paulo", "America/Sao_Paulo"),
|
||||
("America/Scoresbysund", "America/Scoresbysund"),
|
||||
("America/Shiprock", "America/Shiprock"),
|
||||
("America/Sitka", "America/Sitka"),
|
||||
("America/St_Barthelemy", "America/St_Barthelemy"),
|
||||
("America/St_Johns", "America/St_Johns"),
|
||||
("America/St_Kitts", "America/St_Kitts"),
|
||||
("America/St_Lucia", "America/St_Lucia"),
|
||||
("America/St_Thomas", "America/St_Thomas"),
|
||||
("America/St_Vincent", "America/St_Vincent"),
|
||||
("America/Swift_Current", "America/Swift_Current"),
|
||||
("America/Tegucigalpa", "America/Tegucigalpa"),
|
||||
("America/Thule", "America/Thule"),
|
||||
("America/Thunder_Bay", "America/Thunder_Bay"),
|
||||
("America/Tijuana", "America/Tijuana"),
|
||||
("America/Toronto", "America/Toronto"),
|
||||
("America/Tortola", "America/Tortola"),
|
||||
("America/Vancouver", "America/Vancouver"),
|
||||
("America/Virgin", "America/Virgin"),
|
||||
("America/Whitehorse", "America/Whitehorse"),
|
||||
("America/Winnipeg", "America/Winnipeg"),
|
||||
("America/Yakutat", "America/Yakutat"),
|
||||
("America/Yellowknife", "America/Yellowknife"),
|
||||
("Antarctica/Casey", "Antarctica/Casey"),
|
||||
("Antarctica/Davis", "Antarctica/Davis"),
|
||||
("Antarctica/DumontDUrville", "Antarctica/DumontDUrville"),
|
||||
("Antarctica/Macquarie", "Antarctica/Macquarie"),
|
||||
("Antarctica/Mawson", "Antarctica/Mawson"),
|
||||
("Antarctica/McMurdo", "Antarctica/McMurdo"),
|
||||
("Antarctica/Palmer", "Antarctica/Palmer"),
|
||||
("Antarctica/Rothera", "Antarctica/Rothera"),
|
||||
("Antarctica/South_Pole", "Antarctica/South_Pole"),
|
||||
("Antarctica/Syowa", "Antarctica/Syowa"),
|
||||
("Antarctica/Troll", "Antarctica/Troll"),
|
||||
("Antarctica/Vostok", "Antarctica/Vostok"),
|
||||
("Arctic/Longyearbyen", "Arctic/Longyearbyen"),
|
||||
("Asia/Aden", "Asia/Aden"),
|
||||
("Asia/Almaty", "Asia/Almaty"),
|
||||
("Asia/Amman", "Asia/Amman"),
|
||||
("Asia/Anadyr", "Asia/Anadyr"),
|
||||
("Asia/Aqtau", "Asia/Aqtau"),
|
||||
("Asia/Aqtobe", "Asia/Aqtobe"),
|
||||
("Asia/Ashgabat", "Asia/Ashgabat"),
|
||||
("Asia/Ashkhabad", "Asia/Ashkhabad"),
|
||||
("Asia/Atyrau", "Asia/Atyrau"),
|
||||
("Asia/Baghdad", "Asia/Baghdad"),
|
||||
("Asia/Bahrain", "Asia/Bahrain"),
|
||||
("Asia/Baku", "Asia/Baku"),
|
||||
("Asia/Bangkok", "Asia/Bangkok"),
|
||||
("Asia/Barnaul", "Asia/Barnaul"),
|
||||
("Asia/Beirut", "Asia/Beirut"),
|
||||
("Asia/Bishkek", "Asia/Bishkek"),
|
||||
("Asia/Brunei", "Asia/Brunei"),
|
||||
("Asia/Calcutta", "Asia/Calcutta"),
|
||||
("Asia/Chita", "Asia/Chita"),
|
||||
("Asia/Choibalsan", "Asia/Choibalsan"),
|
||||
("Asia/Chongqing", "Asia/Chongqing"),
|
||||
("Asia/Chungking", "Asia/Chungking"),
|
||||
("Asia/Colombo", "Asia/Colombo"),
|
||||
("Asia/Dacca", "Asia/Dacca"),
|
||||
("Asia/Damascus", "Asia/Damascus"),
|
||||
("Asia/Dhaka", "Asia/Dhaka"),
|
||||
("Asia/Dili", "Asia/Dili"),
|
||||
("Asia/Dubai", "Asia/Dubai"),
|
||||
("Asia/Dushanbe", "Asia/Dushanbe"),
|
||||
("Asia/Famagusta", "Asia/Famagusta"),
|
||||
("Asia/Gaza", "Asia/Gaza"),
|
||||
("Asia/Harbin", "Asia/Harbin"),
|
||||
("Asia/Hebron", "Asia/Hebron"),
|
||||
("Asia/Ho_Chi_Minh", "Asia/Ho_Chi_Minh"),
|
||||
("Asia/Hong_Kong", "Asia/Hong_Kong"),
|
||||
("Asia/Hovd", "Asia/Hovd"),
|
||||
("Asia/Irkutsk", "Asia/Irkutsk"),
|
||||
("Asia/Istanbul", "Asia/Istanbul"),
|
||||
("Asia/Jakarta", "Asia/Jakarta"),
|
||||
("Asia/Jayapura", "Asia/Jayapura"),
|
||||
("Asia/Jerusalem", "Asia/Jerusalem"),
|
||||
("Asia/Kabul", "Asia/Kabul"),
|
||||
("Asia/Kamchatka", "Asia/Kamchatka"),
|
||||
("Asia/Karachi", "Asia/Karachi"),
|
||||
("Asia/Kashgar", "Asia/Kashgar"),
|
||||
("Asia/Kathmandu", "Asia/Kathmandu"),
|
||||
("Asia/Katmandu", "Asia/Katmandu"),
|
||||
("Asia/Khandyga", "Asia/Khandyga"),
|
||||
("Asia/Kolkata", "Asia/Kolkata"),
|
||||
("Asia/Krasnoyarsk", "Asia/Krasnoyarsk"),
|
||||
("Asia/Kuala_Lumpur", "Asia/Kuala_Lumpur"),
|
||||
("Asia/Kuching", "Asia/Kuching"),
|
||||
("Asia/Kuwait", "Asia/Kuwait"),
|
||||
("Asia/Macao", "Asia/Macao"),
|
||||
("Asia/Macau", "Asia/Macau"),
|
||||
("Asia/Magadan", "Asia/Magadan"),
|
||||
("Asia/Makassar", "Asia/Makassar"),
|
||||
("Asia/Manila", "Asia/Manila"),
|
||||
("Asia/Muscat", "Asia/Muscat"),
|
||||
("Asia/Nicosia", "Asia/Nicosia"),
|
||||
("Asia/Novokuznetsk", "Asia/Novokuznetsk"),
|
||||
("Asia/Novosibirsk", "Asia/Novosibirsk"),
|
||||
("Asia/Omsk", "Asia/Omsk"),
|
||||
("Asia/Oral", "Asia/Oral"),
|
||||
("Asia/Phnom_Penh", "Asia/Phnom_Penh"),
|
||||
("Asia/Pontianak", "Asia/Pontianak"),
|
||||
("Asia/Pyongyang", "Asia/Pyongyang"),
|
||||
("Asia/Qatar", "Asia/Qatar"),
|
||||
("Asia/Qostanay", "Asia/Qostanay"),
|
||||
("Asia/Qyzylorda", "Asia/Qyzylorda"),
|
||||
("Asia/Rangoon", "Asia/Rangoon"),
|
||||
("Asia/Riyadh", "Asia/Riyadh"),
|
||||
("Asia/Saigon", "Asia/Saigon"),
|
||||
("Asia/Sakhalin", "Asia/Sakhalin"),
|
||||
("Asia/Samarkand", "Asia/Samarkand"),
|
||||
("Asia/Seoul", "Asia/Seoul"),
|
||||
("Asia/Shanghai", "Asia/Shanghai"),
|
||||
("Asia/Singapore", "Asia/Singapore"),
|
||||
("Asia/Srednekolymsk", "Asia/Srednekolymsk"),
|
||||
("Asia/Taipei", "Asia/Taipei"),
|
||||
("Asia/Tashkent", "Asia/Tashkent"),
|
||||
("Asia/Tbilisi", "Asia/Tbilisi"),
|
||||
("Asia/Tehran", "Asia/Tehran"),
|
||||
("Asia/Tel_Aviv", "Asia/Tel_Aviv"),
|
||||
("Asia/Thimbu", "Asia/Thimbu"),
|
||||
("Asia/Thimphu", "Asia/Thimphu"),
|
||||
("Asia/Tokyo", "Asia/Tokyo"),
|
||||
("Asia/Tomsk", "Asia/Tomsk"),
|
||||
("Asia/Ujung_Pandang", "Asia/Ujung_Pandang"),
|
||||
("Asia/Ulaanbaatar", "Asia/Ulaanbaatar"),
|
||||
("Asia/Ulan_Bator", "Asia/Ulan_Bator"),
|
||||
("Asia/Urumqi", "Asia/Urumqi"),
|
||||
("Asia/Ust-Nera", "Asia/Ust-Nera"),
|
||||
("Asia/Vientiane", "Asia/Vientiane"),
|
||||
("Asia/Vladivostok", "Asia/Vladivostok"),
|
||||
("Asia/Yakutsk", "Asia/Yakutsk"),
|
||||
("Asia/Yangon", "Asia/Yangon"),
|
||||
("Asia/Yekaterinburg", "Asia/Yekaterinburg"),
|
||||
("Asia/Yerevan", "Asia/Yerevan"),
|
||||
("Atlantic/Azores", "Atlantic/Azores"),
|
||||
("Atlantic/Bermuda", "Atlantic/Bermuda"),
|
||||
("Atlantic/Canary", "Atlantic/Canary"),
|
||||
("Atlantic/Cape_Verde", "Atlantic/Cape_Verde"),
|
||||
("Atlantic/Faeroe", "Atlantic/Faeroe"),
|
||||
("Atlantic/Faroe", "Atlantic/Faroe"),
|
||||
("Atlantic/Jan_Mayen", "Atlantic/Jan_Mayen"),
|
||||
("Atlantic/Madeira", "Atlantic/Madeira"),
|
||||
("Atlantic/Reykjavik", "Atlantic/Reykjavik"),
|
||||
("Atlantic/South_Georgia", "Atlantic/South_Georgia"),
|
||||
("Atlantic/St_Helena", "Atlantic/St_Helena"),
|
||||
("Atlantic/Stanley", "Atlantic/Stanley"),
|
||||
("Australia/ACT", "Australia/ACT"),
|
||||
("Australia/Adelaide", "Australia/Adelaide"),
|
||||
("Australia/Brisbane", "Australia/Brisbane"),
|
||||
("Australia/Broken_Hill", "Australia/Broken_Hill"),
|
||||
("Australia/Canberra", "Australia/Canberra"),
|
||||
("Australia/Currie", "Australia/Currie"),
|
||||
("Australia/Darwin", "Australia/Darwin"),
|
||||
("Australia/Eucla", "Australia/Eucla"),
|
||||
("Australia/Hobart", "Australia/Hobart"),
|
||||
("Australia/LHI", "Australia/LHI"),
|
||||
("Australia/Lindeman", "Australia/Lindeman"),
|
||||
("Australia/Lord_Howe", "Australia/Lord_Howe"),
|
||||
("Australia/Melbourne", "Australia/Melbourne"),
|
||||
("Australia/NSW", "Australia/NSW"),
|
||||
("Australia/North", "Australia/North"),
|
||||
("Australia/Perth", "Australia/Perth"),
|
||||
("Australia/Queensland", "Australia/Queensland"),
|
||||
("Australia/South", "Australia/South"),
|
||||
("Australia/Sydney", "Australia/Sydney"),
|
||||
("Australia/Tasmania", "Australia/Tasmania"),
|
||||
("Australia/Victoria", "Australia/Victoria"),
|
||||
("Australia/West", "Australia/West"),
|
||||
("Australia/Yancowinna", "Australia/Yancowinna"),
|
||||
("Brazil/Acre", "Brazil/Acre"),
|
||||
("Brazil/DeNoronha", "Brazil/DeNoronha"),
|
||||
("Brazil/East", "Brazil/East"),
|
||||
("Brazil/West", "Brazil/West"),
|
||||
("CET", "CET"),
|
||||
("CST6CDT", "CST6CDT"),
|
||||
("Canada/Atlantic", "Canada/Atlantic"),
|
||||
("Canada/Central", "Canada/Central"),
|
||||
("Canada/Eastern", "Canada/Eastern"),
|
||||
("Canada/Mountain", "Canada/Mountain"),
|
||||
("Canada/Newfoundland", "Canada/Newfoundland"),
|
||||
("Canada/Pacific", "Canada/Pacific"),
|
||||
("Canada/Saskatchewan", "Canada/Saskatchewan"),
|
||||
("Canada/Yukon", "Canada/Yukon"),
|
||||
("Chile/Continental", "Chile/Continental"),
|
||||
("Chile/EasterIsland", "Chile/EasterIsland"),
|
||||
("Cuba", "Cuba"),
|
||||
("EET", "EET"),
|
||||
("EST", "EST"),
|
||||
("EST5EDT", "EST5EDT"),
|
||||
("Egypt", "Egypt"),
|
||||
("Eire", "Eire"),
|
||||
("Etc/GMT", "Etc/GMT"),
|
||||
("Etc/GMT+0", "Etc/GMT+0"),
|
||||
("Etc/GMT+1", "Etc/GMT+1"),
|
||||
("Etc/GMT+10", "Etc/GMT+10"),
|
||||
("Etc/GMT+11", "Etc/GMT+11"),
|
||||
("Etc/GMT+12", "Etc/GMT+12"),
|
||||
("Etc/GMT+2", "Etc/GMT+2"),
|
||||
("Etc/GMT+3", "Etc/GMT+3"),
|
||||
("Etc/GMT+4", "Etc/GMT+4"),
|
||||
("Etc/GMT+5", "Etc/GMT+5"),
|
||||
("Etc/GMT+6", "Etc/GMT+6"),
|
||||
("Etc/GMT+7", "Etc/GMT+7"),
|
||||
("Etc/GMT+8", "Etc/GMT+8"),
|
||||
("Etc/GMT+9", "Etc/GMT+9"),
|
||||
("Etc/GMT-0", "Etc/GMT-0"),
|
||||
("Etc/GMT-1", "Etc/GMT-1"),
|
||||
("Etc/GMT-10", "Etc/GMT-10"),
|
||||
("Etc/GMT-11", "Etc/GMT-11"),
|
||||
("Etc/GMT-12", "Etc/GMT-12"),
|
||||
("Etc/GMT-13", "Etc/GMT-13"),
|
||||
("Etc/GMT-14", "Etc/GMT-14"),
|
||||
("Etc/GMT-2", "Etc/GMT-2"),
|
||||
("Etc/GMT-3", "Etc/GMT-3"),
|
||||
("Etc/GMT-4", "Etc/GMT-4"),
|
||||
("Etc/GMT-5", "Etc/GMT-5"),
|
||||
("Etc/GMT-6", "Etc/GMT-6"),
|
||||
("Etc/GMT-7", "Etc/GMT-7"),
|
||||
("Etc/GMT-8", "Etc/GMT-8"),
|
||||
("Etc/GMT-9", "Etc/GMT-9"),
|
||||
("Etc/GMT0", "Etc/GMT0"),
|
||||
("Etc/Greenwich", "Etc/Greenwich"),
|
||||
("Etc/UCT", "Etc/UCT"),
|
||||
("Etc/UTC", "Etc/UTC"),
|
||||
("Etc/Universal", "Etc/Universal"),
|
||||
("Etc/Zulu", "Etc/Zulu"),
|
||||
("Europe/Amsterdam", "Europe/Amsterdam"),
|
||||
("Europe/Andorra", "Europe/Andorra"),
|
||||
("Europe/Astrakhan", "Europe/Astrakhan"),
|
||||
("Europe/Athens", "Europe/Athens"),
|
||||
("Europe/Belfast", "Europe/Belfast"),
|
||||
("Europe/Belgrade", "Europe/Belgrade"),
|
||||
("Europe/Berlin", "Europe/Berlin"),
|
||||
("Europe/Bratislava", "Europe/Bratislava"),
|
||||
("Europe/Brussels", "Europe/Brussels"),
|
||||
("Europe/Bucharest", "Europe/Bucharest"),
|
||||
("Europe/Budapest", "Europe/Budapest"),
|
||||
("Europe/Busingen", "Europe/Busingen"),
|
||||
("Europe/Chisinau", "Europe/Chisinau"),
|
||||
("Europe/Copenhagen", "Europe/Copenhagen"),
|
||||
("Europe/Dublin", "Europe/Dublin"),
|
||||
("Europe/Gibraltar", "Europe/Gibraltar"),
|
||||
("Europe/Guernsey", "Europe/Guernsey"),
|
||||
("Europe/Helsinki", "Europe/Helsinki"),
|
||||
("Europe/Isle_of_Man", "Europe/Isle_of_Man"),
|
||||
("Europe/Istanbul", "Europe/Istanbul"),
|
||||
("Europe/Jersey", "Europe/Jersey"),
|
||||
("Europe/Kaliningrad", "Europe/Kaliningrad"),
|
||||
("Europe/Kiev", "Europe/Kiev"),
|
||||
("Europe/Kirov", "Europe/Kirov"),
|
||||
("Europe/Kyiv", "Europe/Kyiv"),
|
||||
("Europe/Lisbon", "Europe/Lisbon"),
|
||||
("Europe/Ljubljana", "Europe/Ljubljana"),
|
||||
("Europe/London", "Europe/London"),
|
||||
("Europe/Luxembourg", "Europe/Luxembourg"),
|
||||
("Europe/Madrid", "Europe/Madrid"),
|
||||
("Europe/Malta", "Europe/Malta"),
|
||||
("Europe/Mariehamn", "Europe/Mariehamn"),
|
||||
("Europe/Minsk", "Europe/Minsk"),
|
||||
("Europe/Monaco", "Europe/Monaco"),
|
||||
("Europe/Moscow", "Europe/Moscow"),
|
||||
("Europe/Nicosia", "Europe/Nicosia"),
|
||||
("Europe/Oslo", "Europe/Oslo"),
|
||||
("Europe/Paris", "Europe/Paris"),
|
||||
("Europe/Podgorica", "Europe/Podgorica"),
|
||||
("Europe/Prague", "Europe/Prague"),
|
||||
("Europe/Riga", "Europe/Riga"),
|
||||
("Europe/Rome", "Europe/Rome"),
|
||||
("Europe/Samara", "Europe/Samara"),
|
||||
("Europe/San_Marino", "Europe/San_Marino"),
|
||||
("Europe/Sarajevo", "Europe/Sarajevo"),
|
||||
("Europe/Saratov", "Europe/Saratov"),
|
||||
("Europe/Simferopol", "Europe/Simferopol"),
|
||||
("Europe/Skopje", "Europe/Skopje"),
|
||||
("Europe/Sofia", "Europe/Sofia"),
|
||||
("Europe/Stockholm", "Europe/Stockholm"),
|
||||
("Europe/Tallinn", "Europe/Tallinn"),
|
||||
("Europe/Tirane", "Europe/Tirane"),
|
||||
("Europe/Tiraspol", "Europe/Tiraspol"),
|
||||
("Europe/Ulyanovsk", "Europe/Ulyanovsk"),
|
||||
("Europe/Uzhgorod", "Europe/Uzhgorod"),
|
||||
("Europe/Vaduz", "Europe/Vaduz"),
|
||||
("Europe/Vatican", "Europe/Vatican"),
|
||||
("Europe/Vienna", "Europe/Vienna"),
|
||||
("Europe/Vilnius", "Europe/Vilnius"),
|
||||
("Europe/Volgograd", "Europe/Volgograd"),
|
||||
("Europe/Warsaw", "Europe/Warsaw"),
|
||||
("Europe/Zagreb", "Europe/Zagreb"),
|
||||
("Europe/Zaporozhye", "Europe/Zaporozhye"),
|
||||
("Europe/Zurich", "Europe/Zurich"),
|
||||
("Factory", "Factory"),
|
||||
("GB", "GB"),
|
||||
("GB-Eire", "GB-Eire"),
|
||||
("GMT", "GMT"),
|
||||
("GMT+0", "GMT+0"),
|
||||
("GMT-0", "GMT-0"),
|
||||
("GMT0", "GMT0"),
|
||||
("Greenwich", "Greenwich"),
|
||||
("HST", "HST"),
|
||||
("Hongkong", "Hongkong"),
|
||||
("Iceland", "Iceland"),
|
||||
("Indian/Antananarivo", "Indian/Antananarivo"),
|
||||
("Indian/Chagos", "Indian/Chagos"),
|
||||
("Indian/Christmas", "Indian/Christmas"),
|
||||
("Indian/Cocos", "Indian/Cocos"),
|
||||
("Indian/Comoro", "Indian/Comoro"),
|
||||
("Indian/Kerguelen", "Indian/Kerguelen"),
|
||||
("Indian/Mahe", "Indian/Mahe"),
|
||||
("Indian/Maldives", "Indian/Maldives"),
|
||||
("Indian/Mauritius", "Indian/Mauritius"),
|
||||
("Indian/Mayotte", "Indian/Mayotte"),
|
||||
("Indian/Reunion", "Indian/Reunion"),
|
||||
("Iran", "Iran"),
|
||||
("Israel", "Israel"),
|
||||
("Jamaica", "Jamaica"),
|
||||
("Japan", "Japan"),
|
||||
("Kwajalein", "Kwajalein"),
|
||||
("Libya", "Libya"),
|
||||
("MET", "MET"),
|
||||
("MST", "MST"),
|
||||
("MST7MDT", "MST7MDT"),
|
||||
("Mexico/BajaNorte", "Mexico/BajaNorte"),
|
||||
("Mexico/BajaSur", "Mexico/BajaSur"),
|
||||
("Mexico/General", "Mexico/General"),
|
||||
("NZ", "NZ"),
|
||||
("NZ-CHAT", "NZ-CHAT"),
|
||||
("Navajo", "Navajo"),
|
||||
("PRC", "PRC"),
|
||||
("PST8PDT", "PST8PDT"),
|
||||
("Pacific/Apia", "Pacific/Apia"),
|
||||
("Pacific/Auckland", "Pacific/Auckland"),
|
||||
("Pacific/Bougainville", "Pacific/Bougainville"),
|
||||
("Pacific/Chatham", "Pacific/Chatham"),
|
||||
("Pacific/Chuuk", "Pacific/Chuuk"),
|
||||
("Pacific/Easter", "Pacific/Easter"),
|
||||
("Pacific/Efate", "Pacific/Efate"),
|
||||
("Pacific/Enderbury", "Pacific/Enderbury"),
|
||||
("Pacific/Fakaofo", "Pacific/Fakaofo"),
|
||||
("Pacific/Fiji", "Pacific/Fiji"),
|
||||
("Pacific/Funafuti", "Pacific/Funafuti"),
|
||||
("Pacific/Galapagos", "Pacific/Galapagos"),
|
||||
("Pacific/Gambier", "Pacific/Gambier"),
|
||||
("Pacific/Guadalcanal", "Pacific/Guadalcanal"),
|
||||
("Pacific/Guam", "Pacific/Guam"),
|
||||
("Pacific/Honolulu", "Pacific/Honolulu"),
|
||||
("Pacific/Johnston", "Pacific/Johnston"),
|
||||
("Pacific/Kanton", "Pacific/Kanton"),
|
||||
("Pacific/Kiritimati", "Pacific/Kiritimati"),
|
||||
("Pacific/Kosrae", "Pacific/Kosrae"),
|
||||
("Pacific/Kwajalein", "Pacific/Kwajalein"),
|
||||
("Pacific/Majuro", "Pacific/Majuro"),
|
||||
("Pacific/Marquesas", "Pacific/Marquesas"),
|
||||
("Pacific/Midway", "Pacific/Midway"),
|
||||
("Pacific/Nauru", "Pacific/Nauru"),
|
||||
("Pacific/Niue", "Pacific/Niue"),
|
||||
("Pacific/Norfolk", "Pacific/Norfolk"),
|
||||
("Pacific/Noumea", "Pacific/Noumea"),
|
||||
("Pacific/Pago_Pago", "Pacific/Pago_Pago"),
|
||||
("Pacific/Palau", "Pacific/Palau"),
|
||||
("Pacific/Pitcairn", "Pacific/Pitcairn"),
|
||||
("Pacific/Pohnpei", "Pacific/Pohnpei"),
|
||||
("Pacific/Ponape", "Pacific/Ponape"),
|
||||
("Pacific/Port_Moresby", "Pacific/Port_Moresby"),
|
||||
("Pacific/Rarotonga", "Pacific/Rarotonga"),
|
||||
("Pacific/Saipan", "Pacific/Saipan"),
|
||||
("Pacific/Samoa", "Pacific/Samoa"),
|
||||
("Pacific/Tahiti", "Pacific/Tahiti"),
|
||||
("Pacific/Tarawa", "Pacific/Tarawa"),
|
||||
("Pacific/Tongatapu", "Pacific/Tongatapu"),
|
||||
("Pacific/Truk", "Pacific/Truk"),
|
||||
("Pacific/Wake", "Pacific/Wake"),
|
||||
("Pacific/Wallis", "Pacific/Wallis"),
|
||||
("Pacific/Yap", "Pacific/Yap"),
|
||||
("Poland", "Poland"),
|
||||
("Portugal", "Portugal"),
|
||||
("ROC", "ROC"),
|
||||
("ROK", "ROK"),
|
||||
("Singapore", "Singapore"),
|
||||
("Turkey", "Turkey"),
|
||||
("UCT", "UCT"),
|
||||
("US/Alaska", "US/Alaska"),
|
||||
("US/Aleutian", "US/Aleutian"),
|
||||
("US/Arizona", "US/Arizona"),
|
||||
("US/Central", "US/Central"),
|
||||
("US/East-Indiana", "US/East-Indiana"),
|
||||
("US/Eastern", "US/Eastern"),
|
||||
("US/Hawaii", "US/Hawaii"),
|
||||
("US/Indiana-Starke", "US/Indiana-Starke"),
|
||||
("US/Michigan", "US/Michigan"),
|
||||
("US/Mountain", "US/Mountain"),
|
||||
("US/Pacific", "US/Pacific"),
|
||||
("US/Samoa", "US/Samoa"),
|
||||
("UTC", "UTC"),
|
||||
("Universal", "Universal"),
|
||||
("W-SU", "W-SU"),
|
||||
("WET", "WET"),
|
||||
("Zulu", "Zulu"),
|
||||
("localtime", "localtime"),
|
||||
],
|
||||
default=aircox.models.schedule.current_timezone_key,
|
||||
help_text="timezone used for the date",
|
||||
max_length=100,
|
||||
verbose_name="timezone",
|
||||
),
|
||||
),
|
||||
]
|
18
aircox/migrations/0022_set_group_ownership.py
Normal file
18
aircox/migrations/0022_set_group_ownership.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
from django.db import migrations
|
||||
|
||||
from aircox.models import Program
|
||||
|
||||
|
||||
def set_group_ownership(*args):
|
||||
for program in Program.objects.all():
|
||||
program.set_group_ownership()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("aircox", "0021_alter_schedule_timezone"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(set_group_ownership),
|
||||
]
|
|
@ -1,5 +1,6 @@
|
|||
import datetime
|
||||
import logging
|
||||
import operator
|
||||
from collections import deque
|
||||
|
||||
from django.db import models
|
||||
|
@ -163,7 +164,7 @@ class Log(Renderable, models.Model):
|
|||
object_list += [cls(obj) for obj in items]
|
||||
|
||||
@classmethod
|
||||
def merge_diffusions(cls, logs, diffs, count=None, diff_count=None, log_slice=None):
|
||||
def merge_diffusions(cls, logs, diffs, count=None, diff_count=None, group_logs=False):
|
||||
"""Merge logs and diffusions together.
|
||||
|
||||
`logs` can either be a queryset or a list ordered by `Log.date`.
|
||||
|
@ -178,7 +179,7 @@ class Log(Renderable, models.Model):
|
|||
|
||||
while True:
|
||||
if not len(diffs):
|
||||
object_list += logs
|
||||
cls._append_logs(object_list, logs, len(logs), group=group_logs)
|
||||
break
|
||||
|
||||
if not len(logs):
|
||||
|
@ -188,16 +189,8 @@ class Log(Renderable, models.Model):
|
|||
diff = diffs.popleft()
|
||||
|
||||
# - takes all logs after diff start
|
||||
index = next(
|
||||
(i for i, v in enumerate(logs) if v.date <= diff.end),
|
||||
len(logs),
|
||||
)
|
||||
if index is not None and index > 0:
|
||||
if log_slice:
|
||||
object_list += logs[: min(log_slice, index)]
|
||||
else:
|
||||
object_list += logs[:index]
|
||||
logs = logs[index:]
|
||||
index = cls._next_index(logs, diff.end, len(logs), pred=operator.le)
|
||||
cls._append_logs(object_list, logs, index, group=group_logs)
|
||||
|
||||
if len(logs):
|
||||
# FIXME
|
||||
|
@ -206,10 +199,7 @@ class Log(Renderable, models.Model):
|
|||
# object_list.append(logs[0])
|
||||
|
||||
# - skips logs while diff is running
|
||||
index = next(
|
||||
(i for i, v in enumerate(logs) if v.date < diff.start),
|
||||
len(logs),
|
||||
)
|
||||
index = cls._next_index(logs, diff.start, len(logs))
|
||||
if index is not None and index > 0:
|
||||
logs = logs[index:]
|
||||
|
||||
|
@ -218,6 +208,40 @@ class Log(Renderable, models.Model):
|
|||
|
||||
return object_list if count is None else object_list[:count]
|
||||
|
||||
@classmethod
|
||||
def _next_index(cls, items, date, default, pred=operator.lt):
|
||||
iter = (i for i, v in enumerate(items) if pred(v.date, date))
|
||||
return next(iter, default)
|
||||
|
||||
@classmethod
|
||||
def _append_logs(cls, object_list, logs, count, group=False):
|
||||
logs = logs[:count]
|
||||
if not logs:
|
||||
return object_list
|
||||
|
||||
if group:
|
||||
grouped = cls._group_logs_by_time(logs)
|
||||
object_list.extend(grouped)
|
||||
else:
|
||||
object_list += logs
|
||||
return object_list
|
||||
|
||||
@classmethod
|
||||
def _group_logs_by_time(cls, logs):
|
||||
last_time = -1
|
||||
cum = []
|
||||
for log in logs:
|
||||
hour = log.date.time().hour
|
||||
if hour != last_time:
|
||||
if cum:
|
||||
yield cum
|
||||
cum = []
|
||||
last_time = hour
|
||||
# reverse from lowest to highest date
|
||||
cum.insert(0, log)
|
||||
if cum:
|
||||
yield cum
|
||||
|
||||
def print(self):
|
||||
r = []
|
||||
if self.diffusion:
|
||||
|
|
|
@ -181,7 +181,7 @@ class BasePage(Renderable, models.Model):
|
|||
|
||||
headline = headline.split("\n")[:3]
|
||||
headline[-1] += suffix
|
||||
return mark_safe("<br>".join(headline))
|
||||
return mark_safe(" ".join(headline))
|
||||
|
||||
@classmethod
|
||||
def get_init_kwargs_from(cls, page, **kwargs):
|
||||
|
|
|
@ -3,6 +3,8 @@ import os
|
|||
import shutil
|
||||
|
||||
from django.conf import settings as conf
|
||||
from django.contrib.auth.models import Group, Permission
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import models
|
||||
from django.db.models import F
|
||||
from django.db.models.functions import Concat, Substr
|
||||
|
@ -58,6 +60,7 @@ class Program(Page):
|
|||
default=True,
|
||||
help_text=_("update later diffusions according to schedule changes"),
|
||||
)
|
||||
editors = models.ForeignKey(Group, models.CASCADE, blank=True, null=True, verbose_name=_("editors"))
|
||||
|
||||
objects = ProgramQuerySet.as_manager()
|
||||
detail_url_name = "program-detail"
|
||||
|
@ -81,6 +84,14 @@ class Program(Page):
|
|||
def excerpts_path(self):
|
||||
return os.path.join(self.path, settings.SOUND_ARCHIVES_SUBDIR)
|
||||
|
||||
@property
|
||||
def editors_group_name(self):
|
||||
return f"{self.title} editors"
|
||||
|
||||
@property
|
||||
def change_permission_codename(self):
|
||||
return f"change_program_{self.slug}"
|
||||
|
||||
def __init__(self, *kargs, **kwargs):
|
||||
super().__init__(*kargs, **kwargs)
|
||||
if self.slug:
|
||||
|
@ -110,6 +121,18 @@ class Program(Page):
|
|||
os.makedirs(path, exist_ok=True)
|
||||
return os.path.exists(path)
|
||||
|
||||
def set_group_ownership(self):
|
||||
editors, created = Group.objects.get_or_create(name=self.editors_group_name)
|
||||
if created:
|
||||
self.editors = editors
|
||||
permission, _ = Permission.objects.get_or_create(
|
||||
name=f"change program {self.title}",
|
||||
codename=self.change_permission_codename,
|
||||
content_type=ContentType.objects.get_for_model(self),
|
||||
)
|
||||
if permission not in editors.permissions.all():
|
||||
editors.permissions.add(permission)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Program")
|
||||
verbose_name_plural = _("Programs")
|
||||
|
@ -135,6 +158,9 @@ class Program(Page):
|
|||
shutil.move(abspath, self.abspath)
|
||||
Sound.objects.filter(path__startswith=path_).update(file=Concat("file", Substr(F("file"), len(path_))))
|
||||
|
||||
self.set_group_ownership()
|
||||
super().save(*kargs, **kwargs)
|
||||
|
||||
|
||||
class ProgramChildQuerySet(PageQuerySet):
|
||||
def station(self, station=None, id=None):
|
||||
|
|
|
@ -41,8 +41,7 @@ def user_default_groups(sender, instance, created, *args, **kwargs):
|
|||
|
||||
@receiver(signals.post_save, sender=Page)
|
||||
def page_post_save(sender, instance, created, *args, **kwargs):
|
||||
return
|
||||
if not created and instance.cover:
|
||||
if not created and instance.cover and "raw" not in kwargs:
|
||||
Page.objects.filter(parent=instance, cover__isnull=True).update(cover=instance.cover)
|
||||
|
||||
|
||||
|
@ -60,8 +59,7 @@ def program_post_save(sender, instance, created, *args, **kwargs):
|
|||
|
||||
@receiver(signals.pre_save, sender=Schedule)
|
||||
def schedule_pre_save(sender, instance, *args, **kwargs):
|
||||
return
|
||||
if getattr(instance, "pk") is not None:
|
||||
if getattr(instance, "pk") is not None and "raw" not in kwargs:
|
||||
instance._initial = Schedule.objects.get(pk=instance.pk)
|
||||
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ class Station(models.Model):
|
|||
max_length=2048,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Audio streams urls used by station's player. One url " "a line."),
|
||||
help_text=_("Audio streams urls used by station's player. One url a line."),
|
||||
)
|
||||
default_cover = FilerImageField(
|
||||
on_delete=models.SET_NULL,
|
||||
|
@ -76,6 +76,11 @@ class Station(models.Model):
|
|||
blank=True,
|
||||
related_name="+",
|
||||
)
|
||||
music_stream_title = models.CharField(
|
||||
_("Music stream's title"),
|
||||
max_length=64,
|
||||
default=_("Music stream"),
|
||||
)
|
||||
|
||||
objects = StationQuerySet.as_manager()
|
||||
|
||||
|
|
|
@ -8,57 +8,76 @@
|
|||
--subtitle-1-sz: 1.6rem;
|
||||
--subtitle-2-sz: 1.4rem;
|
||||
--subtitle-3-sz: 1.2rem;
|
||||
--heading-title-bg-color: rgba(255, 255, 0, 1);
|
||||
--heading-bg-color: var(--highlight-color);
|
||||
--heading-bg-highlight-color: var(--highlight-color-2);
|
||||
--heading-font-family: default;
|
||||
--preview-title-sz: 1.4rem;
|
||||
--preview-subtitle-sz: 1rem;
|
||||
--heading-bg: var(--main-color);
|
||||
--heading-fg: var(--text-color);
|
||||
--heading-hg-fg: var(--text-color);
|
||||
--heading-hg-bg: var(--secondary-color);
|
||||
--heading-link-hv-fg: var(--link-fg);
|
||||
--cover-w: 14rem;
|
||||
--cover-h: 14rem;
|
||||
--cover-small-w: 10rem;
|
||||
--cover-small-h: 10rem;
|
||||
--cover-tiny-w: 10rem;
|
||||
--cover-tiny-h: 10rem;
|
||||
--card-w: var(--cover-w);
|
||||
--preview-bg: var(--body-bg);
|
||||
--preview-title-sz: var(--title-3-sz);
|
||||
--preview-subtitle-sz: var(--title-3-sz);
|
||||
--preview-cover-size: 14rem;
|
||||
--preview-cover-small-size: 10rem;
|
||||
--preview-cover-tiny-size: 4rem;
|
||||
--preview-wide-content-sz: 1.6rem;
|
||||
--header-height: var(--preview-cover-size);
|
||||
--preview-heading-bg-color: var(--hg-color);
|
||||
--header-height: var(--cover-h);
|
||||
--a-carousel-p: 1.4rem;
|
||||
--a-carousel-ml: calc(1.2rem - 0.5rem);
|
||||
--a-carousel-gap: 1.2rem;
|
||||
--a-carousel-nav-x: -0.6em;
|
||||
--a-carousel-bg: none;
|
||||
--a-progress-bg: transparent;
|
||||
--a-progress-bar-bg: var(--highlight-color-2);
|
||||
--a-progress-bar-color: var(--highlight-color);
|
||||
--a-progress-bar-bg: var(--secondary-color);
|
||||
--a-progress-bar-color: var(--text-color);
|
||||
--a-progress-bar-pd: 0.4rem;
|
||||
--a-playlist-header-bg: var(--highlight-color-2-alpha);
|
||||
--a-playlist-header-fg: var(--highlight-color);
|
||||
--a-playlist-header-bg: var(--secondary-color);
|
||||
--a-playlist-header-fg: var(--text-color);
|
||||
--a-playlist-title-sz: 1rem;
|
||||
--a-playlist-title-pd: 0.6rem;
|
||||
--a-playlist-item-border: 1px var(--highlight-color-2) solid;
|
||||
--a-sound-bg: var(--highlight-color-alpha);
|
||||
--a-sound-hv-bg: var(--highlight-color);
|
||||
--a-sound-playing-fg: var(--highlight-color-alpha);
|
||||
--a-sound-hv-fg: var(--highlight-color-2);
|
||||
--a-playlist-item-border: 1px var(--secondary-color) solid;
|
||||
--a-sound-bg: var(--main-color);
|
||||
--a-sound-hv-bg: var(--main-color);
|
||||
--a-sound-hv-fg: var(--secondary-color);
|
||||
--a-sound-playing-fg: var(--secondary-color-dark);
|
||||
--a-sound-text-sz: 1rem;
|
||||
--a-player-url-fg: var(--highlight-color-2);
|
||||
--a-player-panel-bg: var(--highlight-color);
|
||||
--a-player-url-fg: var(--text-color);
|
||||
--a-player-panel-bg: var(--main-color);
|
||||
--a-player-bar-height: var(--nav-primary-height);
|
||||
--a-player-bar-bg: var(--highlight-color);
|
||||
--a-player-bar-bg: var(--main-color);
|
||||
--a-player-bar-title-alone-sz: 1.4rem;
|
||||
--button-fg: var(--highlight-color-2);
|
||||
--button-bg: var(--highlight-color);
|
||||
--button-sec-bg: var(--highlight-color-alpha);
|
||||
--button-hg-fg: var(--text-color);
|
||||
--button-hg-bg: var(--highlight-color);
|
||||
--button-active-fg: var(--highlight-color);
|
||||
--button-active-bg: var(--highlight-color-2);
|
||||
--a-player-bar-button-fg: var(--button-fg);
|
||||
--a-player-bar-button-fg: var(--button-bg);
|
||||
--a-player-bar-button-hv-fg: var(--button-hv-fg);
|
||||
--a-player-bar-button-hv-bg: var(--button-hv-bg);
|
||||
--button-fg: var(--text-color);
|
||||
--button-bg: var(--main-color);
|
||||
--button-sec-bg: var(--main-color-light);
|
||||
--button-hv-fg: var(--text-color);
|
||||
--button-hv-bg: var(--secondary-color-light);
|
||||
--button-active-fg: var(--text-color);
|
||||
--button-active-bg: var(--secondary-color);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1380px) {
|
||||
:root {
|
||||
--cover-w: 10rem;
|
||||
--cover-h: 10rem;
|
||||
--cover-small-w: 6rem;
|
||||
--cover-small-h: 6rem;
|
||||
--cover-tiny-w: 4rem;
|
||||
--cover-tiny-h: 4rem;
|
||||
--section-content-sz: 1rem;
|
||||
--preview-title-sz: 1rem;
|
||||
--preview-subtitle-sz: 0.8rem;
|
||||
--preview-cover-size: 10rem;
|
||||
--preview-cover-small-size: 6rem;
|
||||
--preview-cover-tiny-size: 4rem;
|
||||
--preview-wide-content-sz: 1rem;
|
||||
}
|
||||
}
|
||||
|
@ -72,6 +91,9 @@
|
|||
font-size: var(--title-3-sz);
|
||||
}
|
||||
|
||||
.subtitle, .header.preview .subtitle {
|
||||
color: var(--text-color-light);
|
||||
}
|
||||
.subtitle.is-1, .header.preview .subtitle.is-1 {
|
||||
font-size: var(--subtitle-1-sz);
|
||||
}
|
||||
|
@ -82,26 +104,30 @@
|
|||
font-size: var(--subtitle-3-sz);
|
||||
}
|
||||
|
||||
.title + .subtitle {
|
||||
padding-top: 0em !important;
|
||||
}
|
||||
|
||||
.headings a, a.heading, a.subtitle {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.heading {
|
||||
display: inline-block;
|
||||
}
|
||||
.heading:not(:empty) {
|
||||
background-color: var(--heading-bg-color);
|
||||
padding: 0.4rem;
|
||||
margin-top: 0em !important;
|
||||
vertical-align: top;
|
||||
}
|
||||
.heading:not(:empty).highlight, .heading:not(:empty).active, .preview.active .heading:not(:empty) {
|
||||
background-color: var(--heading-bg-highlight-color);
|
||||
color: var(--highlight-color);
|
||||
}
|
||||
.heading.title {
|
||||
background-color: var(--heading-title-bg-color);
|
||||
color: var(--heading-hg-fg);
|
||||
}
|
||||
|
||||
.preview {
|
||||
position: relative;
|
||||
background-size: cover;
|
||||
background-color: var(--preview-bg) !important;
|
||||
}
|
||||
.preview.preview-item {
|
||||
width: 100%;
|
||||
|
@ -135,21 +161,30 @@
|
|||
.preview .headings a {
|
||||
color: var(--text-color);
|
||||
}
|
||||
.preview .headings a:hover {
|
||||
color: var(--heading-link-hv-fg) !important;
|
||||
}
|
||||
.preview.tiny .content {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
.preview .content {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.preview-cover {
|
||||
background: var(--preview-bg);
|
||||
background-size: cover;
|
||||
background-color: transparent !important;
|
||||
height: var(--preview-cover-size);
|
||||
width: var(--preview-cover-size);
|
||||
min-width: var(--preview-cover-size);
|
||||
background-repeat: no-repeat;
|
||||
height: var(--cover-h);
|
||||
max-width: calc(var(--cover-w) * 1.5);
|
||||
min-width: var(--cover-w);
|
||||
overflow: hidden;
|
||||
border: 1px #c4c4c4 solid;
|
||||
}
|
||||
.preview-cover img {
|
||||
height: var(--cover-h);
|
||||
max-width: calc(var(--cover-w) * 1.5);
|
||||
min-width: var(--cover-w);
|
||||
}
|
||||
.preview-cover img.hide {
|
||||
visibility: hidden;
|
||||
}
|
||||
.preview-cover.small, .preview.small .preview-cover {
|
||||
min-width: unset;
|
||||
|
@ -184,116 +219,125 @@
|
|||
}
|
||||
|
||||
.list-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
}
|
||||
.list-item:not(:first-child) {
|
||||
margin-top: 0.6rem;
|
||||
}
|
||||
.list-item .headings {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
padding-top: 0em;
|
||||
padding: 0em;
|
||||
margin-bottom: 0.4rem !important;
|
||||
}
|
||||
.list-item .headings .title {
|
||||
.list-item .headings .heading {
|
||||
padding: 0rem;
|
||||
}
|
||||
.list-item .title {
|
||||
flex-grow: 1;
|
||||
}
|
||||
.list-item .subtitle {
|
||||
font-size: var(--preview-title-sz);
|
||||
text-align: right;
|
||||
}
|
||||
.list-item .subtitle:not(:empty) {
|
||||
min-width: 9rem;
|
||||
}
|
||||
.list-item .media-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
margin-bottom: unset;
|
||||
}
|
||||
.list-item:not(.no-cover) .list-item .media-content {
|
||||
min-height: var(--preview-cover-small-size);
|
||||
}
|
||||
.list-item .media-content .content {
|
||||
flex-grow: 1;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
.list-item .media-content .actions {
|
||||
flex-grow: unset;
|
||||
.list-item .actions {
|
||||
text-align: right;
|
||||
margin-top: auto;
|
||||
}
|
||||
.list-item:not(.wide) .media {
|
||||
padding: 0.6rem;
|
||||
border: 1px solid var(--break-color) !important;
|
||||
}
|
||||
|
||||
.preview-wide {
|
||||
height: var(--preview-cover-size);
|
||||
display: flex;
|
||||
@media screen and (max-width: 400px) {
|
||||
.list-item .headings {
|
||||
flex-direction: column;
|
||||
}
|
||||
.list-item .headings .heading {
|
||||
display: inline;
|
||||
text-align: left;
|
||||
}
|
||||
.list-item .headings .subtitle {
|
||||
color: unset !important;
|
||||
background: none !important;
|
||||
}
|
||||
}
|
||||
.preview-wide .headings {
|
||||
height: var(--preview-cover-size);
|
||||
}
|
||||
.preview-wide:not(.header) .headings {
|
||||
.list-item.wide .preview-cover {
|
||||
box-shadow: 0em 0em 1em rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.preview-wide .headings {
|
||||
width: var(--preview-cover-size);
|
||||
min-width: var(--preview-cover-size);
|
||||
flex-grow: 0;
|
||||
margin-right: 1.2rem;
|
||||
}
|
||||
.preview-wide .content {
|
||||
.list-item.wide .content {
|
||||
font-size: var(--preview-wide-content-sz);
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.preview-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: var(--card-w);
|
||||
padding: 0rem !important;
|
||||
height: var(--preview-cover-size);
|
||||
width: var(--preview-cover-size);
|
||||
margin-bottom: auto;
|
||||
background-color: var(--preview-bg) !important;
|
||||
transition: box-shadow 0.2s;
|
||||
}
|
||||
.preview-card.small {
|
||||
height: var(--preview-cover-small-size);
|
||||
width: var(--preview-cover-small-size);
|
||||
.preview-card:hover figure {
|
||||
box-shadow: 0em 0em 1.2em rgba(0, 0, 0, 0.4) !important;
|
||||
}
|
||||
.preview-card.tiny {
|
||||
height: var(--preview-cover-tiny-size);
|
||||
width: var(--preview-cover-tiny-size);
|
||||
.preview-card:hover a {
|
||||
color: var(--heading-link-hv-fg);
|
||||
}
|
||||
.preview-card:not(.header) {
|
||||
box-shadow: 0em 0em 1em rgba(0, 0, 0, 0.2);
|
||||
.preview-card .headings {
|
||||
margin-top: 0.4rem;
|
||||
}
|
||||
.preview-card .title {
|
||||
max-height: calc(var(--preview-cover-size) / 2);
|
||||
.preview-card .headings .heading {
|
||||
display: block !important;
|
||||
}
|
||||
.preview-card .headings .title {
|
||||
overflow: hidden;
|
||||
}
|
||||
.card-grid .preview-card {
|
||||
min-width: unset;
|
||||
.preview-card .headings .subtitle {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
.preview-card .actions {
|
||||
.preview-card .card-content {
|
||||
flex-grow: 1;
|
||||
position: relative;
|
||||
}
|
||||
.preview-card .card-content figure {
|
||||
box-shadow: 0em 0em 1em rgba(0, 0, 0, 0.2);
|
||||
height: var(--cover-h);
|
||||
width: var(--cover-w);
|
||||
}
|
||||
.preview-card .card-content .actions {
|
||||
position: absolute;
|
||||
bottom: 0.6rem;
|
||||
right: 0.6rem;
|
||||
}
|
||||
.preview-card .actions label {
|
||||
display: none;
|
||||
padding: 0.4rem;
|
||||
bottom: 0rem;
|
||||
right: 0rem;
|
||||
}
|
||||
|
||||
.card-headings, .preview-card-headings {
|
||||
padding-top: 0.6rem;
|
||||
}
|
||||
.card-headings > div:not(:last-child), .card-headings .column > div, .preview-card-headings > div:not(:last-child), .preview-card-headings .column > div {
|
||||
margin-bottom: 0.6rem;
|
||||
}
|
||||
preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-cover) .preview-card-headings .heading {
|
||||
margin-bottom: 0.6rem;
|
||||
}
|
||||
|
||||
.card-grid {
|
||||
.list-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-auto-flow: dense;
|
||||
gap: 1.2rem;
|
||||
}
|
||||
|
||||
.a-carousel {
|
||||
margin-left: calc(0rem - var(--a-carousel-ml));
|
||||
@media screen and (max-width: 900px) {
|
||||
.list-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
.a-carousel .a-carousel-viewport {
|
||||
padding: var(--a-carousel-p) 0;
|
||||
padding-left: var(--a-carousel-ml);
|
||||
box-shadow: inset 0em 0em 20rem var(--a-carousel-bg);
|
||||
padding: 0rem;
|
||||
padding-top: var(--a-carousel-p);
|
||||
margin-top: calc(0rem - var(--a-carousel-p));
|
||||
}
|
||||
|
||||
.a-carousel-container {
|
||||
|
@ -305,18 +349,15 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
|
|||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.a-carousel-button-container button, .a-carousel-button-container .button {
|
||||
z-index: 1000;
|
||||
position: absolute;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
top: 50%;
|
||||
.a-carousel-bullets-container {
|
||||
padding-left: var(--a-carousel-ml);
|
||||
}
|
||||
.a-carousel-button-container button.prev, .a-carousel-button-container .button.prev {
|
||||
left: var(--a-carousel-nav-x);
|
||||
.a-carousel-bullets-container .bullet {
|
||||
margin: 0.2rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.a-carousel-button-container button.next, .a-carousel-button-container .button.next {
|
||||
right: var(--a-carousel-nav-x);
|
||||
.a-carousel-bullets-container .bullet:hover {
|
||||
color: var(--link-fg);
|
||||
}
|
||||
|
||||
.a-progress {
|
||||
|
@ -369,7 +410,7 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
|
|||
height: 3rem;
|
||||
background-color: var(--a-sound-bg);
|
||||
}
|
||||
.a-sound-item.playing, .a-sound-item.playing .label {
|
||||
.a-sound-item.playing .label {
|
||||
color: var(--a-sound-playing-fg) !important;
|
||||
}
|
||||
.a-sound-item:hover {
|
||||
|
@ -401,6 +442,10 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
|
|||
width: 3em;
|
||||
font-size: var(--a-sound-text-sz);
|
||||
}
|
||||
.a-sound-item .button:hover {
|
||||
color: var(--a-sound-hv-fg) !important;
|
||||
background-color: unset;
|
||||
}
|
||||
|
||||
.player-container {
|
||||
z-index: 1000000;
|
||||
|
@ -480,11 +525,10 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
|
|||
padding: 0.4rem !important;
|
||||
min-width: calc(var(--a-player-bar-height) + 0.8rem);
|
||||
border-radius: 0px;
|
||||
transition: background-color 0.5s;
|
||||
}
|
||||
.a-player-bar .button.open {
|
||||
background-color: var(--highlight-color-2-alpha);
|
||||
color: var(--highlight-color);
|
||||
background-color: var(--button-active-bg);
|
||||
color: var(--button-active-fg);
|
||||
}
|
||||
|
||||
.a-player-bar-content {
|
||||
|
@ -2711,50 +2755,51 @@ a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-i
|
|||
min-height: calc(100vh - 3.25rem);
|
||||
}
|
||||
|
||||
#player .button, #player a.button, #player button.button, #player .nav-urls a, .ax .button, .ax a.button, .ax button.button, .ax .nav-urls a {
|
||||
#player .button, #player a.button, #player button.button, .ax .button, .ax a.button, .ax button.button {
|
||||
font-size: 1rem;
|
||||
display: inline-block;
|
||||
padding: 0.4rem;
|
||||
border: 1px var(--highlight-color-2-alpha) solid;
|
||||
border: none;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
color: var(--button-fg);
|
||||
background-color: var(--button-bg);
|
||||
}
|
||||
#player .button.secondary, #player a.button.secondary, #player button.button.secondary, #player .nav-urls a.secondary, .ax .button.secondary, .ax a.button.secondary, .ax button.button.secondary, .ax .nav-urls a.secondary {
|
||||
#player .button.secondary, #player a.button.secondary, #player button.button.secondary, .ax .button.secondary, .ax a.button.secondary, .ax button.button.secondary {
|
||||
background-color: var(--button-sec-bg);
|
||||
}
|
||||
#player .button .icon, #player a.button .icon, #player button.button .icon, #player .nav-urls a .icon, .ax .button .icon, .ax a.button .icon, .ax button.button .icon, .ax .nav-urls a .icon {
|
||||
#player .button .label, #player .button label, #player a.button .label, #player a.button label, #player button.button .label, #player button.button label, .ax .button .label, .ax .button label, .ax a.button .label, .ax a.button label, .ax button.button .label, .ax button.button label {
|
||||
cursor: pointer;
|
||||
}
|
||||
#player .button .icon, #player a.button .icon, #player button.button .icon, .ax .button .icon, .ax a.button .icon, .ax button.button .icon {
|
||||
vertical-align: middle;
|
||||
}
|
||||
#player .button .icon:not(:only-child):first-child, #player a.button .icon:not(:only-child):first-child, #player button.button .icon:not(:only-child):first-child, #player .nav-urls a .icon:not(:only-child):first-child, .ax .button .icon:not(:only-child):first-child, .ax a.button .icon:not(:only-child):first-child, .ax button.button .icon:not(:only-child):first-child, .ax .nav-urls a .icon:not(:only-child):first-child {
|
||||
#player .button .icon:not(:only-child):first-child, #player a.button .icon:not(:only-child):first-child, #player button.button .icon:not(:only-child):first-child, .ax .button .icon:not(:only-child):first-child, .ax a.button .icon:not(:only-child):first-child, .ax button.button .icon:not(:only-child):first-child {
|
||||
margin-right: 0.6rem;
|
||||
}
|
||||
#player .button .icon:not(:only-child):last-child, #player a.button .icon:not(:only-child):last-child, #player button.button .icon:not(:only-child):last-child, #player .nav-urls a .icon:not(:only-child):last-child, .ax .button .icon:not(:only-child):last-child, .ax a.button .icon:not(:only-child):last-child, .ax button.button .icon:not(:only-child):last-child, .ax .nav-urls a .icon:not(:only-child):last-child {
|
||||
#player .button .icon:not(:only-child):last-child, #player a.button .icon:not(:only-child):last-child, #player button.button .icon:not(:only-child):last-child, .ax .button .icon:not(:only-child):last-child, .ax a.button .icon:not(:only-child):last-child, .ax button.button .icon:not(:only-child):last-child {
|
||||
margin-left: 0.6rem;
|
||||
}
|
||||
#player .button:hover, #player a.button:hover, #player button.button:hover, #player .nav-urls a:hover, .ax .button:hover, .ax a.button:hover, .ax button.button:hover, .ax .nav-urls a:hover {
|
||||
color: var(--button-hg-fg);
|
||||
#player .button:hover, #player a.button:hover, #player button.button:hover, .ax .button:hover, .ax a.button:hover, .ax button.button:hover {
|
||||
color: var(--button-hv-fg);
|
||||
background-color: var(--button-hv-bg);
|
||||
opacity: 1 !important;
|
||||
}
|
||||
#player .button.active, #player a.button.active, #player button.button.active, #player .nav-urls a.active, .ax .button.active, .ax a.button.active, .ax button.button.active, .ax .nav-urls a.active {
|
||||
border-color: var(--highlight-color-alpha);
|
||||
#player .button.active:not(:hover), #player a.button.active:not(:hover), #player button.button.active:not(:hover), .ax .button.active:not(:hover), .ax a.button.active:not(:hover), .ax button.button.active:not(:hover) {
|
||||
color: var(--button-active-fg);
|
||||
background-color: var(--button-active-bg);
|
||||
}
|
||||
#player .button.active:hover, #player a.button.active:hover, #player button.button.active:hover, #player .nav-urls a.active:hover, .ax .button.active:hover, .ax a.button.active:hover, .ax button.button.active:hover, .ax .nav-urls a.active:hover {
|
||||
border-color: var(--highlight-color);
|
||||
background-color: var(--highlight-color-2-alpha);
|
||||
opacity: 1 !important;
|
||||
}
|
||||
#player .button:not([disabled]), #player .button:not(.disabled), #player a.button:not([disabled]), #player a.button:not(.disabled), #player button.button:not([disabled]), #player button.button:not(.disabled), #player .nav-urls a:not([disabled]), #player .nav-urls a:not(.disabled), .ax .button:not([disabled]), .ax .button:not(.disabled), .ax a.button:not([disabled]), .ax a.button:not(.disabled), .ax button.button:not([disabled]), .ax button.button:not(.disabled), .ax .nav-urls a:not([disabled]), .ax .nav-urls a:not(.disabled) {
|
||||
#player .button:not([disabled]), #player .button:not(.disabled), #player a.button:not([disabled]), #player a.button:not(.disabled), #player button.button:not([disabled]), #player button.button:not(.disabled), .ax .button:not([disabled]), .ax .button:not(.disabled), .ax a.button:not([disabled]), .ax a.button:not(.disabled), .ax button.button:not([disabled]), .ax button.button:not(.disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
#player .button[disabled], #player .button.disabled, #player a.button[disabled], #player a.button.disabled, #player button.button[disabled], #player button.button.disabled, #player .nav-urls a[disabled], #player .nav-urls a.disabled, .ax .button[disabled], .ax .button.disabled, .ax a.button[disabled], .ax a.button.disabled, .ax button.button[disabled], .ax button.button.disabled, .ax .nav-urls a[disabled], .ax .nav-urls a.disabled {
|
||||
background-color: var(--highlight-color-grey);
|
||||
color: var(--highlight-color-2);
|
||||
border-color: var(--highlight-color-2-alpha);
|
||||
#player .button[disabled], #player .button.disabled, #player a.button[disabled], #player a.button.disabled, #player button.button[disabled], #player button.button.disabled, .ax .button[disabled], .ax .button.disabled, .ax a.button[disabled], .ax a.button.disabled, .ax button.button[disabled], .ax button.button.disabled {
|
||||
background-color: var(--hg-color-grey);
|
||||
color: var(--hg-color-2);
|
||||
border-color: var(--hg-color-2-alpha);
|
||||
}
|
||||
#player .button .dropdown-trigger, #player a.button .dropdown-trigger, #player button.button .dropdown-trigger, #player .nav-urls a .dropdown-trigger, .ax .button .dropdown-trigger, .ax a.button .dropdown-trigger, .ax button.button .dropdown-trigger, .ax .nav-urls a .dropdown-trigger {
|
||||
#player .button .dropdown-trigger, #player a.button .dropdown-trigger, #player button.button .dropdown-trigger, .ax .button .dropdown-trigger, .ax a.button .dropdown-trigger, .ax button.button .dropdown-trigger {
|
||||
border-radius: 1.5em;
|
||||
}
|
||||
#player .button-group .button, #player .nav .button, .ax .button-group .button, .ax .nav .button {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
}
|
||||
.a-carousel-viewport[data-v-b79f173e] {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
.a-carousel-container[data-v-b79f173e] {
|
||||
display: flex;
|
||||
|
@ -18,7 +18,24 @@
|
|||
.a-carousel-container > *[data-v-b79f173e] {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.a-carousel-bullets-container[data-v-b79f173e] {
|
||||
flex-grow: 1;
|
||||
}
|
||||
.a-carousel-bullets-container .bullet[data-v-b79f173e] {
|
||||
cursor: pointer;
|
||||
}
|
||||
.a-carousel-bullets-container .left[data-v-b79f173e] {
|
||||
min-width: 2rem;
|
||||
margin-right: auto;
|
||||
}
|
||||
.a-carousel-bullets-container .right[data-v-b79f173e] {
|
||||
min-width: 2rem;
|
||||
margin-left: auto;
|
||||
}
|
||||
.a-carousel-bullets-container[data-v-b79f173e] {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
/*!**************************************************************************************************************************************************************************************************************************************!*\
|
||||
!*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-24.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-24.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-24.use[3]!./src/assets/common.scss ***!
|
||||
|
@ -6837,10 +6854,34 @@ a.tag:hover {
|
|||
margin-top: auto !important;
|
||||
}
|
||||
|
||||
.grid-2 {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.grid-3 {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
}
|
||||
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.flex-column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.flex-grow-0 {
|
||||
flex-grow: 0 !important;
|
||||
}
|
||||
|
||||
.flex-grow-1 {
|
||||
flex-grow: 1 !important;
|
||||
}
|
||||
|
||||
.float-right {
|
||||
float: right;
|
||||
}
|
||||
|
@ -6928,11 +6969,11 @@ a.tag:hover {
|
|||
animation: 1s ease-in-out 1s infinite alternate blink;
|
||||
}
|
||||
|
||||
.highlight-color {
|
||||
.hg-color {
|
||||
color: var(--highlight-color);
|
||||
}
|
||||
|
||||
.highlight-color-2 {
|
||||
.hg-color-2 {
|
||||
color: var(--highlight-color-2);
|
||||
}
|
||||
|
||||
|
@ -6959,28 +7000,35 @@ input.half-field:not(:active):not(:hover) {
|
|||
:root {
|
||||
--body-bg: #fff;
|
||||
--text-color: black;
|
||||
--text-color-light: #555;
|
||||
--break-color: rgb(225, 225, 225);
|
||||
--main-color: #EFCA08;
|
||||
--main-color-light: #F4da51;
|
||||
--main-color-dark: #F49F0A;
|
||||
--secondary-color: #00A6A6;
|
||||
--secondary-color-light: #4cc0c0;
|
||||
--secondary-color-dark: #007ba8;
|
||||
--disabled-color: #aaa;
|
||||
--disabled-bg: #eee;
|
||||
--highlight-color: rgba(255, 255, 0, 1);
|
||||
--highlight-color-alpha: rgba(255, 255, 0, 0.7);
|
||||
--highlight-color-grey: rgba(230, 230, 60, 1);
|
||||
--highlight-color-2: rgb(0, 0, 254);
|
||||
--highlight-color-2-alpha: rgb(0, 0, 254, 0.7);
|
||||
--highlight-color-2-grey: rgba(50, 200, 200, 1);
|
||||
--link-fg: #00A6A6;
|
||||
--link-hv-fg: var(--text-color);
|
||||
--hg-color: #EFCA08;
|
||||
--hg-color-alpha: #EFCA08B3;
|
||||
--hg-color-grey: rgba(230, 230, 60, 1);
|
||||
--hg-color-2: #F49F0A;
|
||||
--hg-color-2-alpha: #F49F0AB3;
|
||||
--hg-color-2-grey: rgba(50, 200, 200, 1);
|
||||
--nav-primary-height: 3rem;
|
||||
--nav-secondary-height: 2.5rem;
|
||||
--nav-bg: var(--highlight-color);
|
||||
--nav-fg: var(--highlight-color-2);
|
||||
--nav-active-bg: var(--highlight-color-2);
|
||||
--nav-active-fg: var(--highlight-color);
|
||||
--nav-fg: var(--text-color);
|
||||
--nav-bg: var(--main-color);
|
||||
--nav-secondary-bg: var(--main-color-light);
|
||||
--nav-hv-fg: var(--button-hv-fg);
|
||||
--nav-hv-bg: var(--button-hv-bg);
|
||||
--nav-active-fg: var(--button-active-fg);
|
||||
--nav-active-bg: var(--button-active-bg);
|
||||
--nav-fs: 1rem;
|
||||
--nav-2-fs: 0.8rem;
|
||||
--button-fg: var(--text-color);
|
||||
--button-bg: var(--highlight-color);
|
||||
--button-hg-fg: var(--highlight-color-2);
|
||||
--button-hg-bg: var(--highlight-color);
|
||||
--button-active-fg: var(--highlight-color);
|
||||
--button-active-bg: var(--highlight-color-2);
|
||||
--nav-2-fs: 0.9rem;
|
||||
}
|
||||
|
||||
body {
|
||||
|
@ -7001,12 +7049,6 @@ body {
|
|||
--header-height: 20rem;
|
||||
}
|
||||
}
|
||||
section > .toolbar {
|
||||
background-color: rgba(0, 0, 0, 0.05);
|
||||
padding: 1em;
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6, .heading, .title, .subtitle {
|
||||
font-family: var(--heading-font-family);
|
||||
}
|
||||
|
|
|
@ -1211,7 +1211,7 @@
|
|||
background-color: var(--vc-bg);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-tap-hg-color: transparent;
|
||||
}
|
||||
|
||||
.vc-container,
|
||||
|
|
|
@ -8,57 +8,76 @@
|
|||
--subtitle-1-sz: 1.6rem;
|
||||
--subtitle-2-sz: 1.4rem;
|
||||
--subtitle-3-sz: 1.2rem;
|
||||
--heading-title-bg-color: rgba(255, 255, 0, 1);
|
||||
--heading-bg-color: var(--highlight-color);
|
||||
--heading-bg-highlight-color: var(--highlight-color-2);
|
||||
--heading-font-family: default;
|
||||
--preview-title-sz: 1.4rem;
|
||||
--preview-subtitle-sz: 1rem;
|
||||
--heading-bg: var(--main-color);
|
||||
--heading-fg: var(--text-color);
|
||||
--heading-hg-fg: var(--text-color);
|
||||
--heading-hg-bg: var(--secondary-color);
|
||||
--heading-link-hv-fg: var(--link-fg);
|
||||
--cover-w: 14rem;
|
||||
--cover-h: 14rem;
|
||||
--cover-small-w: 10rem;
|
||||
--cover-small-h: 10rem;
|
||||
--cover-tiny-w: 10rem;
|
||||
--cover-tiny-h: 10rem;
|
||||
--card-w: var(--cover-w);
|
||||
--preview-bg: var(--body-bg);
|
||||
--preview-title-sz: var(--title-3-sz);
|
||||
--preview-subtitle-sz: var(--title-3-sz);
|
||||
--preview-cover-size: 14rem;
|
||||
--preview-cover-small-size: 10rem;
|
||||
--preview-cover-tiny-size: 4rem;
|
||||
--preview-wide-content-sz: 1.6rem;
|
||||
--header-height: var(--preview-cover-size);
|
||||
--preview-heading-bg-color: var(--hg-color);
|
||||
--header-height: var(--cover-h);
|
||||
--a-carousel-p: 1.4rem;
|
||||
--a-carousel-ml: calc(1.2rem - 0.5rem);
|
||||
--a-carousel-gap: 1.2rem;
|
||||
--a-carousel-nav-x: -0.6em;
|
||||
--a-carousel-bg: none;
|
||||
--a-progress-bg: transparent;
|
||||
--a-progress-bar-bg: var(--highlight-color-2);
|
||||
--a-progress-bar-color: var(--highlight-color);
|
||||
--a-progress-bar-bg: var(--secondary-color);
|
||||
--a-progress-bar-color: var(--text-color);
|
||||
--a-progress-bar-pd: 0.4rem;
|
||||
--a-playlist-header-bg: var(--highlight-color-2-alpha);
|
||||
--a-playlist-header-fg: var(--highlight-color);
|
||||
--a-playlist-header-bg: var(--secondary-color);
|
||||
--a-playlist-header-fg: var(--text-color);
|
||||
--a-playlist-title-sz: 1rem;
|
||||
--a-playlist-title-pd: 0.6rem;
|
||||
--a-playlist-item-border: 1px var(--highlight-color-2) solid;
|
||||
--a-sound-bg: var(--highlight-color-alpha);
|
||||
--a-sound-hv-bg: var(--highlight-color);
|
||||
--a-sound-playing-fg: var(--highlight-color-alpha);
|
||||
--a-sound-hv-fg: var(--highlight-color-2);
|
||||
--a-playlist-item-border: 1px var(--secondary-color) solid;
|
||||
--a-sound-bg: var(--main-color);
|
||||
--a-sound-hv-bg: var(--main-color);
|
||||
--a-sound-hv-fg: var(--secondary-color);
|
||||
--a-sound-playing-fg: var(--secondary-color-dark);
|
||||
--a-sound-text-sz: 1rem;
|
||||
--a-player-url-fg: var(--highlight-color-2);
|
||||
--a-player-panel-bg: var(--highlight-color);
|
||||
--a-player-url-fg: var(--text-color);
|
||||
--a-player-panel-bg: var(--main-color);
|
||||
--a-player-bar-height: var(--nav-primary-height);
|
||||
--a-player-bar-bg: var(--highlight-color);
|
||||
--a-player-bar-bg: var(--main-color);
|
||||
--a-player-bar-title-alone-sz: 1.4rem;
|
||||
--button-fg: var(--highlight-color-2);
|
||||
--button-bg: var(--highlight-color);
|
||||
--button-sec-bg: var(--highlight-color-alpha);
|
||||
--button-hg-fg: var(--text-color);
|
||||
--button-hg-bg: var(--highlight-color);
|
||||
--button-active-fg: var(--highlight-color);
|
||||
--button-active-bg: var(--highlight-color-2);
|
||||
--a-player-bar-button-fg: var(--button-fg);
|
||||
--a-player-bar-button-fg: var(--button-bg);
|
||||
--a-player-bar-button-hv-fg: var(--button-hv-fg);
|
||||
--a-player-bar-button-hv-bg: var(--button-hv-bg);
|
||||
--button-fg: var(--text-color);
|
||||
--button-bg: var(--main-color);
|
||||
--button-sec-bg: var(--main-color-light);
|
||||
--button-hv-fg: var(--text-color);
|
||||
--button-hv-bg: var(--secondary-color-light);
|
||||
--button-active-fg: var(--text-color);
|
||||
--button-active-bg: var(--secondary-color);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1380px) {
|
||||
:root {
|
||||
--cover-w: 10rem;
|
||||
--cover-h: 10rem;
|
||||
--cover-small-w: 6rem;
|
||||
--cover-small-h: 6rem;
|
||||
--cover-tiny-w: 4rem;
|
||||
--cover-tiny-h: 4rem;
|
||||
--section-content-sz: 1rem;
|
||||
--preview-title-sz: 1rem;
|
||||
--preview-subtitle-sz: 0.8rem;
|
||||
--preview-cover-size: 10rem;
|
||||
--preview-cover-small-size: 6rem;
|
||||
--preview-cover-tiny-size: 4rem;
|
||||
--preview-wide-content-sz: 1rem;
|
||||
}
|
||||
}
|
||||
|
@ -72,6 +91,9 @@
|
|||
font-size: var(--title-3-sz);
|
||||
}
|
||||
|
||||
.subtitle, .header.preview .subtitle {
|
||||
color: var(--text-color-light);
|
||||
}
|
||||
.subtitle.is-1, .header.preview .subtitle.is-1 {
|
||||
font-size: var(--subtitle-1-sz);
|
||||
}
|
||||
|
@ -82,26 +104,30 @@
|
|||
font-size: var(--subtitle-3-sz);
|
||||
}
|
||||
|
||||
.title + .subtitle {
|
||||
padding-top: 0em !important;
|
||||
}
|
||||
|
||||
.headings a, a.heading, a.subtitle {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.heading {
|
||||
display: inline-block;
|
||||
}
|
||||
.heading:not(:empty) {
|
||||
background-color: var(--heading-bg-color);
|
||||
padding: 0.4rem;
|
||||
margin-top: 0em !important;
|
||||
vertical-align: top;
|
||||
}
|
||||
.heading:not(:empty).highlight, .heading:not(:empty).active, .preview.active .heading:not(:empty) {
|
||||
background-color: var(--heading-bg-highlight-color);
|
||||
color: var(--highlight-color);
|
||||
}
|
||||
.heading.title {
|
||||
background-color: var(--heading-title-bg-color);
|
||||
color: var(--heading-hg-fg);
|
||||
}
|
||||
|
||||
.preview {
|
||||
position: relative;
|
||||
background-size: cover;
|
||||
background-color: var(--preview-bg) !important;
|
||||
}
|
||||
.preview.preview-item {
|
||||
width: 100%;
|
||||
|
@ -135,21 +161,30 @@
|
|||
.preview .headings a {
|
||||
color: var(--text-color);
|
||||
}
|
||||
.preview .headings a:hover {
|
||||
color: var(--heading-link-hv-fg) !important;
|
||||
}
|
||||
.preview.tiny .content {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
.preview .content {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.preview-cover {
|
||||
background: var(--preview-bg);
|
||||
background-size: cover;
|
||||
background-color: transparent !important;
|
||||
height: var(--preview-cover-size);
|
||||
width: var(--preview-cover-size);
|
||||
min-width: var(--preview-cover-size);
|
||||
background-repeat: no-repeat;
|
||||
height: var(--cover-h);
|
||||
max-width: calc(var(--cover-w) * 1.5);
|
||||
min-width: var(--cover-w);
|
||||
overflow: hidden;
|
||||
border: 1px #c4c4c4 solid;
|
||||
}
|
||||
.preview-cover img {
|
||||
height: var(--cover-h);
|
||||
max-width: calc(var(--cover-w) * 1.5);
|
||||
min-width: var(--cover-w);
|
||||
}
|
||||
.preview-cover img.hide {
|
||||
visibility: hidden;
|
||||
}
|
||||
.preview-cover.small, .preview.small .preview-cover {
|
||||
min-width: unset;
|
||||
|
@ -184,116 +219,125 @@
|
|||
}
|
||||
|
||||
.list-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
}
|
||||
.list-item:not(:first-child) {
|
||||
margin-top: 0.6rem;
|
||||
}
|
||||
.list-item .headings {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
padding-top: 0em;
|
||||
padding: 0em;
|
||||
margin-bottom: 0.4rem !important;
|
||||
}
|
||||
.list-item .headings .title {
|
||||
.list-item .headings .heading {
|
||||
padding: 0rem;
|
||||
}
|
||||
.list-item .title {
|
||||
flex-grow: 1;
|
||||
}
|
||||
.list-item .subtitle {
|
||||
font-size: var(--preview-title-sz);
|
||||
text-align: right;
|
||||
}
|
||||
.list-item .subtitle:not(:empty) {
|
||||
min-width: 9rem;
|
||||
}
|
||||
.list-item .media-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
margin-bottom: unset;
|
||||
}
|
||||
.list-item:not(.no-cover) .list-item .media-content {
|
||||
min-height: var(--preview-cover-small-size);
|
||||
}
|
||||
.list-item .media-content .content {
|
||||
flex-grow: 1;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
.list-item .media-content .actions {
|
||||
flex-grow: unset;
|
||||
.list-item .actions {
|
||||
text-align: right;
|
||||
margin-top: auto;
|
||||
}
|
||||
.list-item:not(.wide) .media {
|
||||
padding: 0.6rem;
|
||||
border: 1px solid var(--break-color) !important;
|
||||
}
|
||||
|
||||
.preview-wide {
|
||||
height: var(--preview-cover-size);
|
||||
display: flex;
|
||||
@media screen and (max-width: 400px) {
|
||||
.list-item .headings {
|
||||
flex-direction: column;
|
||||
}
|
||||
.list-item .headings .heading {
|
||||
display: inline;
|
||||
text-align: left;
|
||||
}
|
||||
.list-item .headings .subtitle {
|
||||
color: unset !important;
|
||||
background: none !important;
|
||||
}
|
||||
}
|
||||
.preview-wide .headings {
|
||||
height: var(--preview-cover-size);
|
||||
}
|
||||
.preview-wide:not(.header) .headings {
|
||||
.list-item.wide .preview-cover {
|
||||
box-shadow: 0em 0em 1em rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.preview-wide .headings {
|
||||
width: var(--preview-cover-size);
|
||||
min-width: var(--preview-cover-size);
|
||||
flex-grow: 0;
|
||||
margin-right: 1.2rem;
|
||||
}
|
||||
.preview-wide .content {
|
||||
.list-item.wide .content {
|
||||
font-size: var(--preview-wide-content-sz);
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.preview-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: var(--card-w);
|
||||
padding: 0rem !important;
|
||||
height: var(--preview-cover-size);
|
||||
width: var(--preview-cover-size);
|
||||
margin-bottom: auto;
|
||||
background-color: var(--preview-bg) !important;
|
||||
transition: box-shadow 0.2s;
|
||||
}
|
||||
.preview-card.small {
|
||||
height: var(--preview-cover-small-size);
|
||||
width: var(--preview-cover-small-size);
|
||||
.preview-card:hover figure {
|
||||
box-shadow: 0em 0em 1.2em rgba(0, 0, 0, 0.4) !important;
|
||||
}
|
||||
.preview-card.tiny {
|
||||
height: var(--preview-cover-tiny-size);
|
||||
width: var(--preview-cover-tiny-size);
|
||||
.preview-card:hover a {
|
||||
color: var(--heading-link-hv-fg);
|
||||
}
|
||||
.preview-card:not(.header) {
|
||||
box-shadow: 0em 0em 1em rgba(0, 0, 0, 0.2);
|
||||
.preview-card .headings {
|
||||
margin-top: 0.4rem;
|
||||
}
|
||||
.preview-card .title {
|
||||
max-height: calc(var(--preview-cover-size) / 2);
|
||||
.preview-card .headings .heading {
|
||||
display: block !important;
|
||||
}
|
||||
.preview-card .headings .title {
|
||||
overflow: hidden;
|
||||
}
|
||||
.card-grid .preview-card {
|
||||
min-width: unset;
|
||||
.preview-card .headings .subtitle {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
.preview-card .actions {
|
||||
.preview-card .card-content {
|
||||
flex-grow: 1;
|
||||
position: relative;
|
||||
}
|
||||
.preview-card .card-content figure {
|
||||
box-shadow: 0em 0em 1em rgba(0, 0, 0, 0.2);
|
||||
height: var(--cover-h);
|
||||
width: var(--cover-w);
|
||||
}
|
||||
.preview-card .card-content .actions {
|
||||
position: absolute;
|
||||
bottom: 0.6rem;
|
||||
right: 0.6rem;
|
||||
}
|
||||
.preview-card .actions label {
|
||||
display: none;
|
||||
padding: 0.4rem;
|
||||
bottom: 0rem;
|
||||
right: 0rem;
|
||||
}
|
||||
|
||||
.card-headings, .preview-card-headings {
|
||||
padding-top: 0.6rem;
|
||||
}
|
||||
.card-headings > div:not(:last-child), .card-headings .column > div, .preview-card-headings > div:not(:last-child), .preview-card-headings .column > div {
|
||||
margin-bottom: 0.6rem;
|
||||
}
|
||||
preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-cover) .preview-card-headings .heading {
|
||||
margin-bottom: 0.6rem;
|
||||
}
|
||||
|
||||
.card-grid {
|
||||
.list-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-auto-flow: dense;
|
||||
gap: 1.2rem;
|
||||
}
|
||||
|
||||
.a-carousel {
|
||||
margin-left: calc(0rem - var(--a-carousel-ml));
|
||||
@media screen and (max-width: 900px) {
|
||||
.list-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
.a-carousel .a-carousel-viewport {
|
||||
padding: var(--a-carousel-p) 0;
|
||||
padding-left: var(--a-carousel-ml);
|
||||
box-shadow: inset 0em 0em 20rem var(--a-carousel-bg);
|
||||
padding: 0rem;
|
||||
padding-top: var(--a-carousel-p);
|
||||
margin-top: calc(0rem - var(--a-carousel-p));
|
||||
}
|
||||
|
||||
.a-carousel-container {
|
||||
|
@ -305,18 +349,15 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
|
|||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.a-carousel-button-container button, .a-carousel-button-container .button {
|
||||
z-index: 1000;
|
||||
position: absolute;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
top: 50%;
|
||||
.a-carousel-bullets-container {
|
||||
padding-left: var(--a-carousel-ml);
|
||||
}
|
||||
.a-carousel-button-container button.prev, .a-carousel-button-container .button.prev {
|
||||
left: var(--a-carousel-nav-x);
|
||||
.a-carousel-bullets-container .bullet {
|
||||
margin: 0.2rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.a-carousel-button-container button.next, .a-carousel-button-container .button.next {
|
||||
right: var(--a-carousel-nav-x);
|
||||
.a-carousel-bullets-container .bullet:hover {
|
||||
color: var(--link-fg);
|
||||
}
|
||||
|
||||
.a-progress {
|
||||
|
@ -369,7 +410,7 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
|
|||
height: 3rem;
|
||||
background-color: var(--a-sound-bg);
|
||||
}
|
||||
.a-sound-item.playing, .a-sound-item.playing .label {
|
||||
.a-sound-item.playing .label {
|
||||
color: var(--a-sound-playing-fg) !important;
|
||||
}
|
||||
.a-sound-item:hover {
|
||||
|
@ -401,6 +442,10 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
|
|||
width: 3em;
|
||||
font-size: var(--a-sound-text-sz);
|
||||
}
|
||||
.a-sound-item .button:hover {
|
||||
color: var(--a-sound-hv-fg) !important;
|
||||
background-color: unset;
|
||||
}
|
||||
|
||||
.player-container {
|
||||
z-index: 1000000;
|
||||
|
@ -480,11 +525,10 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
|
|||
padding: 0.4rem !important;
|
||||
min-width: calc(var(--a-player-bar-height) + 0.8rem);
|
||||
border-radius: 0px;
|
||||
transition: background-color 0.5s;
|
||||
}
|
||||
.a-player-bar .button.open {
|
||||
background-color: var(--highlight-color-2-alpha);
|
||||
color: var(--highlight-color);
|
||||
background-color: var(--button-active-bg);
|
||||
color: var(--button-active-fg);
|
||||
}
|
||||
|
||||
.a-player-bar-content {
|
||||
|
@ -7276,23 +7320,27 @@ a.tag:hover {
|
|||
padding-bottom: 5rem;
|
||||
}
|
||||
.page a {
|
||||
color: var(--highlight-color-2);
|
||||
text-decoration: none;
|
||||
color: var(--link-fg);
|
||||
text-decoration: underline;
|
||||
}
|
||||
.page a:hover {
|
||||
color: var(--text-color);
|
||||
color: var(--link-hv-fg);
|
||||
}
|
||||
.page section.container {
|
||||
margin-top: 0.6rem;
|
||||
}
|
||||
.page section.container > .title {
|
||||
margin-top: unset;
|
||||
padding-top: unset !important;
|
||||
margin-bottom: 1.2rem;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
.page section.container:not(:last-child) {
|
||||
margin-bottom: 0.6rem;
|
||||
padding-bottom: 0.6rem;
|
||||
border-bottom: 2px var(--break-color) solid;
|
||||
}
|
||||
.page section.container > .title {
|
||||
font-size: var(--title-2-sz);
|
||||
clear: both;
|
||||
margin: 0.6rem 0;
|
||||
}
|
||||
.page *[data-oembed-url] {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
|
@ -7300,7 +7348,7 @@ a.tag:hover {
|
|||
}
|
||||
|
||||
.vc-weekday-1, .vc-weekday-7 {
|
||||
color: var(--highlight-color-2) !important;
|
||||
color: var(--hg-color-2) !important;
|
||||
}
|
||||
|
||||
.schedules {
|
||||
|
@ -7312,56 +7360,62 @@ a.tag:hover {
|
|||
display: inline-block;
|
||||
margin: 0.6rem;
|
||||
margin-left: 0rem;
|
||||
padding: 0.4rem;
|
||||
border-bottom: 1px var(--main-color) solid;
|
||||
}
|
||||
.schedule .heading {
|
||||
padding: 0em;
|
||||
}
|
||||
.schedule .day {
|
||||
font-weight: 700;
|
||||
margin-right: 0.6rem;
|
||||
}
|
||||
|
||||
.button, a.button, button.button, .nav-urls a {
|
||||
.button, a.button, button.button {
|
||||
font-size: 1rem;
|
||||
display: inline-block;
|
||||
padding: 0.4rem;
|
||||
border: 1px var(--highlight-color-2-alpha) solid;
|
||||
border: none;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
color: var(--button-fg);
|
||||
background-color: var(--button-bg);
|
||||
}
|
||||
.button.secondary, a.button.secondary, button.button.secondary, .nav-urls a.secondary {
|
||||
.button.secondary, a.button.secondary, button.button.secondary {
|
||||
background-color: var(--button-sec-bg);
|
||||
}
|
||||
.button .icon, a.button .icon, button.button .icon, .nav-urls a .icon {
|
||||
.button .label, .button label, a.button .label, a.button label, button.button .label, button.button label {
|
||||
cursor: pointer;
|
||||
}
|
||||
.button .icon, a.button .icon, button.button .icon {
|
||||
vertical-align: middle;
|
||||
}
|
||||
.button .icon:not(:only-child):first-child, a.button .icon:not(:only-child):first-child, button.button .icon:not(:only-child):first-child, .nav-urls a .icon:not(:only-child):first-child {
|
||||
.button .icon:not(:only-child):first-child, a.button .icon:not(:only-child):first-child, button.button .icon:not(:only-child):first-child {
|
||||
margin-right: 0.6rem;
|
||||
}
|
||||
.button .icon:not(:only-child):last-child, a.button .icon:not(:only-child):last-child, button.button .icon:not(:only-child):last-child, .nav-urls a .icon:not(:only-child):last-child {
|
||||
.button .icon:not(:only-child):last-child, a.button .icon:not(:only-child):last-child, button.button .icon:not(:only-child):last-child {
|
||||
margin-left: 0.6rem;
|
||||
}
|
||||
.button:hover, a.button:hover, button.button:hover, .nav-urls a:hover {
|
||||
color: var(--button-hg-fg);
|
||||
.button:hover, a.button:hover, button.button:hover {
|
||||
color: var(--button-hv-fg);
|
||||
background-color: var(--button-hv-bg);
|
||||
opacity: 1 !important;
|
||||
}
|
||||
.button.active, a.button.active, button.button.active, .nav-urls a.active {
|
||||
border-color: var(--highlight-color-alpha);
|
||||
.button.active:not(:hover), a.button.active:not(:hover), button.button.active:not(:hover) {
|
||||
color: var(--button-active-fg);
|
||||
background-color: var(--button-active-bg);
|
||||
}
|
||||
.button.active:hover, a.button.active:hover, button.button.active:hover, .nav-urls a.active:hover {
|
||||
border-color: var(--highlight-color);
|
||||
background-color: var(--highlight-color-2-alpha);
|
||||
opacity: 1 !important;
|
||||
}
|
||||
.button:not([disabled]), .button:not(.disabled), a.button:not([disabled]), a.button:not(.disabled), button.button:not([disabled]), button.button:not(.disabled), .nav-urls a:not([disabled]), .nav-urls a:not(.disabled) {
|
||||
.button:not([disabled]), .button:not(.disabled), a.button:not([disabled]), a.button:not(.disabled), button.button:not([disabled]), button.button:not(.disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
.button[disabled], .button.disabled, a.button[disabled], a.button.disabled, button.button[disabled], button.button.disabled, .nav-urls a[disabled], .nav-urls a.disabled {
|
||||
background-color: var(--highlight-color-grey);
|
||||
color: var(--highlight-color-2);
|
||||
border-color: var(--highlight-color-2-alpha);
|
||||
.button[disabled], .button.disabled, a.button[disabled], a.button.disabled, button.button[disabled], button.button.disabled {
|
||||
background-color: var(--hg-color-grey);
|
||||
color: var(--hg-color-2);
|
||||
border-color: var(--hg-color-2-alpha);
|
||||
}
|
||||
.button .dropdown-trigger, a.button .dropdown-trigger, button.button .dropdown-trigger, .nav-urls a .dropdown-trigger {
|
||||
.button .dropdown-trigger, a.button .dropdown-trigger, button.button .dropdown-trigger {
|
||||
border-radius: 1.5em;
|
||||
}
|
||||
|
||||
|
@ -7388,17 +7442,18 @@ a.tag:hover {
|
|||
.actions.no-label label {
|
||||
display: none;
|
||||
}
|
||||
.actions button, .actions .action {
|
||||
.actions button, .actions .action, .actions a {
|
||||
justify-content: center;
|
||||
min-width: 2rem;
|
||||
padding: 0.4rem;
|
||||
}
|
||||
.actions button .not-selected, .actions .action .not-selected {
|
||||
.actions button .not-selected, .actions .action .not-selected, .actions a .not-selected {
|
||||
opacity: 0.6;
|
||||
}
|
||||
.actions button .icon, .actions .action .icon {
|
||||
.actions button .icon, .actions .action .icon, .actions a .icon {
|
||||
margin: 0em !important;
|
||||
}
|
||||
.actions button label, .actions .action label {
|
||||
.actions button label, .actions .action label, .actions a label {
|
||||
margin-left: 0.4rem;
|
||||
}
|
||||
|
||||
|
@ -7426,8 +7481,8 @@ a.tag:hover {
|
|||
}
|
||||
}
|
||||
.navbar-item.active, .table tr.is-selected {
|
||||
color: var(--highlight-color-2);
|
||||
background-color: var(--highlight-color);
|
||||
color: var(--hg-color-2);
|
||||
background-color: var(--hg-color);
|
||||
}
|
||||
|
||||
.title {
|
||||
|
@ -7459,24 +7514,24 @@ a.tag:hover {
|
|||
text-align: center;
|
||||
font-family: var(--heading-font-family);
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.nav .nav-item a, .nav .nav-item .button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
color: var(--nav-fg) !important;
|
||||
}
|
||||
.nav .nav-item .icon:first-child, .nav .nav-item .icon + span {
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
display: inline-block;
|
||||
}
|
||||
.nav .nav-item:hover {
|
||||
background-color: var(--nav-hv-bg);
|
||||
color: var(--nav-hv-fg);
|
||||
}
|
||||
.nav .nav-item.active {
|
||||
background-color: var(--nav-active-bg);
|
||||
color: var(--nav-active-fg);
|
||||
color: var(--nav-active-fg) !important;
|
||||
}
|
||||
.nav .nav-menu {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
background-color: var(--nav-bg);
|
||||
}
|
||||
.nav .nav-menu .dropdown-content {
|
||||
font-size: 1rem;
|
||||
|
@ -7503,7 +7558,7 @@ a.tag:hover {
|
|||
white-space: nowrap;
|
||||
}
|
||||
.nav.secondary {
|
||||
background-color: var(--nav-bg);
|
||||
background-color: var(--nav-secondary-bg);
|
||||
justify-content: right;
|
||||
}
|
||||
.nav.primary:hover + .nav.secondary, .nav.secondary:hover {
|
||||
|
@ -7518,6 +7573,7 @@ a.tag:hover {
|
|||
.breadcrumbs {
|
||||
text-align: right;
|
||||
padding: 0.6rem 0rem;
|
||||
font-size: 0.8rem;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
@ -7548,7 +7604,7 @@ a.tag:hover {
|
|||
flex-grow: 1;
|
||||
}
|
||||
.navs .nav + .nav {
|
||||
flew-grow: 0 !important;
|
||||
flex-grow: 0 !important;
|
||||
}
|
||||
.nav {
|
||||
justify-content: space-between;
|
||||
|
@ -7560,6 +7616,7 @@ a.tag:hover {
|
|||
.nav .nav-menu {
|
||||
display: block;
|
||||
position: absolute;
|
||||
background-color: var(--nav-secondary-bg);
|
||||
left: 0;
|
||||
top: 100%;
|
||||
width: 100%;
|
||||
|
@ -7568,10 +7625,7 @@ a.tag:hover {
|
|||
.nav .nav-menu .nav-item {
|
||||
display: block;
|
||||
font-weight: 400;
|
||||
}
|
||||
.nav .nav-menu .nav-item:hover {
|
||||
background-color: var(--highlight-color-2-alpha);
|
||||
color: var(--highlight-color);
|
||||
font-size: var(--nav-fs);
|
||||
}
|
||||
.nav .nav-menu:not(.active) {
|
||||
display: none !important;
|
||||
|
@ -7634,15 +7688,40 @@ nav li a, nav li .button {
|
|||
|
||||
.header-cover:not(:only-child) {
|
||||
float: right;
|
||||
height: var(--header-height);
|
||||
max-width: calc(var(--header-height) * 2);
|
||||
position: relative;
|
||||
z-index: 1000;
|
||||
background-color: var(--body-bg);
|
||||
margin: 0 0 1.2rem 1.2rem;
|
||||
}
|
||||
.header-cover:not(:only-child) .cover {
|
||||
max-width: calc(var(--header-height) * 2);
|
||||
height: var(--header-height);
|
||||
}
|
||||
|
||||
.header-cover:only-child {
|
||||
with: 100%;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
.container.header {
|
||||
width: calc(100% - 0.4rem);
|
||||
}
|
||||
.container.header .headings {
|
||||
width: 100%;
|
||||
clear: both;
|
||||
}
|
||||
.container.header .header-cover {
|
||||
float: none;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
.container.header .cover {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-height: calc(var(--cover-h) * 1);
|
||||
max-width: calc(var(--cover-w) * 2);
|
||||
}
|
||||
}
|
||||
.page-content {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
@ -7650,6 +7729,20 @@ nav li a, nav li .button {
|
|||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.list-item.logs .track {
|
||||
margin-right: 0.6rem;
|
||||
}
|
||||
.list-item.logs .track .icon {
|
||||
margin-right: 0.4rem;
|
||||
color: var(--secondary-color-dark);
|
||||
}
|
||||
.list-item:nth-child(3n):not(.wide) .media {
|
||||
border-color: var(--main-color-dark) !important;
|
||||
}
|
||||
.list-item:nth-child(3n+1):not(.wide) .media {
|
||||
border-color: var(--secondary-color-dark) !important;
|
||||
}
|
||||
|
||||
body {
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
@ -7670,19 +7763,4 @@ body {
|
|||
margin-left: 0.4rem;
|
||||
margin-right: 0.4rem;
|
||||
}
|
||||
.container.header {
|
||||
width: calc(100% - 0.4rem);
|
||||
}
|
||||
.container.header .headings {
|
||||
width: 100%;
|
||||
clear: both;
|
||||
}
|
||||
.container.header .header-cover {
|
||||
float: none;
|
||||
width: 100%;
|
||||
max-width: unset;
|
||||
height: unset;
|
||||
margin-left: 0rem;
|
||||
margin-right: 0rem;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mod
|
|||
\*******************************************************************************************************************************************************************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n setup() {\n return {\n viewport: (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(null),\n container: (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(null)\n };\n },\n data() {\n return {\n cards: [],\n index: 0,\n refresh_: 0\n };\n },\n props: {\n cardSelector: {\n type: String,\n default: ''\n },\n containerClass: {\n type: String,\n default: ''\n },\n buttonClass: {\n type: String,\n default: 'button'\n },\n leftButtonIcon: {\n type: String,\n default: \"fas fa-chevron-left\"\n },\n rightButtonIcon: {\n type: String,\n default: \"fas fa-chevron-right\"\n }\n },\n computed: {\n card() {\n return this.cards()[this.index];\n },\n showPrevButton() {\n return this.index > 0;\n },\n showNextButton() {\n if (!this.cards || this.cards.length <= 1) return false;\n let {\n count\n } = this.visibility;\n return this.index + count < this.cards.length;\n },\n visibility() {\n // force refresh on index\n [this.index, this.refresh_];\n if (!this.cards) return {\n min: -1,\n max: -1,\n count: 0\n };\n const vOff = this.offset(this.$refs.viewport);\n var [min, max] = [-1, -1];\n for (let at = 0; at < this.cards.length; at++) {\n const card = this.cards[at];\n const cOff = this.offset(card);\n const visible = vOff.min <= cOff.min && vOff.max >= cOff.max;\n if (visible) {\n if (min === -1) min = parseInt(at);\n max = parseInt(at);\n }\n }\n if (max !== -1) max++;\n return {\n min,\n max,\n count: min !== -1 ? max - min : 0\n };\n }\n },\n methods: {\n offset(el, parent = null) {\n const rect = el.getBoundingClientRect();\n const off = {\n min: rect.left,\n max: rect.right\n };\n if (parent === null) return off;\n const pOff = this.offset(parent);\n return {\n min: off.min - pOff.min,\n max: off.max - pOff.max\n };\n },\n getCards() {\n if (!this.$refs.container) return [];\n if (!this.cardSelector) return this.$refs.container.children;\n return this.$refs.container.querySelectorAll(this.cardSelector);\n },\n selectIndex(index, relative = false) {\n if (relative) index = this.index + index;\n index = Math.min(this.cards.length, index);\n const el = this.cards[index];\n if (!el) return null;\n const elOff = this.offset(el, this.$refs.container);\n this.$refs.container.style.marginLeft = `-${elOff.min}px`;\n this.index = index;\n return el;\n },\n next() {\n this.refresh_++;\n if (!this.visibility.count) return;\n let {\n count\n } = this.visibility;\n let at = Math.min(count === 1 ? this.index + count : this.index + count - 1, this.cards.length - count);\n this.selectIndex(at);\n },\n prev() {\n this.refresh_++;\n if (!this.visibility.count) return;\n const {\n min,\n count\n } = this.visibility;\n let at = Math.max(0, min - count);\n if (min < 0 || count <= 0) return;\n this.selectIndex(at);\n },\n refresh() {\n this.cards = this.getCards();\n this.selectIndex(this.index);\n this.refresh_++;\n }\n },\n mounted() {\n this.observers = [new MutationObserver(() => this.refresh()), new ResizeObserver(() => this.refresh())];\n this.observers[0].observe(this.$refs.container, {\n \"childList\": true\n });\n this.observers[1].observe(this.$refs.container);\n this.refresh();\n },\n unmounted() {\n for (var observer of this.observers) observer.disconnect();\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/ACarousel.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\n\nclass Offset {\n constructor(el, min = null, max = null) {\n this.el = el;\n this.rect = el.getBoundingClientRect();\n ({\n min,\n max\n } = this.minmax(min, max));\n this.min = min;\n this.max = max;\n this.size = max - min;\n }\n minmax(min = null, max = null) {\n min = min === null ? this.rect.left : min;\n max = max === null ? this.rect.right : max;\n return {\n min,\n max\n };\n }\n relative(to) {\n return new Offset(this.el, this.min - to.min, this.max - to.min);\n }\n}\nclass Card extends Offset {\n constructor(el, index) {\n super(el);\n this.index = index;\n }\n visible(viewportOffset) {\n return viewportOffset.min <= this.min && viewportOffset.max >= this.max;\n }\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n setup() {\n return {\n viewport: (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null),\n container: (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null)\n };\n },\n data() {\n return {\n cards: [],\n index: 0,\n refresh_: 0\n };\n },\n props: {\n cardSelector: {\n type: String,\n default: ''\n },\n containerClass: {\n type: String,\n default: ''\n },\n buttonClass: {\n type: String,\n default: 'button'\n },\n leftButtonIcon: {\n type: String,\n default: \"fas fa-chevron-left\"\n },\n rightButtonIcon: {\n type: String,\n default: \"fas fa-chevron-right\"\n }\n },\n computed: {\n card() {\n return this.cards()[this.index];\n },\n showPrev() {\n return this.index > 0;\n },\n showNext() {\n if (!this.cards || this.cards.length <= 1) return false;\n let last = this.bullets[this.bullets.length - 1];\n return this.index != last;\n },\n bullets() {\n if (!this.cards || !this.$refs.viewport) return [];\n let contOff = new Offset(this.$refs.container);\n let viewMax = new Offset(this.$refs.viewport).size;\n let bullets = [];\n let i = 0;\n let max = viewMax;\n bullets.push(i);\n while (i < this.cards.length) {\n // skip until next view\n for (; i < this.cards.length; i++) {\n let card = this.cards[i].relative(contOff);\n if (card.max > max) {\n max = card.min + viewMax;\n bullets.push(i);\n i++;\n break;\n }\n }\n }\n return bullets;\n }\n },\n methods: {\n getCards() {\n if (!this.$refs.container) return [];\n let nodes = !this.cardSelector ? [...this.$refs.container.children] : [...this.$refs.container.querySelectorAll(this.cardSelector)];\n return nodes.map((el, index) => new Card(el, index));\n },\n select(index, relative = false) {\n if (relative) index = this.index + index;\n index = Math.min(index, this.cards.length);\n index = Math.max(index, 0);\n let card = this.cards[index];\n if (!card) return null;\n card = new Card(card.el);\n const cont = new Offset(this.$refs.container);\n const rel = card.relative(cont);\n this.$refs.container.style.marginLeft = `-${rel.min}px`;\n this.index = index;\n return card.el;\n },\n next() {\n let n = this.bullets.indexOf(this.index);\n let index = this.bullets[n + 1];\n this.select(index);\n },\n prev() {\n let n = this.bullets.indexOf(this.index);\n let index = this.bullets[n - 1];\n this.select(index);\n },\n refresh() {\n this.cards = this.getCards();\n this.select(this.index);\n this.refresh_++;\n }\n },\n mounted() {\n this.observers = [new MutationObserver(() => this.refresh()), new ResizeObserver(() => this.refresh())];\n this.observers[0].observe(this.$refs.container, {\n \"childList\": true\n });\n this.observers[1].observe(this.$refs.container);\n this.refresh();\n },\n unmounted() {\n for (var observer of this.observers) observer.disconnect();\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/ACarousel.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -205,7 +205,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|||
\***********************************************************************************************************************************************************************************************************************************************************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _withScopeId = n => ((0,vue__WEBPACK_IMPORTED_MODULE_0__.pushScopeId)(\"data-v-b79f173e\"), n = n(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.popScopeId)(), n);\nconst _hoisted_1 = {\n class: \"a-carousel\"\n};\nconst _hoisted_2 = {\n key: 0,\n class: \"a-carousel-button-container\"\n};\nconst _hoisted_3 = {\n class: \"icon\"\n};\nconst _hoisted_4 = {\n key: 1,\n class: \"a-carousel-button-container\"\n};\nconst _hoisted_5 = {\n class: \"icon\"\n};\nconst _hoisted_6 = {\n ref: \"viewport\",\n class: \"a-carousel-viewport\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"section\", _hoisted_1, [$options.showPrevButton ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"nav\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"button\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([$props.buttonClass, 'prev']),\n \"aria-label\": \"Go left\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.prev && $options.prev(...args))\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.leftButtonIcon)\n }, null, 2 /* CLASS */)])], 2 /* CLASS */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $options.showNextButton ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"button\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)([$props.buttonClass, 'next']),\n \"aria-label\": \"Go left\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.next && $options.next(...args))\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.rightButtonIcon)\n }, null, 2 /* CLASS */)])], 2 /* CLASS */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"nav\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"section\", {\n ref: \"container\",\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['a-carousel-container', $props.containerClass])\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"default\", {}, undefined, true)], 2 /* CLASS */)], 512 /* NEED_PATCH */)]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ACarousel.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nconst _withScopeId = n => ((0,vue__WEBPACK_IMPORTED_MODULE_0__.pushScopeId)(\"data-v-b79f173e\"), n = n(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.popScopeId)(), n);\nconst _hoisted_1 = {\n class: \"a-carousel\"\n};\nconst _hoisted_2 = {\n ref: \"viewport\",\n class: \"a-carousel-viewport\"\n};\nconst _hoisted_3 = {\n class: \"a-carousel-bullets-container\"\n};\nconst _hoisted_4 = {\n class: \"left\"\n};\nconst _hoisted_5 = [\"onClick\"];\nconst _hoisted_6 = {\n key: 0,\n class: \"fa fa-circle\"\n};\nconst _hoisted_7 = {\n key: 1,\n class: \"far fa-circle\"\n};\nconst _hoisted_8 = {\n class: \"right\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"section\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"nav\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"section\", {\n ref: \"container\",\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['a-carousel-container', $props.containerClass])\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"default\", {}, undefined, true)], 2 /* CLASS */)], 512 /* NEED_PATCH */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"nav\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_4, [$options.showPrev ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", {\n key: 0,\n class: \"icon bullet\",\n onClick: _cache[0] || (_cache[0] = $event => $options.prev())\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.leftButtonIcon)\n }, null, 2 /* CLASS */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]), $options.bullets.length > 1 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: 0\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($options.bullets, bullet => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", {\n class: \"icon bullet\",\n key: bullet,\n onClick: $event => $options.select(bullet)\n }, [bullet == $data.index ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"i\", _hoisted_6)) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"i\", _hoisted_7))], 8 /* PROPS */, _hoisted_5);\n }), 128 /* KEYED_FRAGMENT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_8, [$options.showNext ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", {\n key: 0,\n class: \"icon bullet\",\n onClick: _cache[1] || (_cache[1] = $event => $options.next())\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($props.rightButtonIcon)\n }, null, 2 /* CLASS */)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"bullets-right\", {\n vBind: this\n }, undefined, true)])]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ACarousel.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -225,7 +225,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|||
\**********************************************************************************************************************************************************************************************************************************************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"default\", {\n page: _ctx.page,\n podcasts: $data.podcasts\n })]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/AEpisode.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm-bundler.js\");\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"default\", {\n page: _ctx.page,\n podcasts: $data.podcasts\n });\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/AEpisode.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -485,7 +485,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extr
|
|||
\******************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AActionButton_vue_vue_type_template_id_3f443389__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AActionButton.vue?vue&type=template&id=3f443389 */ \"./src/components/AActionButton.vue?vue&type=template&id=3f443389\");\n/* harmony import */ var _AActionButton_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AActionButton.vue?vue&type=script&lang=js */ \"./src/components/AActionButton.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AActionButton_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AActionButton_vue_vue_type_template_id_3f443389__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AActionButton.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AActionButton.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AActionButton_vue_vue_type_template_id_3f443389__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AActionButton.vue?vue&type=template&id=3f443389 */ \"./src/components/AActionButton.vue?vue&type=template&id=3f443389\");\n/* harmony import */ var _AActionButton_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AActionButton.vue?vue&type=script&lang=js */ \"./src/components/AActionButton.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AActionButton_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AActionButton_vue_vue_type_template_id_3f443389__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AActionButton.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AActionButton.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -495,7 +495,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AAc
|
|||
\******************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AAutocomplete_vue_vue_type_template_id_32d72269__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AAutocomplete.vue?vue&type=template&id=32d72269 */ \"./src/components/AAutocomplete.vue?vue&type=template&id=32d72269\");\n/* harmony import */ var _AAutocomplete_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AAutocomplete.vue?vue&type=script&lang=js */ \"./src/components/AAutocomplete.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AAutocomplete_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AAutocomplete_vue_vue_type_template_id_32d72269__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AAutocomplete.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AAutocomplete.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AAutocomplete_vue_vue_type_template_id_32d72269__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AAutocomplete.vue?vue&type=template&id=32d72269 */ \"./src/components/AAutocomplete.vue?vue&type=template&id=32d72269\");\n/* harmony import */ var _AAutocomplete_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AAutocomplete.vue?vue&type=script&lang=js */ \"./src/components/AAutocomplete.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AAutocomplete_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AAutocomplete_vue_vue_type_template_id_32d72269__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AAutocomplete.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AAutocomplete.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -505,7 +505,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AAu
|
|||
\**************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ACarousel_vue_vue_type_template_id_b79f173e_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ACarousel.vue?vue&type=template&id=b79f173e&scoped=true */ \"./src/components/ACarousel.vue?vue&type=template&id=b79f173e&scoped=true\");\n/* harmony import */ var _ACarousel_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ACarousel.vue?vue&type=script&lang=js */ \"./src/components/ACarousel.vue?vue&type=script&lang=js\");\n/* harmony import */ var _ACarousel_vue_vue_type_style_index_0_id_b79f173e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ACarousel.vue?vue&type=style&index=0&id=b79f173e&scoped=true&lang=css */ \"./src/components/ACarousel.vue?vue&type=style&index=0&id=b79f173e&scoped=true&lang=css\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_ACarousel_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ACarousel_vue_vue_type_template_id_b79f173e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-b79f173e\"],['__file',\"src/components/ACarousel.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ACarousel.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ACarousel_vue_vue_type_template_id_b79f173e_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ACarousel.vue?vue&type=template&id=b79f173e&scoped=true */ \"./src/components/ACarousel.vue?vue&type=template&id=b79f173e&scoped=true\");\n/* harmony import */ var _ACarousel_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ACarousel.vue?vue&type=script&lang=js */ \"./src/components/ACarousel.vue?vue&type=script&lang=js\");\n/* harmony import */ var _ACarousel_vue_vue_type_style_index_0_id_b79f173e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ACarousel.vue?vue&type=style&index=0&id=b79f173e&scoped=true&lang=css */ \"./src/components/ACarousel.vue?vue&type=style&index=0&id=b79f173e&scoped=true&lang=css\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_ACarousel_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ACarousel_vue_vue_type_template_id_b79f173e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-b79f173e\"],['__file',\"src/components/ACarousel.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ACarousel.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -515,7 +515,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ACa
|
|||
\**************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ADropdown_vue_vue_type_template_id_a87ed2dc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ADropdown.vue?vue&type=template&id=a87ed2dc */ \"./src/components/ADropdown.vue?vue&type=template&id=a87ed2dc\");\n/* harmony import */ var _ADropdown_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ADropdown.vue?vue&type=script&lang=js */ \"./src/components/ADropdown.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ADropdown_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ADropdown_vue_vue_type_template_id_a87ed2dc__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ADropdown.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ADropdown.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ADropdown_vue_vue_type_template_id_a87ed2dc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ADropdown.vue?vue&type=template&id=a87ed2dc */ \"./src/components/ADropdown.vue?vue&type=template&id=a87ed2dc\");\n/* harmony import */ var _ADropdown_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ADropdown.vue?vue&type=script&lang=js */ \"./src/components/ADropdown.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ADropdown_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ADropdown_vue_vue_type_template_id_a87ed2dc__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ADropdown.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ADropdown.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -525,7 +525,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ADr
|
|||
\*************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AEpisode_vue_vue_type_template_id_2e4db98a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AEpisode.vue?vue&type=template&id=2e4db98a */ \"./src/components/AEpisode.vue?vue&type=template&id=2e4db98a\");\n/* harmony import */ var _AEpisode_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AEpisode.vue?vue&type=script&lang=js */ \"./src/components/AEpisode.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AEpisode_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AEpisode_vue_vue_type_template_id_2e4db98a__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AEpisode.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AEpisode.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AEpisode_vue_vue_type_template_id_2e4db98a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AEpisode.vue?vue&type=template&id=2e4db98a */ \"./src/components/AEpisode.vue?vue&type=template&id=2e4db98a\");\n/* harmony import */ var _AEpisode_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AEpisode.vue?vue&type=script&lang=js */ \"./src/components/AEpisode.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AEpisode_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AEpisode_vue_vue_type_template_id_2e4db98a__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AEpisode.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AEpisode.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -535,7 +535,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AEp
|
|||
\**********************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AList_vue_vue_type_template_id_70c3911f__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AList.vue?vue&type=template&id=70c3911f */ \"./src/components/AList.vue?vue&type=template&id=70c3911f\");\n/* harmony import */ var _AList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AList.vue?vue&type=script&lang=js */ \"./src/components/AList.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AList_vue_vue_type_template_id_70c3911f__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AList.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AList.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AList_vue_vue_type_template_id_70c3911f__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AList.vue?vue&type=template&id=70c3911f */ \"./src/components/AList.vue?vue&type=template&id=70c3911f\");\n/* harmony import */ var _AList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AList.vue?vue&type=script&lang=js */ \"./src/components/AList.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AList_vue_vue_type_template_id_70c3911f__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AList.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AList.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -545,7 +545,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ALi
|
|||
\**********************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _APage_vue_vue_type_template_id_53c8e290__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APage.vue?vue&type=template&id=53c8e290 */ \"./src/components/APage.vue?vue&type=template&id=53c8e290\");\n/* harmony import */ var _APage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APage.vue?vue&type=script&lang=js */ \"./src/components/APage.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APage_vue_vue_type_template_id_53c8e290__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APage.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APage.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _APage_vue_vue_type_template_id_53c8e290__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APage.vue?vue&type=template&id=53c8e290 */ \"./src/components/APage.vue?vue&type=template&id=53c8e290\");\n/* harmony import */ var _APage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APage.vue?vue&type=script&lang=js */ \"./src/components/APage.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APage_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APage_vue_vue_type_template_id_53c8e290__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APage.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APage.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -555,7 +555,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _APa
|
|||
\************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ State: function() { return /* reexport safe */ _APlayer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.State; }\n/* harmony export */ });\n/* harmony import */ var _APlayer_vue_vue_type_template_id_1779e8bc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APlayer.vue?vue&type=template&id=1779e8bc */ \"./src/components/APlayer.vue?vue&type=template&id=1779e8bc\");\n/* harmony import */ var _APlayer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APlayer.vue?vue&type=script&lang=js */ \"./src/components/APlayer.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APlayer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APlayer_vue_vue_type_template_id_1779e8bc__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APlayer.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlayer.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ State: function() { return /* reexport safe */ _APlayer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.State; }\n/* harmony export */ });\n/* harmony import */ var _APlayer_vue_vue_type_template_id_1779e8bc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APlayer.vue?vue&type=template&id=1779e8bc */ \"./src/components/APlayer.vue?vue&type=template&id=1779e8bc\");\n/* harmony import */ var _APlayer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APlayer.vue?vue&type=script&lang=js */ \"./src/components/APlayer.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APlayer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APlayer_vue_vue_type_template_id_1779e8bc__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APlayer.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlayer.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -565,7 +565,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|||
\**************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _APlaylist_vue_vue_type_template_id_60410bd3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APlaylist.vue?vue&type=template&id=60410bd3 */ \"./src/components/APlaylist.vue?vue&type=template&id=60410bd3\");\n/* harmony import */ var _APlaylist_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APlaylist.vue?vue&type=script&lang=js */ \"./src/components/APlaylist.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APlaylist_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APlaylist_vue_vue_type_template_id_60410bd3__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APlaylist.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylist.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _APlaylist_vue_vue_type_template_id_60410bd3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APlaylist.vue?vue&type=template&id=60410bd3 */ \"./src/components/APlaylist.vue?vue&type=template&id=60410bd3\");\n/* harmony import */ var _APlaylist_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APlaylist.vue?vue&type=script&lang=js */ \"./src/components/APlaylist.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APlaylist_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APlaylist_vue_vue_type_template_id_60410bd3__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APlaylist.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylist.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -575,7 +575,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _APl
|
|||
\********************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Page: function() { return /* reexport safe */ _APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.Page; }\n/* harmony export */ });\n/* harmony import */ var _APlaylistEditor_vue_vue_type_template_id_6e4f72a0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APlaylistEditor.vue?vue&type=template&id=6e4f72a0 */ \"./src/components/APlaylistEditor.vue?vue&type=template&id=6e4f72a0\");\n/* harmony import */ var _APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APlaylistEditor.vue?vue&type=script&lang=js */ \"./src/components/APlaylistEditor.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APlaylistEditor_vue_vue_type_template_id_6e4f72a0__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APlaylistEditor.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Page: function() { return /* reexport safe */ _APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.Page; }\n/* harmony export */ });\n/* harmony import */ var _APlaylistEditor_vue_vue_type_template_id_6e4f72a0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./APlaylistEditor.vue?vue&type=template&id=6e4f72a0 */ \"./src/components/APlaylistEditor.vue?vue&type=template&id=6e4f72a0\");\n/* harmony import */ var _APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./APlaylistEditor.vue?vue&type=script&lang=js */ \"./src/components/APlaylistEditor.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_APlaylistEditor_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_APlaylistEditor_vue_vue_type_template_id_6e4f72a0__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/APlaylistEditor.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -585,7 +585,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|||
\**************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AProgress_vue_vue_type_template_id_6871a6ae__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AProgress.vue?vue&type=template&id=6871a6ae */ \"./src/components/AProgress.vue?vue&type=template&id=6871a6ae\");\n/* harmony import */ var _AProgress_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AProgress.vue?vue&type=script&lang=js */ \"./src/components/AProgress.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AProgress_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AProgress_vue_vue_type_template_id_6871a6ae__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AProgress.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AProgress.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AProgress_vue_vue_type_template_id_6871a6ae__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AProgress.vue?vue&type=template&id=6871a6ae */ \"./src/components/AProgress.vue?vue&type=template&id=6871a6ae\");\n/* harmony import */ var _AProgress_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AProgress.vue?vue&type=script&lang=js */ \"./src/components/AProgress.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AProgress_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AProgress_vue_vue_type_template_id_6871a6ae__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AProgress.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AProgress.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -595,7 +595,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _APr
|
|||
\*********************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ARow_vue_vue_type_template_id_2f72fd2e__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ARow.vue?vue&type=template&id=2f72fd2e */ \"./src/components/ARow.vue?vue&type=template&id=2f72fd2e\");\n/* harmony import */ var _ARow_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ARow.vue?vue&type=script&lang=js */ \"./src/components/ARow.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ARow_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ARow_vue_vue_type_template_id_2f72fd2e__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ARow.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARow.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ARow_vue_vue_type_template_id_2f72fd2e__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ARow.vue?vue&type=template&id=2f72fd2e */ \"./src/components/ARow.vue?vue&type=template&id=2f72fd2e\");\n/* harmony import */ var _ARow_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ARow.vue?vue&type=script&lang=js */ \"./src/components/ARow.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ARow_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ARow_vue_vue_type_template_id_2f72fd2e__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ARow.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARow.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -605,7 +605,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ARo
|
|||
\**********************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ARows_vue_vue_type_template_id_24354cda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ARows.vue?vue&type=template&id=24354cda */ \"./src/components/ARows.vue?vue&type=template&id=24354cda\");\n/* harmony import */ var _ARows_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ARows.vue?vue&type=script&lang=js */ \"./src/components/ARows.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ARows_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ARows_vue_vue_type_template_id_24354cda__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ARows.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ARows_vue_vue_type_template_id_24354cda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ARows.vue?vue&type=template&id=24354cda */ \"./src/components/ARows.vue?vue&type=template&id=24354cda\");\n/* harmony import */ var _ARows_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ARows.vue?vue&type=script&lang=js */ \"./src/components/ARows.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ARows_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ARows_vue_vue_type_template_id_24354cda__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ARows.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -615,7 +615,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ARo
|
|||
\***************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ASoundItem_vue_vue_type_template_id_2d901711__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ASoundItem.vue?vue&type=template&id=2d901711 */ \"./src/components/ASoundItem.vue?vue&type=template&id=2d901711\");\n/* harmony import */ var _ASoundItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ASoundItem.vue?vue&type=script&lang=js */ \"./src/components/ASoundItem.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ASoundItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ASoundItem_vue_vue_type_template_id_2d901711__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ASoundItem.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ASoundItem.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ASoundItem_vue_vue_type_template_id_2d901711__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ASoundItem.vue?vue&type=template&id=2d901711 */ \"./src/components/ASoundItem.vue?vue&type=template&id=2d901711\");\n/* harmony import */ var _ASoundItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ASoundItem.vue?vue&type=script&lang=js */ \"./src/components/ASoundItem.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ASoundItem_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ASoundItem_vue_vue_type_template_id_2d901711__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ASoundItem.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ASoundItem.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -625,7 +625,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ASo
|
|||
\****************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AStatistics_vue_vue_type_template_id_214a9738__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AStatistics.vue?vue&type=template&id=214a9738 */ \"./src/components/AStatistics.vue?vue&type=template&id=214a9738\");\n/* harmony import */ var _AStatistics_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AStatistics.vue?vue&type=script&lang=js */ \"./src/components/AStatistics.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AStatistics_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AStatistics_vue_vue_type_template_id_214a9738__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AStatistics.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AStatistics.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AStatistics_vue_vue_type_template_id_214a9738__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AStatistics.vue?vue&type=template&id=214a9738 */ \"./src/components/AStatistics.vue?vue&type=template&id=214a9738\");\n/* harmony import */ var _AStatistics_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AStatistics.vue?vue&type=script&lang=js */ \"./src/components/AStatistics.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AStatistics_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AStatistics_vue_vue_type_template_id_214a9738__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AStatistics.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AStatistics.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -635,7 +635,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ASt
|
|||
\**************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AStreamer_vue_vue_type_template_id_06ef60ae__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AStreamer.vue?vue&type=template&id=06ef60ae */ \"./src/components/AStreamer.vue?vue&type=template&id=06ef60ae\");\n/* harmony import */ var _AStreamer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AStreamer.vue?vue&type=script&lang=js */ \"./src/components/AStreamer.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AStreamer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AStreamer_vue_vue_type_template_id_06ef60ae__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AStreamer.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AStreamer.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AStreamer_vue_vue_type_template_id_06ef60ae__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AStreamer.vue?vue&type=template&id=06ef60ae */ \"./src/components/AStreamer.vue?vue&type=template&id=06ef60ae\");\n/* harmony import */ var _AStreamer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AStreamer.vue?vue&type=script&lang=js */ \"./src/components/AStreamer.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_AStreamer_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_AStreamer_vue_vue_type_template_id_06ef60ae__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/AStreamer.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/AStreamer.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
@ -645,7 +645,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ASt
|
|||
\************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ASwitch_vue_vue_type_template_id_62a3c675__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ASwitch.vue?vue&type=template&id=62a3c675 */ \"./src/components/ASwitch.vue?vue&type=template&id=62a3c675\");\n/* harmony import */ var _ASwitch_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ASwitch.vue?vue&type=script&lang=js */ \"./src/components/ASwitch.vue?vue&type=script&lang=js\");\n/* harmony import */ var _home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_home_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ASwitch_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ASwitch_vue_vue_type_template_id_62a3c675__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ASwitch.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ASwitch.vue?");
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ASwitch_vue_vue_type_template_id_62a3c675__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ASwitch.vue?vue&type=template&id=62a3c675 */ \"./src/components/ASwitch.vue?vue&type=template&id=62a3c675\");\n/* harmony import */ var _ASwitch_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ASwitch.vue?vue&type=script&lang=js */ \"./src/components/ASwitch.vue?vue&type=script&lang=js\");\n/* harmony import */ var _media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\nconst __exports__ = /*#__PURE__*/(0,_media_data_code_projets_aircox_assets_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_ASwitch_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_ASwitch_vue_vue_type_template_id_62a3c675__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/components/ASwitch.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ASwitch.vue?");
|
||||
|
||||
/***/ }),
|
||||
|
||||
|
|
29
aircox/static/aircox/js/ckeditor-init.js
Normal file
29
aircox/static/aircox/js/ckeditor-init.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* global CKEDITOR, django */
|
||||
/* Modified in order to be manually loaded after vue.js */
|
||||
|
||||
function initialiseCKEditor() {
|
||||
var textareas = Array.prototype.slice.call(
|
||||
document.querySelectorAll("textarea[data-type=ckeditortype]"),
|
||||
)
|
||||
for (var i = 0; i < textareas.length; ++i) {
|
||||
var t = textareas[i]
|
||||
if (
|
||||
t.getAttribute("data-processed") == "0" &&
|
||||
t.id.indexOf("__prefix__") == -1
|
||||
) {
|
||||
t.setAttribute("data-processed", "1")
|
||||
var ext = JSON.parse(t.getAttribute("data-external-plugin-resources"))
|
||||
for (var j = 0; j < ext.length; ++j) {
|
||||
CKEDITOR.plugins.addExternal(ext[j][0], ext[j][1], ext[j][2])
|
||||
}
|
||||
CKEDITOR.replace(t.id, JSON.parse(t.getAttribute("data-config")))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function initialiseCKEditorInInlinedForms() {
|
||||
if (typeof django === "object" && django.jQuery) {
|
||||
django.jQuery(document).on("formset:added", initialiseCKEditor)
|
||||
}
|
||||
}
|
||||
//})()
|
34
aircox/templates/accounts/profile.html
Normal file
34
aircox/templates/accounts/profile.html
Normal file
|
@ -0,0 +1,34 @@
|
|||
{% extends "aircox/base.html" %}
|
||||
{% load i18n aircox %}
|
||||
|
||||
{% block head_title %}
|
||||
{% block title %}{{ user.username }}{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content-container %}
|
||||
<div class="container content page-content">
|
||||
<h2 class="subtitle">Mon Profil</h2>
|
||||
{% translate "Username" %} : {{ user.username|title }}<br/>
|
||||
<!-- Connexion: {{ user.last_login }} -->
|
||||
|
||||
<h2 class="subtitle is-1">Mes émissions</h2>
|
||||
{% if programs|length %}
|
||||
<ul>
|
||||
{% for p in programs %}
|
||||
<li>{{ p.title }} :
|
||||
|
||||
<a href="{% url 'program-detail' slug=p.slug %}">
|
||||
<span title="{% translate 'View' %} {{ page }}">{% translate 'View' %}</span>
|
||||
</a>
|
||||
|
||||
<a href="{% url 'program-edit' pk=p.pk %}">
|
||||
<span title="{% translate 'Edit' %} {{ page }}">{% translate 'Edit' %} </span>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
{% trans 'You are not listed as a program editor yet' %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -12,11 +12,10 @@
|
|||
:init-data="{% track_inline_data formset=formset %}"
|
||||
settings-url="{% url "api:user-settings" %}"
|
||||
data-prefix="{{ formset.prefix }}-">
|
||||
{% comment %}
|
||||
<template #title>
|
||||
<h5 class="title is-4">{% trans "Playlist" %}</h5>
|
||||
</template>
|
||||
<template v-slot:top="{items}">
|
||||
<template #top="{items}">
|
||||
<input type="hidden" name="{{ formset.prefix }}-TOTAL_FORMS"
|
||||
:value="items.length || 0"/>
|
||||
<input type="hidden" name="{{ formset.prefix }}-INITIAL_FORMS"
|
||||
|
@ -80,7 +79,6 @@
|
|||
</template>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endcomment %}
|
||||
</a-playlist-editor>
|
||||
</div>
|
||||
{% endwith %}
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<span>{% translate "Today" %}</span>
|
||||
</h1>
|
||||
{% if diffusions %}
|
||||
<div class="card-grid">
|
||||
<div class="grid-3">
|
||||
{% for obj in diffusions %}
|
||||
{% page_widget "card" obj.episode diffusion=obj timetable=True admin=True tag_class="" %}
|
||||
{% endfor %}
|
||||
|
|
|
@ -1,30 +1,2 @@
|
|||
{% extends "aircox/page_detail.html" %}
|
||||
{% comment %}Detail page for regular articles{% endcomment %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block sidebar %}
|
||||
{{ block.super }}
|
||||
|
||||
{% if sidebar_object_list %}
|
||||
<section>
|
||||
{% comment %}Translators: in page detail sidebar{% endcomment %}
|
||||
<h4 class="title is-4">{% translate "Latest news" %}</h4>
|
||||
|
||||
{% for object in sidebar_object_list %}
|
||||
{% include "aircox/widgets/page_item.html" %}
|
||||
{% endfor %}
|
||||
|
||||
<br>
|
||||
<nav class="pagination is-centered">
|
||||
<ul class="pagination-list">
|
||||
<li>
|
||||
<a href="{% url "article-list" %}" class="pagination-link"
|
||||
aria-label="{% translate "Show all news" %}">
|
||||
{% translate "More news" %}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
{% load static i18n thumbnail aircox %}<!doctype html>
|
||||
{% comment %}
|
||||
Base website template. It displays various elements depending on context
|
||||
variables.
|
||||
|
@ -10,8 +11,6 @@ Usefull context:
|
|||
- sidebar_url_name: url name sidebar item complete list
|
||||
- sidebar_url_parent: parent page for sidebar items complete list
|
||||
{% endcomment %}
|
||||
{% load static i18n thumbnail aircox %}
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
@ -49,7 +48,7 @@ Usefull context:
|
|||
})
|
||||
</script>
|
||||
<div id="app">
|
||||
<div class="container navs">
|
||||
<div class="navs">
|
||||
{% block nav %}
|
||||
<nav class="nav primary" role="navigation" aria-label="main navigation">
|
||||
{% block nav-primary %}
|
||||
|
@ -71,12 +70,21 @@ Usefull context:
|
|||
{% translate "Admin" %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user.is_authenticated %}
|
||||
<a class="nav-item" href="{% url "profile" %}" target="new">
|
||||
{% translate "Profile" %}
|
||||
</a>
|
||||
<a class="nav-item" href="{% url 'logout' %}">
|
||||
<i title="{% translate 'disconnect' %}" class="fa fa-power-off"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block secondary-nav %}{% endblock %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% block main-container %}
|
||||
|
@ -90,21 +98,26 @@ Usefull context:
|
|||
{% endblock %}
|
||||
{% endspaceless %}
|
||||
|
||||
|
||||
|
||||
{% block header-container %}
|
||||
{% if page or cover or title %}
|
||||
<header class="container header preview preview-header {% if cover %}has-cover{% endif %}">
|
||||
{% block header %}
|
||||
{% if cover %}
|
||||
<img src="{{ cover }}" class="header-cover">
|
||||
<figure class="header-cover">
|
||||
<img src="{{ cover }}" class="cover">
|
||||
</figure>
|
||||
{% endif %}
|
||||
<div class="headings preview-card-headings">
|
||||
{% block headings %}
|
||||
<div>
|
||||
<h1 class="heading title is-1 {% block title-class %}{% endblock %}">{% block title %}{{ title|default:"" }}{% endblock %}</h1>
|
||||
<h1 class="title is-1 {% block title-class %}{% endblock %}">{% block title %}{{ title|default:"" }}{% endblock %}</h1>
|
||||
{% include "aircox/edit-link.html" %}
|
||||
</div>
|
||||
<div>
|
||||
{% spaceless %}
|
||||
<span class="heading subtitle is-2">
|
||||
<span class="subtitle is-2">
|
||||
{% block subtitle %}
|
||||
{% if subtitle %}
|
||||
{{ subtitle }}
|
||||
|
@ -123,11 +136,11 @@ Usefull context:
|
|||
|
||||
{% block content-container %}
|
||||
{% if page and page.content %}
|
||||
<div class="container content page-content">
|
||||
<section class="container content page-content">
|
||||
{% block content %}
|
||||
{{ page.content|safe }}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
{{ block.super }}
|
||||
|
||||
{% block list-container %}
|
||||
<section class="container clear-both" role="list">
|
||||
<section class="container clear-both list list-grid {{ list_class|default:"" }}" role="list">
|
||||
{% block list %}
|
||||
{% with has_headline=True %}
|
||||
{% for object in object_list %}
|
||||
|
@ -39,16 +39,20 @@
|
|||
<ul class="urls">
|
||||
{% if page_obj.has_previous %}
|
||||
{% comment %}Translators: Bottom of the list, "previous page"{% endcomment %}
|
||||
<a href="?{{ GET }}&page={{ page_obj.previous_page_number }}" class="left button"
|
||||
<a href="?{{ GET }}&page={{ page_obj.previous_page_number }}" class="left"
|
||||
title="{% translate "Previous" %}"
|
||||
aria-label="{% translate "Previous" %}">
|
||||
<span class="icon"><i class="fa fa-chevron-left"></i></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<span>
|
||||
{{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
|
||||
</span>
|
||||
|
||||
{% if page_obj.has_next %}
|
||||
{% comment %}Translators: Bottom of the list, "Nextpage"{% endcomment %}
|
||||
<a href="?{{ GET }}&page={{ page_obj.next_page_number }}" class="right button"
|
||||
<a href="?{{ GET }}&page={{ page_obj.next_page_number }}" class="right"
|
||||
title="{% translate "Next" %}"
|
||||
aria-label="{% translate "Next" %}">
|
||||
<span class="icon"><i class="fa fa-chevron-right"></i></span>
|
||||
|
|
20
aircox/templates/aircox/edit-link.html
Normal file
20
aircox/templates/aircox/edit-link.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{% load aircox i18n %}
|
||||
{% block user-actions-container %}
|
||||
{% has_perm page page.program.change_permission_codename simple=True as can_edit %}
|
||||
{% if user.is_authenticated and can_edit %}
|
||||
{% with request.resolver_match.view_name as view_name %}
|
||||
|
||||
{% if view_name in 'program-edit,bla' %}
|
||||
<!--
|
||||
<a href="{% url 'program-detail' page.slug %}" target="_self">
|
||||
<span title="{% translate 'View' %} {{ page }}">{% translate 'View' %} 👁 </span>
|
||||
</a>
|
||||
-->
|
||||
{% else %}
|
||||
<a href="{% url view_name|edit_view page.pk %}" target="_self">
|
||||
<span title="{% translate 'Edit' %} {{ page }}">{% translate 'Edit' %} 🖉 </span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
|
||||
{% block content-container %}
|
||||
{{ block.container }}
|
||||
|
||||
<a-episode :page="{title: "{{ page.title }}", podcasts: {{ object.podcasts|json }}}">
|
||||
<template v-slot="{podcasts,page}">
|
||||
|
@ -13,7 +12,7 @@
|
|||
{% if object.podcasts %}
|
||||
{% spaceless %}
|
||||
<section class="container no-border">
|
||||
<h3 class="title is-3">{% translate "Podcasts" %}</h3>
|
||||
<h3 class="title">{% translate "Podcasts" %}</h3>
|
||||
<a-playlist v-if="page" :set="podcasts"
|
||||
name="{{ page.title }}"
|
||||
list-class="menu-list" item-class="menu-item"
|
||||
|
@ -26,7 +25,7 @@
|
|||
|
||||
{% if tracks %}
|
||||
<section class="container">
|
||||
<h3 class="title is-3">{% translate "Playlist" %}</h3>
|
||||
<h3 class="title">{% translate "Playlist" %}</h3>
|
||||
<table class="table is-hoverable is-fullwidth">
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -48,8 +47,6 @@
|
|||
</table>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
|
||||
</template>
|
||||
</a-episode>
|
||||
{% endblock %}
|
||||
|
|
37
aircox/templates/aircox/episode_form.html
Normal file
37
aircox/templates/aircox/episode_form.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
{% extends "aircox/basepage_detail.html" %}
|
||||
{% load static i18n humanize honeypot aircox %}
|
||||
|
||||
{% block head_extra %}
|
||||
<script type="text/javascript" src="{% static "aircox/js/admin.js" %}"></script>
|
||||
<script type="text/javascript" src="{% static "aircox/js/ckeditor-init.js" %}"></script>
|
||||
<!-- <script type="text/javascript" src="{% static "ckeditor/ckeditor-init.js" %}"></script> -->
|
||||
<script type="text/javascript" src="{% static "ckeditor/ckeditor/ckeditor.js" %}"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block init-scripts %}
|
||||
aircox.init(null, {hotReload:false, initPlayer:false, initApp:true})
|
||||
initialiseCKEditor()
|
||||
initialiseCKEditorInInlinedForms()
|
||||
{% endblock %}
|
||||
|
||||
{% block comments %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content-container %}
|
||||
<section class="container">
|
||||
<form method="post" enctype="multipart/form-data">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
{% render_honeypot_field "website" %}
|
||||
|
||||
</table>
|
||||
<br/>
|
||||
<input type="submit" value="Update" class="button is-success">
|
||||
|
||||
{% include "aircox/playlist_inline.html" %}
|
||||
|
||||
<input type="submit" value="Update" class="button is-success">
|
||||
</form>
|
||||
|
||||
</section>
|
||||
{% endblock %}
|
|
@ -18,7 +18,7 @@
|
|||
{% endblock %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
{% block content-container %}
|
||||
<article class="message is-danger">
|
||||
<div class="message-header">
|
||||
<p>{% block error_title %}{% trans "An error occurred" %}{% endblock %}</p>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
{% if next_diffs %}
|
||||
<section class="container">
|
||||
<h2 class="title is-3 p-2">
|
||||
<h2 class="title">
|
||||
{% with station.name as station %}
|
||||
{% blocktrans %}Today on {{ station }}{% endblocktrans %}
|
||||
{% endwith %}
|
||||
|
@ -25,6 +25,8 @@
|
|||
{% endwith %}
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<a-carousel section-class="card-grid">
|
||||
{% for obj in next_diffs|slice:"1:" %}
|
||||
{% if object != diffusion %}
|
||||
|
@ -37,10 +39,11 @@
|
|||
|
||||
{% if logs %}
|
||||
<section class="container">
|
||||
<h2 class="title is-3 p-2">{% translate "It just happened" %}</h2>
|
||||
{% for object in logs %}
|
||||
{% include "./widgets/log.html" with widget="item" %}
|
||||
{% endfor %}
|
||||
<h2 class="title">{% translate "It just happened" %}</h2>
|
||||
|
||||
<div class="list-grid" role="list">
|
||||
{% include "./widgets/logs.html" with object_list=logs %}
|
||||
</div>
|
||||
|
||||
<nav class="nav-urls">
|
||||
<a href="{% url "timetable-list" %}"
|
||||
|
@ -61,7 +64,7 @@
|
|||
|
||||
{% if publications %}
|
||||
<section class="container">
|
||||
<h2 class="title is-3 p-2">{% translate "Last publications" %}</h2>
|
||||
<h2 class="title">{% translate "Last publications" %}</h2>
|
||||
{% include "./widgets/carousel.html" with objects=publications url_name="page-list" url_label=_("All publications") %}
|
||||
</section>
|
||||
{% endif %}
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
{% extends "aircox/page_list.html" %}
|
||||
{% comment %}List of logs for a specific date{% endcomment %}
|
||||
{% load i18n humanize aircox %}
|
||||
|
||||
{% block title %}
|
||||
{% if not page or not page.title %}
|
||||
{% with station.name as station %}
|
||||
{% blocktranslate %}That happened on {{ station }}{% endblocktranslate %}
|
||||
{% endwith %}
|
||||
{% else %}
|
||||
{{ block.super }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block subtitle %}{{ date|date:"l d F Y" }}{% endblock %}
|
||||
|
||||
|
||||
{% block secondary-nav %}
|
||||
<nav class="nav secondary">
|
||||
{% include "./widgets/dates_menu.html" with url_name="log-list" %}
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block pages_list_ %}
|
||||
<section>
|
||||
{# <h4 class="subtitle size-4">{{ date }}</h4> #}
|
||||
{% include "aircox/widgets/log_list.html" %}
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
{% block pages_list %}
|
||||
{% with hide_schedule=True %}
|
||||
<section role="list" class="list">
|
||||
{% for object in object_list %}
|
||||
{% if object.episode %}
|
||||
{% page_widget "item" object.episode diffusion=object timetable=True %}
|
||||
{% else %}
|
||||
{% page_widget "item" object timetable=True %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% endwith %}
|
||||
{% endblock %}
|
|
@ -10,21 +10,6 @@ Context:
|
|||
- related_url: url to the full list of related_objects
|
||||
{% endcomment %}
|
||||
|
||||
{% block top-nav-tools %}
|
||||
{% has_perm page "change" as can_edit %}
|
||||
{% if can_edit %}
|
||||
<a class="navbar-item" href="{{ page|admin_url:'change' }}"
|
||||
target="new">
|
||||
<span class="icon is-small">
|
||||
<i class="fa fa-pen"></i>
|
||||
</span>
|
||||
<span>{% translate "Edit" %}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
{% block breadcrumbs %}
|
||||
{% if parent %}
|
||||
{% include "./widgets/breadcrumbs.html" with page=parent %}
|
||||
|
@ -46,10 +31,11 @@ Context:
|
|||
{% if related_objects %}
|
||||
<section class="container">
|
||||
{% with models=object|verbose_name:True %}
|
||||
<h3 class="title is-3">{% blocktranslate %}Related {{models}}{% endblocktranslate %}</h3>
|
||||
<h3 class="title">{% blocktranslate %}Related {{models}}{% endblocktranslate %}</h3>
|
||||
|
||||
{% include "./widgets/carousel.html" with objects=related_objects url_name=object.list_url_name url_category=object.category %}
|
||||
{% endwith %}
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
|
@ -59,9 +45,7 @@ Context:
|
|||
<h2 class="title">{% translate "Comments" %}</h2>
|
||||
|
||||
{% for object in comments %}
|
||||
<div id="comment-{{ object.pk }}">
|
||||
{% page_widget "item" object %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% endif %}
|
||||
|
|
70
aircox/templates/aircox/playlist_inline.html
Normal file
70
aircox/templates/aircox/playlist_inline.html
Normal file
|
@ -0,0 +1,70 @@
|
|||
{% comment %}Inline block to edit playlists{% endcomment %}
|
||||
{% load aircox aircox_admin static i18n %}
|
||||
|
||||
<div id="inline-tracks" class="box mb-5">
|
||||
{{ formset.non_form_errors }}
|
||||
<!-- formset.management_form -->
|
||||
|
||||
<a-playlist-editor
|
||||
:labels="{% track_inline_labels %}"
|
||||
:init-data="{% track_inline_data formset=formset %}"
|
||||
settings-url="{% url "api:user-settings" %}"
|
||||
data-prefix="{{ formset.prefix }}-">
|
||||
<template #title>
|
||||
<h5 class="title is-4">{% trans "Playlist" %}</h5>
|
||||
</template>
|
||||
<template #top="{items}">
|
||||
<input type="hidden" name="{{ formset.prefix }}-TOTAL_FORMS"
|
||||
:value="items.length || 0"/>
|
||||
<input type="hidden" name="{{ formset.prefix }}-INITIAL_FORMS"
|
||||
value="{{ formset.initial_form_count }}"/>
|
||||
<input type="hidden" name="{{ formset.prefix }}-MIN_NUM_FORMS"
|
||||
value="{{ formset.min_num }}"/>
|
||||
<input type="hidden" name="{{ formset.prefix }}-MAX_NUM_FORMS"
|
||||
value="{{ formset.max_num }}"/>
|
||||
</template>
|
||||
<template #rows-header-head>
|
||||
<th style="max-width:2em" title="{% trans "Track Position" %}"
|
||||
aria-description="{% trans "Track Position" %}">
|
||||
<span class="icon">
|
||||
<i class="fa fa-arrow-down-1-9"></i>
|
||||
</span>
|
||||
</th>
|
||||
</template>
|
||||
<template v-slot:row-head="{item,row}">
|
||||
<td>
|
||||
[[ row+1 ]]
|
||||
<input type="hidden"
|
||||
:name="'{{ formset.prefix }}-' + row + '-position'"
|
||||
:value="row"/>
|
||||
<input t-if="item.data.id" type="hidden"
|
||||
:name="'{{ formset.prefix }}-' + row + '-id'"
|
||||
:value="item.data.id || item.id"/>
|
||||
|
||||
{% for field in fields %}
|
||||
{% if field != 'position' %}
|
||||
<input type="hidden"
|
||||
:name="'{{ formset.prefix }}-' + row + '-{{ field.name }}'"
|
||||
v-model="item.data[attr]"/>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</template>
|
||||
{% for field in fields %}
|
||||
<template v-slot:row-{{ field }}="{item,cell,value,attr,emit}">
|
||||
<div class="field">
|
||||
<a-autocomplete
|
||||
:input-class="['input', item.error(attr) ? 'is-danger' : 'half-field']"
|
||||
url="{% url 'api:track-autocomplete' %}?{{ field }}=${query}&field={{ field }}"
|
||||
:name="'{{ formset.prefix }}-' + cell.row + '-{{ field }}'"
|
||||
v-model="item.data[attr]"
|
||||
title="{{ field }}"
|
||||
@change="emit('change', col)"/>
|
||||
<p v-for="error in item.error(attr)" class="help is-danger">
|
||||
[[ error ]] !
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
{% endfor %}
|
||||
</a-playlist-editor>
|
||||
</div>
|
|
@ -2,10 +2,22 @@
|
|||
{% comment %}Detail page of a show{% endcomment %}
|
||||
{% load i18n aircox %}
|
||||
|
||||
{% block top-nav-tools %}
|
||||
{% has_perm page page.change_permission_codename simple=True as can_edit %}
|
||||
{% if can_edit %}
|
||||
<a class="navbar-item" href="{% url 'program-edit' page.pk %}" target="_self">
|
||||
<span class="icon is-small">
|
||||
<i class="fa fa-pen"></i>
|
||||
</span>
|
||||
<span>{% translate "Edit" %}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content-container %}
|
||||
{% with schedules=program.schedule_set.all %}
|
||||
{% if schedules %}
|
||||
<section class="container schedules">
|
||||
<header class="container schedules">
|
||||
{% for schedule in schedules %}
|
||||
<div class="schedule">
|
||||
<div class="heading">
|
||||
|
@ -29,7 +41,7 @@
|
|||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</section>
|
||||
</header>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
|
||||
|
@ -37,7 +49,7 @@
|
|||
|
||||
{% if episodes %}
|
||||
<section class="container">
|
||||
<h3 class="title is-3">{% translate "Last Episodes" %}</h3>
|
||||
<h3 class="title">{% translate "Last Episodes" %}</h3>
|
||||
{% include "./widgets/carousel.html" with objects=episodes url_name="episode-list" url_parent=object url_label=_("All episodes") %}
|
||||
</section>
|
||||
{% endif %}
|
||||
|
@ -45,7 +57,7 @@
|
|||
|
||||
{% if articles %}
|
||||
<section class="container">
|
||||
<h3 class="title is-3">{% translate "Last Articles" %}</h3>
|
||||
<h3 class="title">{% translate "Last Articles" %}</h3>
|
||||
{% include "./widgets/carousel.html" with objects=articles url_name="article-list" url_parent=object url_label=_("All articles") %}
|
||||
</section>
|
||||
{% endif %}
|
||||
|
|
28
aircox/templates/aircox/program_form.html
Normal file
28
aircox/templates/aircox/program_form.html
Normal file
|
@ -0,0 +1,28 @@
|
|||
{% extends "aircox/page_detail.html" %}
|
||||
{% load static i18n humanize honeypot aircox %}
|
||||
|
||||
|
||||
{% block head_extra %}
|
||||
{{ form.media }}
|
||||
{% endblock %}
|
||||
|
||||
{% block init-scripts %}
|
||||
{% endblock %}
|
||||
|
||||
{% block comments %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content-container %}
|
||||
<section class="container">
|
||||
<div>
|
||||
<form method="post" enctype="multipart/form-data">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
{% render_honeypot_field "website" %}
|
||||
</table>
|
||||
<br/>
|
||||
<input type="submit" value="Update" class="button is-success">
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
|
@ -16,12 +16,13 @@
|
|||
<a href="{% url "timetable-list" date=date %}">{{ date|date:"l d F Y" }}</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block list %}
|
||||
{% for object in object_list %}
|
||||
{% if object.episode %}
|
||||
{% page_widget "item" object.episode diffusion=object timetable=True %}
|
||||
{% else %}
|
||||
{% page_widget "item" object timetable=True %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% block list-container %}
|
||||
{% with list_class="list-grid" %}
|
||||
{{ block.super }}
|
||||
{% endwith %}
|
||||
{% endblock %}
|
||||
|
||||
{% block list %}
|
||||
{% include "./widgets/logs.html" with object_list=object_list timetable=True %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -2,18 +2,22 @@
|
|||
{% load i18n %}
|
||||
|
||||
{% block tag-class %}{{ block.super }} preview-card{% endblock %}
|
||||
{% block tag-extra %}
|
||||
{{ block.super }}
|
||||
{% if cover %}
|
||||
style="background-image: url({{ cover }});"
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% block headings-class %}{{ block.super }} preview-card-headings{% endblock %}
|
||||
|
||||
|
||||
{% block inner %}
|
||||
{% block headings-container %}
|
||||
{{ block.super }}
|
||||
{% block actions-container %}{{ block.super }}{% endblock %}
|
||||
{% endblock %}
|
||||
<div class="card-content">
|
||||
{% if cover %}
|
||||
{% if url %}<a href="{{ url }}">{% endif %}
|
||||
<figure style="background-image: url({{ cover }});" class="preview-cover">
|
||||
<img src="{{ cover }}" class="hide">
|
||||
</figure>
|
||||
{% if url %}</a>{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<footer class="actions">
|
||||
{% block actions %}{{ block.super }}{% endblock %}
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
{% block headings-container %}{{ block.super }}{% endblock %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -2,17 +2,18 @@
|
|||
{% load i18n humanize aircox %}
|
||||
|
||||
{% block tag-class %}{{ block.super }} comment{% endblock %}
|
||||
{% block tag-extra %} id="comment-{{ object.pk }}"{% endblock %}
|
||||
|
||||
{% block outer %}
|
||||
{% with url=object.get_absolute_url %}
|
||||
{% if with_title %}
|
||||
{% with url=object.get_absolute_url %}
|
||||
{{ block.super }}
|
||||
{{ block.super }}
|
||||
{% endwith %}
|
||||
{% else %}
|
||||
{{ block.super }}
|
||||
{{ block.super }}
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
|
|
@ -25,12 +25,31 @@
|
|||
{% endblock %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
{% if not object.content %}
|
||||
{% with object.parent.content as content %}
|
||||
{{ block.super }}
|
||||
{% endwith %}
|
||||
{% else %}
|
||||
{{ block.super }}
|
||||
{% block actions %}
|
||||
{% if object.sound_set.public.count %}
|
||||
<button class="button" @click="player.playButtonClick($event)"
|
||||
data-sounds="{{ object.podcasts|json }}">
|
||||
<span class="icon is-small">
|
||||
<span class="fas fa-play"></span>
|
||||
</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block actions %}
|
||||
{% has_perm page object.program.change_permission_codename simple=True as can_edit %}
|
||||
{% if can_edit %}
|
||||
<a class="button" href="{% url 'episode-edit' object.pk %}" target="_self">
|
||||
<span class="icon is-small"><i class="fas fa-pen" alt="{% trans 'edit' %}"></i></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if object.sound_set.public.count %}
|
||||
<button class="button" @click="player.playButtonClick($event)"
|
||||
data-sounds="{{ object.podcasts|json }}">
|
||||
<span class="icon is-small">
|
||||
<span class="fas fa-play"></span>
|
||||
</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
style="background-image: url({{ object.cover.url }})">
|
||||
</a>
|
||||
{% endif %}
|
||||
<div class="media-content">
|
||||
<section class="content">
|
||||
<div class="media-content flex-column">
|
||||
<section class="content flex-grow-1">
|
||||
{% block content %}
|
||||
{% if content and with_content %}
|
||||
{% autoescape off %}
|
||||
|
@ -32,11 +32,11 @@
|
|||
{% endif %}
|
||||
{% endblock %}
|
||||
</section>
|
||||
|
||||
{% block actions-container %}
|
||||
{{ block.super }}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -8,13 +8,16 @@ Context objects:
|
|||
|
||||
In case of modification, you might want to check on `assets/vue/player.vue`
|
||||
for design review.
|
||||
|
||||
{% endcomment %}
|
||||
|
||||
{% block outer %}
|
||||
{% if object|is_diffusion %}
|
||||
{% page_widget widget object.episode diffusion=object %}
|
||||
{% page_widget widget object.episode diffusion=object timetable=timetable|default:False %}
|
||||
{% elif object|is_log %}
|
||||
{% include "./track_item.html" with object=object.track log=object timetable=timetable|default:False %}
|
||||
{% else %}
|
||||
{% include "./track_item.html" with object=object.track log=object %}
|
||||
{% for obj in object %}
|
||||
{% include "./track_item.html" with object=obj.track log=obj timetable=timetable|default:False %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
35
aircox/templates/aircox/widgets/logs.html
Normal file
35
aircox/templates/aircox/widgets/logs.html
Normal file
|
@ -0,0 +1,35 @@
|
|||
{% comment %}
|
||||
Context:
|
||||
- object_list: list of logs
|
||||
- timetable: defaults to False
|
||||
- widget: defaults to "item"
|
||||
{% endcomment %}
|
||||
{% load aircox %}
|
||||
|
||||
{% with timetable|default:False as timetable %}
|
||||
{% with widget|default:"item" as widget %}
|
||||
{% for object in object_list %}
|
||||
{% if object.episode %}
|
||||
{% page_widget widget object.episode diffusion=object timetable=True %}
|
||||
{% elif object|is_log %}
|
||||
{% include "./track_item.html" with object=object.track log=object timetable=True %}
|
||||
{% else %}
|
||||
<div class="preview list-item logs">
|
||||
<header class="headings">
|
||||
<span class="heading title">
|
||||
<span class="icon pr-2">
|
||||
<i class="fas fa-music"></i>
|
||||
</span>
|
||||
{{ station.music_stream_title }}
|
||||
</span>
|
||||
</header>
|
||||
<div class="media d-block content">
|
||||
{% for obj in object %}
|
||||
{% include "./track_item.html" with object=obj.track log=obj timetable=True %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endwith %}
|
||||
{% endwith %}
|
|
@ -34,3 +34,10 @@
|
|||
{{ object.display_headline }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block actions %}
|
||||
{% if url and "card" not in widget_template %}
|
||||
<a href="{{ url }}">{% translate "Show" %}</a>
|
||||
{% endif %}
|
||||
{{ block.super }}
|
||||
{% endblock %}
|
||||
|
|
|
@ -30,7 +30,9 @@ The audio player
|
|||
</h4>
|
||||
<h4 v-else-if="current && current.data.type == 'track'"
|
||||
class="title" aria-description="{% translate "Track currently on air" %}">
|
||||
<span class="has-text-info is-size-3 mr-3">♬</span>
|
||||
<span class="icon hg-color-2 mr-3">
|
||||
<i class="fas fa-music"></i>
|
||||
</span>
|
||||
<span>[[ current.data.title ]]</span>
|
||||
<span class="has-text-grey-dark has-text-weight-light">
|
||||
— [[ current.data.artist ]]
|
||||
|
|
|
@ -23,12 +23,16 @@ Styling related context:
|
|||
{% block headings-container %}
|
||||
<header class="headings{% block headings-class %}{% endblock %}"{% block headings-tag-extra %}{% endblock %}>
|
||||
{% block headings %}
|
||||
<div>
|
||||
<a href="{{ url|escape }}" class="heading title {% block title-class %}{% endblock %}"{% if title %} title="{{ title|escape }}"{% endif %}>{% block title %}{{ title|default:"" }}{% endblock %}</a>
|
||||
</div>
|
||||
<div>
|
||||
<span class="heading subtitle {% block subtitle-class %}{% endblock %}">{% block subtitle %}{{ subtitle|default:"" }}{% endblock %}</span>
|
||||
</div>
|
||||
{% block title-container %}
|
||||
<a href="{{ url|escape }}" class="heading title {% block title-class %}{% endblock %}"{% if title %} title="{{ title|escape }}"{% endif %}>
|
||||
{% block title %}{{ title|default:"" }}{% endblock %}
|
||||
</a>
|
||||
{% endblock %}
|
||||
{% block subtitle-container %}
|
||||
<span class="heading subtitle {% block subtitle-class %}{% endblock %}">
|
||||
{% block subtitle %}{{ subtitle|default:"" }}{% endblock %}
|
||||
</span>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
</header>
|
||||
{% endblock %}
|
||||
|
|
|
@ -5,10 +5,11 @@ Context:
|
|||
- object: track to render
|
||||
{% endcomment %}
|
||||
|
||||
<span class="content mr-2">
|
||||
<span class="icon highlight-color-2 m-2">
|
||||
<span class="track">
|
||||
<span class="icon hg-color-2">
|
||||
<i class="fas fa-music"></i>
|
||||
</span>
|
||||
<label>
|
||||
{% if log %}
|
||||
<span>{{ log.date|date:"H:i" }} — </span>
|
||||
{% endif %}
|
||||
|
@ -19,4 +20,5 @@ Context:
|
|||
{% if object.info %}(<i>{{ object.info }}</i>){% endif %}
|
||||
</span>
|
||||
{% endif %}
|
||||
</label>
|
||||
</span>
|
||||
|
|
|
@ -1,20 +1,43 @@
|
|||
{% extends "./preview.html" %}
|
||||
{% load i18n %}
|
||||
{% load i18n aircox %}
|
||||
|
||||
{% block tag-class %}{{ block.super }} preview-wide{% endblock %}
|
||||
{% block headings-class %}{{ block.super }} preview-card-headings{% endblock %}
|
||||
{% block headings-tag-extra %}
|
||||
{{ block.super }}
|
||||
{% if cover %}
|
||||
style="background-image: url({{ cover }});"
|
||||
{% endif %}
|
||||
{% block tag-class %}{{ block.super }} list-item wide is-fullwidth{% endblock %}
|
||||
|
||||
{% block headings %}
|
||||
<a href="{{ url|escape }}" class="heading title {% block title-class %}{% endblock %}">
|
||||
{% block title %}{{ title|default:"" }}{% endblock %}
|
||||
</a>
|
||||
<span class="heading subtitle {% block subtitle-class %}{% endblock %}">
|
||||
{% block subtitle %}{{ subtitle|default:"" }}{% endblock %}
|
||||
</span>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block inner %}
|
||||
{% block headings-container %}{{ block.super }}{% endblock %}
|
||||
<div class="is-flex-direction-column">
|
||||
{% block content-container %}{{ block.super }}{% endblock %}
|
||||
{% block actions-container %}{{ block.super }}{% endblock %}
|
||||
</div>
|
||||
{% block content-container %}
|
||||
<div class="media">
|
||||
{% if object.cover %}
|
||||
<a href="{{ object.get_absolute_url }}"
|
||||
class="media-left preview-cover"
|
||||
style="background-image: url({{ object.cover.url }})">
|
||||
</a>
|
||||
{% endif %}
|
||||
<div class="media-content">
|
||||
{% block headings-container %}{{ block.super }}{% endblock %}
|
||||
|
||||
<section class="content">
|
||||
{% block content %}
|
||||
{% if content and with_content %}
|
||||
{% autoescape off %}
|
||||
{{ content|striptags|linebreaks }}
|
||||
{% endautoescape %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</section>
|
||||
|
||||
{% block actions-container %}
|
||||
{{ block.super }}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
18
aircox/templates/registration/login.html
Normal file
18
aircox/templates/registration/login.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
{% extends "aircox/base.html" %}
|
||||
{% load i18n aircox %}
|
||||
|
||||
{% block content-container %}
|
||||
<div class="container content page-content">
|
||||
<h2>{% trans "Log in" %}</h2>
|
||||
<br/>
|
||||
<form method="post" action="{% url 'login' %}">
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
<br/>
|
||||
<button class="button" type="submit">{% trans "Log in" %}</button>
|
||||
<input type="hidden" name="next" value="{{ next }}">
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -57,10 +57,15 @@ def do_get_tracks(obj):
|
|||
|
||||
|
||||
@register.simple_tag(name="has_perm", takes_context=True)
|
||||
def do_has_perm(context, obj, perm, user=None):
|
||||
def do_has_perm(context, obj, perm, user=None, simple=False):
|
||||
"""Return True if ``user.has_perm('[APP].[perm]_[MODEL]')``"""
|
||||
if not obj:
|
||||
return
|
||||
if user is None:
|
||||
user = context["request"].user
|
||||
if simple:
|
||||
return user.has_perm("aircox.{}".format(perm)) or user.is_superuser
|
||||
else:
|
||||
return user.has_perm("{}.{}_{}".format(obj._meta.app_label, perm, obj._meta.model_name))
|
||||
|
||||
|
||||
|
@ -70,6 +75,12 @@ def do_is_diffusion(obj):
|
|||
return isinstance(obj, Diffusion)
|
||||
|
||||
|
||||
@register.filter(name="is_log")
|
||||
def do_is_log(obj):
|
||||
"""Return True if object is a Diffusion."""
|
||||
return isinstance(obj, Log)
|
||||
|
||||
|
||||
@register.filter(name="json")
|
||||
def do_json(obj, fields=""):
|
||||
"""Return object as json."""
|
||||
|
@ -93,6 +104,8 @@ def do_player_live_attr(context):
|
|||
@register.simple_tag(name="nav_items", takes_context=True)
|
||||
def do_nav_items(context, menu, **kwargs):
|
||||
"""Render navigation items for the provided menu name."""
|
||||
if not getattr(context["request"], "station"):
|
||||
return []
|
||||
station, request = context["station"], context["request"]
|
||||
return [(item, item.render(request, **kwargs)) for item in station.navitem_set.filter(menu=menu)]
|
||||
|
||||
|
@ -125,3 +138,8 @@ def do_verbose_name(obj, plural=False):
|
|||
if isinstance(obj, str):
|
||||
return obj
|
||||
return obj._meta.verbose_name_plural if plural else obj._meta.verbose_name
|
||||
|
||||
|
||||
@register.filter(name="edit_view")
|
||||
def do_edit_view(obj):
|
||||
return "%s-edit" % obj.split("-")[0]
|
||||
|
|
|
@ -157,3 +157,8 @@ def tracks(episode, sound):
|
|||
items += [baker.prepare(models.Track, sound=sound, position=i, timestamp=i * 60) for i in range(0, 3)]
|
||||
models.Track.objects.bulk_create(items)
|
||||
return items
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def user():
|
||||
return User.objects.create_user(username="user1", password="bar")
|
||||
|
|
46
aircox/tests/test_permissions.py
Normal file
46
aircox/tests/test_permissions.py
Normal file
|
@ -0,0 +1,46 @@
|
|||
import pytest
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.urls import reverse
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_no_admin(user, client):
|
||||
client.force_login(user)
|
||||
response = client.get("/admin/")
|
||||
assert response.status_code != 200
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_user_cannot_change_program_or_episode(user, client, program):
|
||||
assert not user.has_perm("aircox.change_program")
|
||||
assert not user.has_perm("aircox.change_episode")
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_group_can_change_program(user, client, program):
|
||||
assert program.editors in Group.objects.all()
|
||||
assert not user.has_perm("aircox.%s" % program.change_permission_codename)
|
||||
user.groups.add(program.editors)
|
||||
user = User.objects.get(pk=user.pk) # reload user in order to have permissions set
|
||||
assert program.editors in user.groups.all()
|
||||
assert user.has_perm("aircox.%s" % program.change_permission_codename)
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_group_change_program(user, client, program):
|
||||
client.force_login(user)
|
||||
response = client.get(reverse("program-edit", kwargs={"pk": program.pk}))
|
||||
assert response.status_code == 403
|
||||
user.groups.add(program.editors)
|
||||
response = client.get(reverse("program-edit", kwargs={"pk": program.pk}))
|
||||
assert response.status_code == 200
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_group_change_episode(user, client, program, episode):
|
||||
client.force_login(user)
|
||||
response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk}))
|
||||
assert response.status_code == 403
|
||||
user.groups.add(program.editors)
|
||||
response = client.get(reverse("episode-edit", kwargs={"pk": episode.pk}))
|
||||
assert response.status_code == 200
|
22
aircox/tests/test_profile.py
Normal file
22
aircox/tests/test_profile.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
import pytest
|
||||
from django.urls import reverse
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_authenticate(user, client, program):
|
||||
r = client.get(reverse("login"))
|
||||
assert r.status_code == 200
|
||||
assert b"id_username" in r.content
|
||||
r = client.post(reverse("login"), kwargs={"username": "foo", "password": "bar"})
|
||||
assert b"errorlist" in r.content
|
||||
assert client.login(username="user1", password="bar")
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_profile_programs(user, client, program):
|
||||
client.force_login(user)
|
||||
r = client.get(reverse("profile"))
|
||||
assert program.title not in r.content.decode("utf-8")
|
||||
user.groups.add(program.editors)
|
||||
r = client.get(reverse("profile"))
|
||||
assert program.title in r.content.decode("utf-8")
|
73
aircox/tests/test_program.py
Normal file
73
aircox/tests/test_program.py
Normal file
|
@ -0,0 +1,73 @@
|
|||
from itertools import chain
|
||||
import json
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
|
||||
from aircox.models import Program
|
||||
|
||||
|
||||
png_content = (
|
||||
b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90wS\xde"
|
||||
+ b"\x00\x00\x00\x0cIDATx\x9cc`\xf8\xcf\x00\x00\x02\x02\x01\x00{\t\x81x\x00\x00\x00\x00IEND\xaeB`\x82"
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_edit_program(user, client, program):
|
||||
client.force_login(user)
|
||||
response = client.get(reverse("program-detail", kwargs={"slug": program.slug}))
|
||||
assert response.status_code == 200
|
||||
assert "🖉 ".encode() not in response.content
|
||||
user.groups.add(program.editors)
|
||||
response = client.get(reverse("program-detail", kwargs={"slug": program.slug}))
|
||||
assert "🖉 ".encode() in response.content
|
||||
assert b"foobar" not in response.content
|
||||
response = client.post(reverse("program-edit", kwargs={"pk": program.pk}), {"content": "foobar"})
|
||||
response = client.get(reverse("program-detail", kwargs={"slug": program.slug}))
|
||||
assert b"foobar" in response.content
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_add_cover(user, client, program):
|
||||
assert program.cover is None
|
||||
user.groups.add(program.editors)
|
||||
client.force_login(user)
|
||||
cover = SimpleUploadedFile("cover1.png", png_content, content_type="image/png")
|
||||
r = client.post(
|
||||
reverse("program-edit", kwargs={"pk": program.pk}), {"content": "foobar", "new_cover": cover}, follow=True
|
||||
)
|
||||
assert r.status_code == 200
|
||||
p = Program.objects.get(pk=program.pk)
|
||||
assert "cover1.png" in p.cover.url
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_edit_tracklist(user, client, program, episode, tracks):
|
||||
user.groups.add(program.editors)
|
||||
client.force_login(user)
|
||||
episode.status = 0x10 # published
|
||||
episode.save()
|
||||
r = client.get(reverse("program-detail", kwargs={"slug": episode.program.slug}))
|
||||
assert r.status_code == 200
|
||||
r = client.get(reverse("episode-detail", kwargs={"slug": episode.slug}))
|
||||
assert r.status_code == 200
|
||||
r2 = client.get(reverse("episode-edit", kwargs={"pk": episode.pk}))
|
||||
assert r2.status_code == 200
|
||||
|
||||
tracklist = [t.id for t in episode.track_set.all().order_by("position")]
|
||||
tracklist_details_reversed = [(t.id, t.artist, t.title) for t in episode.track_set.all().order_by("-position")]
|
||||
tracklist_details_reversed = list(chain(*tracklist_details_reversed))
|
||||
data = """{"website": [""], "content": ["foobar"], "new_podcast": [""], "form-TOTAL_FORMS": ["3"],
|
||||
"form-INITIAL_FORMS": ["3"], "form-MIN_NUM_FORMS": ["0"], "form-MAX_NUM_FORMS": ["1000"], "form-0-position": ["0"],
|
||||
"form-0-id": ["%s"], "form-0-": ["", "", "", "", "", ""], "form-0-artist": ["%s"], "form-0-title": ["%s"],
|
||||
"form-0-tags": [""], "form-0-album": [""], "form-0-year": [""], "form-1-position": ["1"], "form-1-id": ["%s"],
|
||||
"form-1-": ["", "", "", "", "", ""], "form-1-artist": ["%s"], "form-1-title": ["%s"], "form-1-tags": [""],
|
||||
"form-1-album": [""], "form-1-year": [""], "form-2-position": ["2"], "form-2-id": ["%s"], "form-2-": ["", "", "",
|
||||
"", "", ""], "form-2-artist": ["%s"], "form-2-title": ["%s"], "form-2-tags": [""], "form-2-album": [""],
|
||||
"form-2-year": [""]}""" % tuple(
|
||||
tracklist_details_reversed
|
||||
)
|
||||
r = client.post(reverse("episode-edit", kwargs={"pk": episode.pk}), json.loads(data), follow=True)
|
||||
assert r.status_code == 200
|
||||
assert [t.id for t in episode.track_set.all().order_by("position")] == list(reversed(tracklist))
|
|
@ -40,29 +40,21 @@ urls = [
|
|||
path("api/", include((api, "aircox"), namespace="api")),
|
||||
# ---- ---- objects views
|
||||
# ---- articles
|
||||
path(
|
||||
_("articles/<slug:slug>/"),
|
||||
views.ArticleDetailView.as_view(),
|
||||
name="article-detail",
|
||||
),
|
||||
path(
|
||||
_("articles/"),
|
||||
views.ArticleListView.as_view(model=models.Article),
|
||||
name="article-list",
|
||||
),
|
||||
path(
|
||||
_("articles/c/<slug:category_slug>/"), views.ArticleListView.as_view(model=models.Article), name="article-list"
|
||||
_("articles/c/<slug:category_slug>/"),
|
||||
views.ArticleListView.as_view(model=models.Article),
|
||||
name="article-list",
|
||||
),
|
||||
path(
|
||||
_("articles/<slug:slug>/"),
|
||||
views.ArticleDetailView.as_view(),
|
||||
name="article-detail",
|
||||
),
|
||||
# ---- episodes
|
||||
path(_("episodes/"), views.EpisodeListView.as_view(), name="episode-list"),
|
||||
path(_("episodes/c/<slug:category_slug>/"), views.EpisodeListView.as_view(), name="episode-list"),
|
||||
path(
|
||||
_("episodes/<slug:slug>/"),
|
||||
views.EpisodeDetailView.as_view(),
|
||||
name="episode-detail",
|
||||
),
|
||||
path(_("podcasts/"), views.PodcastListView.as_view(), name="podcast-list"),
|
||||
path(_("podcasts/c/<slug:category_slug>/"), views.PodcastListView.as_view(), name="podcast-list"),
|
||||
# ---- timetable
|
||||
path(_("timetable/"), views.TimeTableView.as_view(), name="timetable-list"),
|
||||
path(
|
||||
|
@ -81,14 +73,6 @@ urls = [
|
|||
views.PageListView.as_view(model=models.Page, attach_to_value=models.StaticPage.Target.PAGES),
|
||||
name="page-list",
|
||||
),
|
||||
path(
|
||||
_("pages/"),
|
||||
views.BasePageListView.as_view(
|
||||
model=models.StaticPage,
|
||||
queryset=models.StaticPage.objects.filter(attach_to__isnull=True),
|
||||
),
|
||||
name="static-page-list",
|
||||
),
|
||||
path(
|
||||
_("pages/<slug:slug>/"),
|
||||
views.BasePageDetailView.as_view(
|
||||
|
@ -97,26 +81,57 @@ urls = [
|
|||
),
|
||||
name="static-page-detail",
|
||||
),
|
||||
path(
|
||||
_("pages/"),
|
||||
views.BasePageListView.as_view(
|
||||
model=models.StaticPage,
|
||||
queryset=models.StaticPage.objects.filter(attach_to__isnull=True),
|
||||
),
|
||||
name="static-page-list",
|
||||
),
|
||||
# ---- programs
|
||||
path(_("programs/"), views.ProgramListView.as_view(), name="program-list"),
|
||||
path(_("programs/c/<slug:category_slug>/"), views.ProgramListView.as_view(), name="program-list"),
|
||||
path(
|
||||
_("programs/<slug:slug>/"),
|
||||
_("programs/<slug:slug>"),
|
||||
views.ProgramDetailView.as_view(),
|
||||
name="program-detail",
|
||||
),
|
||||
path(_("programs/<slug:parent_slug>/articles/"), views.ArticleListView.as_view(), name="article-list"),
|
||||
path(_("programs/<slug:parent_slug>/podcasts/"), views.PodcastListView.as_view(), name="podcast-list"),
|
||||
path(_("programs/<slug:parent_slug>/episodes/"), views.EpisodeListView.as_view(), name="episode-list"),
|
||||
path(_("programs/<slug:parent_slug>/diffusions/"), views.DiffusionListView.as_view(), name="diffusion-list"),
|
||||
path(_("programs/<slug:parent_slug>/articles"), views.ArticleListView.as_view(), name="article-list"),
|
||||
path(_("programs/<slug:parent_slug>/podcasts"), views.PodcastListView.as_view(), name="podcast-list"),
|
||||
path(_("programs/<slug:parent_slug>/episodes"), views.EpisodeListView.as_view(), name="episode-list"),
|
||||
path(_("programs/<slug:parent_slug>/diffusions"), views.DiffusionListView.as_view(), name="diffusion-list"),
|
||||
path(
|
||||
_("programs/<slug:parent_slug>/publications"),
|
||||
views.PageListView.as_view(model=models.Page, attach_to_value=models.StaticPage.Target.PAGES),
|
||||
name="page-list",
|
||||
),
|
||||
# ---- episodes
|
||||
path(_("programs/episodes/"), views.EpisodeListView.as_view(), name="episode-list"),
|
||||
path(_("programs/episodes/c/<slug:category_slug>"), views.EpisodeListView.as_view(), name="episode-list"),
|
||||
path(
|
||||
_("programs/episodes/<slug:slug>"),
|
||||
views.EpisodeDetailView.as_view(),
|
||||
name="episode-detail",
|
||||
),
|
||||
path(
|
||||
_("programs/episodes/<pk>/edit/"),
|
||||
views.EpisodeUpdateView.as_view(),
|
||||
name="episode-edit",
|
||||
),
|
||||
path(_("podcasts/"), views.PodcastListView.as_view(), name="podcast-list"),
|
||||
path(_("podcasts/c/<slug:category_slug>/"), views.PodcastListView.as_view(), name="podcast-list"),
|
||||
# ---- others
|
||||
path(
|
||||
_("program/<pk>/edit/"),
|
||||
views.ProgramUpdateView.as_view(),
|
||||
name="program-edit",
|
||||
),
|
||||
path(
|
||||
"errors/no-station",
|
||||
views.errors.NoStationErrorView.as_view(),
|
||||
name="errors-no-station",
|
||||
),
|
||||
path(
|
||||
_("program/<slug:parent_slug>/publications"),
|
||||
views.PageListView.as_view(model=models.Page, attach_to_value=models.StaticPage.Target.PAGES),
|
||||
name="page-list",
|
||||
),
|
||||
path("gestion/", views.profile, name="profile"),
|
||||
path("accounts/profile/", views.profile, name="profile"),
|
||||
]
|
||||
|
|
|
@ -2,7 +2,7 @@ from . import admin, errors
|
|||
from .article import ArticleDetailView, ArticleListView
|
||||
from .base import BaseAPIView, BaseView
|
||||
from .diffusion import DiffusionListView, TimeTableView
|
||||
from .episode import EpisodeDetailView, EpisodeListView, PodcastListView
|
||||
from .episode import EpisodeDetailView, EpisodeListView, PodcastListView, EpisodeUpdateView
|
||||
from .home import HomeView
|
||||
from .log import LogListAPIView, LogListView
|
||||
from .page import (
|
||||
|
@ -11,11 +11,13 @@ from .page import (
|
|||
PageDetailView,
|
||||
PageListView,
|
||||
)
|
||||
from .profile import profile
|
||||
from .program import (
|
||||
ProgramDetailView,
|
||||
ProgramListView,
|
||||
ProgramPageDetailView,
|
||||
ProgramPageListView,
|
||||
ProgramUpdateView,
|
||||
)
|
||||
|
||||
__all__ = (
|
||||
|
@ -30,6 +32,7 @@ __all__ = (
|
|||
"EpisodeDetailView",
|
||||
"EpisodeListView",
|
||||
"PodcastListView",
|
||||
"EpisodeUpdateView",
|
||||
"HomeView",
|
||||
"LogListAPIView",
|
||||
"LogListView",
|
||||
|
@ -37,10 +40,12 @@ __all__ = (
|
|||
"BasePageListView",
|
||||
"PageDetailView",
|
||||
"PageListView",
|
||||
"profile",
|
||||
"ProgramDetailView",
|
||||
"ProgramListView",
|
||||
"ProgramPageDetailView",
|
||||
"ProgramPageListView",
|
||||
"ProgramUpdateView",
|
||||
"attached",
|
||||
)
|
||||
|
||||
|
|
|
@ -7,13 +7,8 @@ __all__ = ["ArticleDetailView", "ArticleListView"]
|
|||
class ArticleDetailView(PageDetailView):
|
||||
model = Article
|
||||
|
||||
def get_sidebar_queryset(self):
|
||||
qs = Article.objects.published().select_related("cover").order_by("-pub_date")
|
||||
return qs
|
||||
|
||||
|
||||
class ArticleListView(PageListView):
|
||||
model = Article
|
||||
has_headline = True
|
||||
parent_model = Program
|
||||
attach_to_value = StaticPage.Target.ARTICLES
|
||||
|
|
|
@ -50,13 +50,9 @@ class BaseView(TemplateResponseMixin, ContextMixin):
|
|||
return None
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
kwargs.setdefault("station", self.station)
|
||||
kwargs.setdefault("page", self.get_page())
|
||||
kwargs.setdefault("header_template_name", self.header_template_name)
|
||||
|
||||
if "audio_streams" not in kwargs:
|
||||
kwargs["audio_streams"] = self.station.streams
|
||||
|
||||
if "model" not in kwargs:
|
||||
model = getattr(self, "model", None) or hasattr(self, "object") and type(self.object)
|
||||
kwargs["model"] = model
|
||||
|
|
|
@ -50,6 +50,6 @@ class TimeTableView(GetDateMixin, BaseDiffusionListView):
|
|||
|
||||
if object_list is None:
|
||||
logs = self.get_logs(self.date)
|
||||
object_list = Log.merge_diffusions(logs, self.object_list)
|
||||
object_list = Log.merge_diffusions(logs, self.object_list, group_logs=True)
|
||||
object_list = list(reversed(object_list))
|
||||
return super().get_context_data(date=self.date, dates=dates, object_list=object_list, **kwargs)
|
||||
|
|
|
@ -1,14 +1,26 @@
|
|||
from django.shortcuts import reverse
|
||||
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||
from django.forms import ModelForm, FileField
|
||||
from django.forms.models import modelformset_factory
|
||||
from django.urls import reverse
|
||||
|
||||
from ckeditor.fields import RichTextField
|
||||
from filer.models.filemodels import File
|
||||
|
||||
from aircox.controllers.sound_file import SoundFile
|
||||
from aircox.models import Track
|
||||
|
||||
from ..filters import EpisodeFilters
|
||||
from ..models import Episode, Program, StaticPage
|
||||
from .page import PageListView
|
||||
from .program import ProgramPageDetailView
|
||||
from .program import ProgramPageDetailView, BaseProgramMixin
|
||||
from .page import PageUpdateView
|
||||
|
||||
|
||||
__all__ = (
|
||||
"EpisodeDetailView",
|
||||
"EpisodeListView",
|
||||
"PodcastListView",
|
||||
"EpisodeUpdateView",
|
||||
)
|
||||
|
||||
|
||||
|
@ -39,3 +51,62 @@ class EpisodeListView(PageListView):
|
|||
class PodcastListView(EpisodeListView):
|
||||
attach_to_value = StaticPage.Target.PODCASTS
|
||||
queryset = Episode.objects.published().with_podcasts().order_by("-pub_date")
|
||||
|
||||
|
||||
class EpisodeForm(ModelForm):
|
||||
content = RichTextField()
|
||||
new_podcast = FileField(required=False)
|
||||
|
||||
class Meta:
|
||||
model = Episode
|
||||
fields = ["content"]
|
||||
|
||||
def save(self, commit=True):
|
||||
file_obj = self.cleaned_data["new_podcast"]
|
||||
if file_obj:
|
||||
obj, _ = File.objects.get_or_create(original_filename=file_obj.name, file=file_obj)
|
||||
sound_file = SoundFile(obj.path)
|
||||
sound_file.sync(
|
||||
program=self.instance.program, episode=self.instance, type=0, is_public=True, is_downloadable=True
|
||||
)
|
||||
super().save(commit=commit)
|
||||
|
||||
|
||||
class EpisodeUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView):
|
||||
model = Episode
|
||||
form_class = EpisodeForm
|
||||
template_name = "aircox/episode_form.html"
|
||||
|
||||
def get_sidebar_queryset(self):
|
||||
return super().get_sidebar_queryset().filter(parent=self.program)
|
||||
|
||||
def test_func(self):
|
||||
program = self.get_object().program
|
||||
return self.request.user.has_perm("aircox.%s" % program.change_permission_codename)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse("episode-detail", kwargs={"slug": self.get_object().slug})
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
obj = Episode.objects.get(pk=self.kwargs["pk"])
|
||||
return obj
|
||||
|
||||
def get_formset(self, *args, **kwargs):
|
||||
fields = ("position", "artist", "title", "tags", "album", "year", "info")
|
||||
TrackFormSet = modelformset_factory(Track, fields=fields, extra=0)
|
||||
return TrackFormSet(*args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["fields"] = ("position", "artist", "title", "tags", "album", "year", "info")
|
||||
context["formset"] = self.get_formset(queryset=Track.objects.filter(episode=self.object))
|
||||
return context
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
super().post(request, *args, **kwargs)
|
||||
formset = self.get_formset(request.POST)
|
||||
if formset.is_valid():
|
||||
formset.save()
|
||||
return super().form_valid(formset)
|
||||
else:
|
||||
return super().form_valid(formset) # form_invalid(formset)
|
||||
|
|
|
@ -23,16 +23,19 @@ class HomeView(AttachedToMixin, BaseView, ListView):
|
|||
|
||||
def get_logs(self, diffusions):
|
||||
today = date.today()
|
||||
now = datetime.now()
|
||||
# diffs = Diffusion.objects.on_air().date(today)
|
||||
object_list = self.object_list
|
||||
diffs = list(object_list[: self.related_count])
|
||||
logs = Log.objects.on_air().filter(track__isnull=False)
|
||||
logs = Log.objects.on_air().filter(track__isnull=False, date__lte=now)
|
||||
if diffs:
|
||||
min_date = diffs[-1].start - timedelta(hours=1)
|
||||
logs = logs.after(min_date)
|
||||
else:
|
||||
logs = logs.date(today)
|
||||
return Log.merge_diffusions(logs, object_list, diff_count=self.related_count)
|
||||
return Log.merge_diffusions(
|
||||
logs, object_list, diff_count=self.related_count, count=self.related_count + 2, group_logs=True
|
||||
)
|
||||
|
||||
def get_next_diffs(self):
|
||||
now = tz.now()
|
||||
|
|
|
@ -63,7 +63,7 @@ class ParentMixin:
|
|||
def get_context_data(self, **kwargs):
|
||||
parent = kwargs.setdefault("parent", self.parent)
|
||||
|
||||
if parent is not None:
|
||||
if parent is not None and parent.cover:
|
||||
kwargs.setdefault("cover", parent.cover.url)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
from django.http import Http404, HttpResponse
|
||||
from django.http import HttpResponse
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import DetailView, ListView
|
||||
from django.views.generic.edit import UpdateView
|
||||
from django.urls import reverse
|
||||
from honeypot.decorators import check_honeypot
|
||||
|
||||
from ..filters import PageFilters
|
||||
from ..forms import CommentForm
|
||||
from ..models import Comment, Category
|
||||
from ..utils import Redirect
|
||||
from .base import BaseView
|
||||
from .mixins import AttachedToMixin, FiltersMixin, ParentMixin
|
||||
|
||||
|
@ -22,6 +22,9 @@ __all__ = [
|
|||
class BasePageMixin:
|
||||
category = None
|
||||
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().select_subclasses().published().select_related("cover")
|
||||
|
||||
def get_category(self, page, **kwargs):
|
||||
if page:
|
||||
if getattr(page, "category_id", None):
|
||||
|
@ -53,7 +56,7 @@ class BasePageListView(AttachedToMixin, BasePageMixin, ParentMixin, BaseView, Li
|
|||
return super().get(*args, **kwargs)
|
||||
|
||||
def get_queryset(self):
|
||||
query = super().get_queryset().select_subclasses().published().select_related("cover")
|
||||
query = super().get_queryset()
|
||||
if self.category:
|
||||
query = query.filter(category=self.category)
|
||||
return query
|
||||
|
@ -71,6 +74,7 @@ class BasePageListView(AttachedToMixin, BasePageMixin, ParentMixin, BaseView, Li
|
|||
|
||||
if not context.get("cover") and parent and parent.cover:
|
||||
context["cover"] = parent.cover.url
|
||||
|
||||
return context
|
||||
|
||||
|
||||
|
@ -80,9 +84,6 @@ class BasePageDetailView(BasePageMixin, BaseView, DetailView):
|
|||
template_name = "aircox/basepage_detail.html"
|
||||
context_object_name = "page"
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
return super().get(*args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
if self.object.cover:
|
||||
kwargs.setdefault("cover", self.object.cover.url)
|
||||
|
@ -90,27 +91,11 @@ class BasePageDetailView(BasePageMixin, BaseView, DetailView):
|
|||
kwargs.setdefault("title", self.object.display_title)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().select_related("cover")
|
||||
|
||||
# This should not exists: it allows mapping not published pages
|
||||
# or it should be only used for trashed pages.
|
||||
def not_published_redirect(self, page):
|
||||
"""When a page is not published, redirect to the returned url instead
|
||||
of an HTTP 404 code."""
|
||||
return None
|
||||
|
||||
def get_object(self):
|
||||
if getattr(self, "object", None):
|
||||
return self.object
|
||||
|
||||
obj = super().get_object()
|
||||
if not obj.is_published:
|
||||
redirect_url = self.not_published_redirect(obj)
|
||||
if redirect_url:
|
||||
raise Redirect(redirect_url)
|
||||
raise Http404("%s not found" % self.model._meta.verbose_name)
|
||||
|
||||
self.category = self.get_category(obj)
|
||||
return obj
|
||||
|
||||
|
@ -196,3 +181,10 @@ class PageDetailView(BasePageDetailView):
|
|||
comment.page = self.object
|
||||
comment.save()
|
||||
return self.get(request, *args, **kwargs)
|
||||
|
||||
|
||||
class PageUpdateView(BaseView, UpdateView):
|
||||
context_object_name = "page"
|
||||
|
||||
def get_page(self):
|
||||
return self.object
|
||||
|
|
15
aircox/views/profile.py
Normal file
15
aircox/views/profile.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
from django.contrib.auth.decorators import login_required
|
||||
from django.template.response import TemplateResponse
|
||||
|
||||
from aircox.models import Program
|
||||
|
||||
|
||||
@login_required
|
||||
def profile(request):
|
||||
programs = []
|
||||
ugroups = request.user.groups.all()
|
||||
for p in Program.objects.all():
|
||||
if p.editors in ugroups:
|
||||
programs.append(p)
|
||||
context = {"user": request.user, "programs": programs}
|
||||
return TemplateResponse(request, "accounts/profile.html", context)
|
|
@ -1,10 +1,16 @@
|
|||
import random
|
||||
|
||||
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||
from django.forms import ModelForm, ImageField
|
||||
from django.urls import reverse
|
||||
|
||||
from ..models import Article, Page, Program, StaticPage, Episode
|
||||
from ckeditor.fields import RichTextField
|
||||
from filer.models.imagemodels import Image
|
||||
|
||||
|
||||
from ..models import Article, Episode, Page, Program, StaticPage
|
||||
from .mixins import ParentMixin
|
||||
from .page import PageDetailView, PageListView
|
||||
from .page import PageDetailView, PageListView, PageUpdateView
|
||||
|
||||
__all__ = ["ProgramPageDetailView", "ProgramDetailView", "ProgramPageListView"]
|
||||
|
||||
|
@ -13,9 +19,6 @@ class BaseProgramMixin:
|
|||
def get_program(self):
|
||||
return self.object
|
||||
|
||||
def get_sidebar_url(self):
|
||||
return reverse("program-page-list", kwargs={"parent_slug": self.program.slug})
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
self.program = self.get_program()
|
||||
kwargs["program"] = self.program
|
||||
|
@ -49,6 +52,40 @@ class ProgramDetailView(BaseProgramMixin, PageDetailView):
|
|||
**kwargs,
|
||||
)
|
||||
|
||||
def get_template_names(self):
|
||||
return super().get_template_names() + ["aircox/program_detail.html"]
|
||||
|
||||
|
||||
class ProgramForm(ModelForm):
|
||||
content = RichTextField()
|
||||
new_cover = ImageField(required=False)
|
||||
|
||||
class Meta:
|
||||
model = Program
|
||||
fields = ["content"]
|
||||
|
||||
def save(self, commit=True):
|
||||
file_obj = self.cleaned_data["new_cover"]
|
||||
if file_obj:
|
||||
obj, _ = Image.objects.get_or_create(original_filename=file_obj.name, file=file_obj)
|
||||
self.instance.cover = obj
|
||||
super().save(commit=commit)
|
||||
|
||||
|
||||
class ProgramUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView):
|
||||
model = Program
|
||||
form_class = ProgramForm
|
||||
|
||||
def get_sidebar_queryset(self):
|
||||
return super().get_sidebar_queryset().filter(parent=self.program)
|
||||
|
||||
def test_func(self):
|
||||
program = self.get_object()
|
||||
return self.request.user.has_perm("aircox.%s" % program.change_permission_codename)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse("program-detail", kwargs={"slug": self.get_object().slug})
|
||||
|
||||
|
||||
class ProgramListView(PageListView):
|
||||
model = Program
|
||||
|
@ -69,9 +106,6 @@ class ProgramPageDetailView(BaseProgramMixin, ParentMixin, PageDetailView):
|
|||
self.parent = self.object.program
|
||||
return self.object.program
|
||||
|
||||
def get_sidebar_queryset(self):
|
||||
return super().get_sidebar_queryset().filter(parent=self.program)
|
||||
|
||||
|
||||
class ProgramPageListView(BaseProgramMixin, PageListView):
|
||||
model = Page
|
||||
|
|
|
@ -15,31 +15,39 @@ input.half-field:not(:active):not(:hover) {
|
|||
:root {
|
||||
--body-bg: #fff;
|
||||
--text-color: black;
|
||||
--text-color-light: #555;
|
||||
--break-color: rgb(225, 225, 225);
|
||||
|
||||
--main-color: #EFCA08;
|
||||
--main-color-light: #F4da51;
|
||||
--main-color-dark: #F49F0A;
|
||||
--secondary-color: #00A6A6;
|
||||
--secondary-color-light: #4cc0c0;
|
||||
--secondary-color-dark: #007ba8;
|
||||
|
||||
--disabled-color: #aaa;
|
||||
--disabled-bg: #eee;
|
||||
--link-fg: #00A6A6;
|
||||
--link-hv-fg: var(--text-color);
|
||||
|
||||
--highlight-color: rgba(255, 255, 0, 1);
|
||||
--highlight-color-alpha: rgba(255, 255, 0, 0.7);
|
||||
--highlight-color-grey: rgba(230, 230, 60, 1);
|
||||
--highlight-color-2: rgb(0, 0, 254);
|
||||
--highlight-color-2-alpha: rgb(0, 0, 254, 0.7);
|
||||
--highlight-color-2-grey: rgba(50, 200, 200, 1);
|
||||
--hg-color: #EFCA08;
|
||||
--hg-color-alpha: #EFCA08B3;
|
||||
--hg-color-grey: rgba(230, 230, 60, 1);
|
||||
--hg-color-2: #F49F0A;
|
||||
--hg-color-2-alpha: #F49F0AB3;
|
||||
--hg-color-2-grey: rgba(50, 200, 200, 1);
|
||||
|
||||
--nav-primary-height: 3rem;
|
||||
--nav-secondary-height: 2.5rem;
|
||||
--nav-bg: var(--highlight-color);
|
||||
--nav-fg: var(--highlight-color-2);
|
||||
--nav-active-bg: var(--highlight-color-2);
|
||||
--nav-active-fg: var(--highlight-color);
|
||||
--nav-fg: var(--text-color);
|
||||
--nav-bg: var(--main-color);
|
||||
--nav-secondary-bg: var(--main-color-light);
|
||||
--nav-hv-fg: var(--button-hv-fg);
|
||||
--nav-hv-bg: var(--button-hv-bg);
|
||||
--nav-active-fg: var(--button-active-fg);
|
||||
--nav-active-bg: var(--button-active-bg);
|
||||
--nav-fs: 1rem;
|
||||
--nav-2-fs: 0.8rem;
|
||||
|
||||
--button-fg: var(--text-color);
|
||||
--button-bg: var(--highlight-color);
|
||||
--button-hg-fg: var(--highlight-color-2);
|
||||
--button-hg-bg: var(--highlight-color);
|
||||
--button-active-fg: var(--highlight-color);
|
||||
--button-active-bg: var(--highlight-color-2);
|
||||
--nav-2-fs: 0.9rem;
|
||||
}
|
||||
|
||||
|
||||
|
@ -61,13 +69,6 @@ body {
|
|||
}
|
||||
}
|
||||
|
||||
section > .toolbar {
|
||||
background-color: rgba(0,0,0,0.05);
|
||||
padding: 1em;
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
|
||||
h1, h2, h3, h4, h5, h6, .heading, .title, .subtitle {
|
||||
font-family: var(--heading-font-family);
|
||||
}
|
||||
|
|
|
@ -8,66 +8,89 @@
|
|||
--subtitle-2-sz: 1.4rem;
|
||||
--subtitle-3-sz: 1.2rem;
|
||||
|
||||
--heading-title-bg-color: rgba(255, 255, 0, 1);
|
||||
--heading-bg-color: var(--highlight-color);
|
||||
--heading-bg-highlight-color: var(--highlight-color-2);
|
||||
--heading-font-family: default;
|
||||
--heading-bg: var(--main-color);
|
||||
--heading-fg: var(--text-color);
|
||||
--heading-hg-fg: var(--text-color);
|
||||
--heading-hg-bg: var(--secondary-color);
|
||||
--heading-link-hv-fg: var(--link-fg);
|
||||
|
||||
--preview-title-sz: #{v.$text-size-medium};
|
||||
--preview-subtitle-sz: #{v.$text-size};
|
||||
--cover-w: 14rem;
|
||||
--cover-h: 14rem;
|
||||
--cover-small-w: 10rem;
|
||||
--cover-small-h: 10rem;
|
||||
--cover-tiny-w: 10rem;
|
||||
--cover-tiny-h: 10rem;
|
||||
|
||||
--card-w: var(--cover-w);
|
||||
|
||||
|
||||
--preview-bg: var(--body-bg);
|
||||
--preview-title-sz: var(--title-3-sz);
|
||||
--preview-subtitle-sz: var(--title-3-sz);
|
||||
--preview-cover-size: 14rem;
|
||||
--preview-cover-small-size: 10rem;
|
||||
--preview-cover-tiny-size: 4rem;
|
||||
--preview-wide-content-sz: #{v.$text-size-bigger};
|
||||
--header-height: var(--preview-cover-size);
|
||||
--preview-heading-bg-color: var(--hg-color);
|
||||
--header-height: var(--cover-h);
|
||||
|
||||
--a-carousel-p: #{v.$text-size-medium};
|
||||
--a-carousel-ml: calc(#{v.$mp-4} - 0.5rem);
|
||||
--a-carousel-gap: #{v.$mp-4};
|
||||
--a-carousel-nav-x: -#{v.$mp-3e};
|
||||
--a-carousel-bg: none; // var(--secondary-color-light);
|
||||
|
||||
--a-progress-bg: transparent;
|
||||
--a-progress-bar-bg: var(--highlight-color-2);
|
||||
--a-progress-bar-color: var(--highlight-color);
|
||||
--a-progress-bar-bg: var(--secondary-color);
|
||||
--a-progress-bar-color: var(--text-color);
|
||||
--a-progress-bar-pd: #{v.$mp-2};
|
||||
|
||||
--a-playlist-header-bg: var(--highlight-color-2-alpha);
|
||||
--a-playlist-header-fg: var(--highlight-color);
|
||||
--a-playlist-header-bg: var(--secondary-color);
|
||||
--a-playlist-header-fg: var(--text-color);
|
||||
--a-playlist-title-sz: #{v.$text-size};
|
||||
--a-playlist-title-pd: #{v.$mp-3};
|
||||
--a-playlist-item-border: 1px var(--highlight-color-2) solid;
|
||||
--a-playlist-item-border: 1px var(--secondary-color) solid;
|
||||
|
||||
--a-sound-bg: var(--highlight-color-alpha);
|
||||
--a-sound-hv-bg: var(--highlight-color);
|
||||
--a-sound-playing-fg: var(--highlight-color-alpha);
|
||||
--a-sound-hv-fg: var(--highlight-color-2);
|
||||
--a-sound-bg: var(--main-color);
|
||||
--a-sound-hv-bg: var(--main-color);
|
||||
--a-sound-hv-fg: var(--secondary-color);
|
||||
--a-sound-playing-fg: var(--secondary-color-dark);
|
||||
--a-sound-text-sz: #{v.$text-size};
|
||||
|
||||
--a-player-url-fg: var(--highlight-color-2);
|
||||
--a-player-panel-bg: var(--highlight-color);
|
||||
--a-player-url-fg: var(--text-color);
|
||||
--a-player-panel-bg: var(--main-color);
|
||||
--a-player-bar-height: var(--nav-primary-height);
|
||||
--a-player-bar-bg: var(--highlight-color);
|
||||
--a-player-bar-bg: var(--main-color);
|
||||
--a-player-bar-title-alone-sz: #{v.$text-size-medium};
|
||||
--a-player-bar-button-fg: var(--button-fg);
|
||||
--a-player-bar-button-fg: var(--button-bg);
|
||||
--a-player-bar-button-hv-fg: var(--button-hv-fg);
|
||||
--a-player-bar-button-hv-bg: var(--button-hv-bg);
|
||||
|
||||
--button-fg: var(--highlight-color-2);
|
||||
--button-bg: var(--highlight-color);
|
||||
--button-sec-bg: var(--highlight-color-alpha);
|
||||
--button-hg-fg: var(--text-color);
|
||||
--button-hg-bg: var(--highlight-color);
|
||||
--button-active-fg: var(--highlight-color);
|
||||
--button-active-bg: var(--highlight-color-2);
|
||||
--button-fg: var(--text-color);
|
||||
--button-bg: var(--main-color);
|
||||
--button-sec-bg: var(--main-color-light);
|
||||
--button-hv-fg: var(--text-color);
|
||||
--button-hv-bg: var(--secondary-color-light);
|
||||
--button-active-fg: var(--text-color);
|
||||
--button-active-bg: var(--secondary-color);
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: v.$screen-wide) {
|
||||
:root {
|
||||
--cover-w: 10rem;
|
||||
--cover-h: 10rem;
|
||||
--cover-small-w: 6rem;
|
||||
--cover-small-h: 6rem;
|
||||
--cover-tiny-w: 4rem;
|
||||
--cover-tiny-h: 4rem;
|
||||
|
||||
--section-content-sz: 1rem;
|
||||
|
||||
--preview-title-sz: #{v.$text-size};
|
||||
--preview-subtitle-sz: #{v.$text-size-smaller};
|
||||
--preview-cover-size: 10rem;
|
||||
--preview-cover-small-size: 6rem;
|
||||
--preview-cover-tiny-size: 4rem;
|
||||
--preview-wide-content-sz: #{v.$text-size};
|
||||
}
|
||||
}
|
||||
|
@ -80,16 +103,27 @@
|
|||
}
|
||||
|
||||
.subtitle, .header.preview .subtitle {
|
||||
color: var(--text-color-light);
|
||||
|
||||
&.is-1 { font-size: var(--subtitle-1-sz); }
|
||||
&.is-2 { font-size: var(--subtitle-2-sz); }
|
||||
&.is-3 { font-size: var(--subtitle-3-sz); }
|
||||
}
|
||||
|
||||
.title + .subtitle {
|
||||
padding-top: 0em !important;
|
||||
}
|
||||
|
||||
.headings a, a.heading, a.subtitle {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.heading {
|
||||
display: inline-block;
|
||||
|
||||
&:not(:empty) {
|
||||
background-color: var(--heading-bg-color);
|
||||
// border-bottom: 1px var(--heading-bg) solid;
|
||||
// color: var(--heading-fg);
|
||||
padding: v.$mp-2;
|
||||
margin-top: 0em !important;
|
||||
vertical-align: top;
|
||||
|
@ -97,26 +131,25 @@
|
|||
&.highlight, &.active,
|
||||
.preview.active &,
|
||||
{
|
||||
background-color: var(--heading-bg-highlight-color);
|
||||
color: var(--highlight-color);
|
||||
// border-color: var(--heading-hg-bg);
|
||||
color: var(--heading-hg-fg);
|
||||
}
|
||||
}
|
||||
|
||||
&.title {
|
||||
background-color: var(--heading-title-bg-color);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ---- button
|
||||
@mixin button {
|
||||
.button, a.button, button.button, .nav-urls a {
|
||||
.button, a.button, button.button {
|
||||
font-size: v.$text-size;
|
||||
display: inline-block;
|
||||
padding: v.$mp-2;
|
||||
border: 1px var(--highlight-color-2-alpha) solid;
|
||||
border: none; //1px var(--button-fg) solid;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
// font-size: v.$text-size-medium;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
|
||||
color: var(--button-fg);
|
||||
background-color: var(--button-bg);
|
||||
|
@ -125,6 +158,10 @@
|
|||
background-color: var(--button-sec-bg);
|
||||
}
|
||||
|
||||
.label, label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icon {
|
||||
vertical-align: middle;
|
||||
&:not(:only-child) {
|
||||
|
@ -133,22 +170,16 @@
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
&:hover {
|
||||
color: var(--button-hg-fg);
|
||||
color: var(--button-hv-fg);
|
||||
background-color: var(--button-hv-bg);
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
&.active {
|
||||
border-color: var(--highlight-color-alpha);
|
||||
&.active:not(:hover) {
|
||||
// border-color: var(--hg-color-alpha);
|
||||
color: var(--button-active-fg);
|
||||
background-color: var(--button-active-bg);
|
||||
|
||||
&:hover {
|
||||
border-color: var(--highlight-color);
|
||||
background-color: var(--highlight-color-2-alpha);
|
||||
opacity: 1 !important;
|
||||
}
|
||||
}
|
||||
|
||||
&:not([disabled]), &:not(.disabled) {
|
||||
|
@ -156,9 +187,9 @@
|
|||
}
|
||||
|
||||
&[disabled], &.disabled {
|
||||
background-color: var(--highlight-color-grey);
|
||||
color: var(--highlight-color-2);
|
||||
border-color: var(--highlight-color-2-alpha);
|
||||
background-color: var(--hg-color-grey);
|
||||
color: var(--hg-color-2);
|
||||
border-color: var(--hg-color-2-alpha);
|
||||
}
|
||||
|
||||
.dropdown-trigger {
|
||||
|
@ -186,6 +217,7 @@
|
|||
.preview {
|
||||
position: relative;
|
||||
background-size: cover;
|
||||
background-color: var(--preview-bg) !important;
|
||||
|
||||
&.preview-item {
|
||||
width: 100%;
|
||||
|
@ -219,9 +251,8 @@
|
|||
> * { margin: 0em; }
|
||||
.column { padding: 0em; }
|
||||
|
||||
a {
|
||||
color: var(--text-color);
|
||||
}
|
||||
a { color: var(--text-color); }
|
||||
a:hover { color: var(--heading-link-hv-fg) !important; }
|
||||
}
|
||||
|
||||
&.tiny {
|
||||
|
@ -233,19 +264,23 @@
|
|||
}
|
||||
|
||||
|
||||
@media screen and (max-width: v.$screen-small) {
|
||||
.preview .content {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.preview-cover {
|
||||
background: var(--preview-bg);
|
||||
background-size: cover;
|
||||
background-color: transparent !important;
|
||||
height: var(--preview-cover-size);
|
||||
width: var(--preview-cover-size);
|
||||
min-width: var(--preview-cover-size);
|
||||
background-repeat: no-repeat;
|
||||
height: var(--cover-h);
|
||||
max-width: calc( var(--cover-w) * 1.5 );
|
||||
min-width: var(--cover-w);
|
||||
overflow: hidden;
|
||||
border: 1px #c4c4c4 solid;
|
||||
|
||||
img {
|
||||
height: var(--cover-h);
|
||||
max-width: calc( var(--cover-w) * 1.5 );
|
||||
min-width: var(--cover-w);
|
||||
}
|
||||
img.hide { visibility: hidden; }
|
||||
|
||||
|
||||
&.small, .preview.small & {
|
||||
min-width: unset;
|
||||
|
@ -289,70 +324,76 @@
|
|||
|
||||
// ---- list
|
||||
.list-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
|
||||
&:not(:first-child) {
|
||||
margin-top: calc(v.$mp-4 / 2);
|
||||
}
|
||||
// padding: v.$mp-3;
|
||||
|
||||
.headings {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
padding-top: 0em;
|
||||
padding: 0em;
|
||||
margin-bottom: v.$mp-2 !important;
|
||||
|
||||
.title {
|
||||
flex-grow: 1;
|
||||
}
|
||||
.heading {
|
||||
// background-color: var(--preview-heading-bg-color);
|
||||
padding: 0rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.title { flex-grow: 1; }
|
||||
.subtitle {
|
||||
font-size: var(--preview-title-sz);
|
||||
// background-color: var(--preview-heading-bg-color);
|
||||
text-align: right;
|
||||
|
||||
&:not(:empty) { min-width: 9rem; }
|
||||
}
|
||||
|
||||
.media-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
margin-bottom: unset;
|
||||
|
||||
.list-item:not(.no-cover) & {
|
||||
min-height: var(--preview-cover-small-size);
|
||||
}
|
||||
|
||||
.content {
|
||||
flex-grow: 1;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
|
||||
.actions {
|
||||
flex-grow: unset;
|
||||
text-align: right;
|
||||
margin-top: auto;
|
||||
}
|
||||
|
||||
&:not(.wide) .media {
|
||||
padding: v.$mp-3;
|
||||
// border-radius: v.$mp-2;
|
||||
border: 1px solid var(--break-color) !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: v.$screen-very-small) {
|
||||
.list-item .headings {
|
||||
flex-direction: column;
|
||||
|
||||
.heading {
|
||||
display: inline;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
color: unset !important;
|
||||
background: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ---- wide
|
||||
.preview-wide {
|
||||
height: var(--preview-cover-size);
|
||||
display: flex;
|
||||
|
||||
.headings {
|
||||
height: var(--preview-cover-size)
|
||||
}
|
||||
|
||||
&:not(.header) .headings {
|
||||
.list-item.wide {
|
||||
& .preview-cover {
|
||||
box-shadow: 0em 0em 1em rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
& .headings {
|
||||
width: var(--preview-cover-size);
|
||||
min-width: var(--preview-cover-size);
|
||||
flex-grow: 0;
|
||||
margin-right: v.$mp-4;
|
||||
}
|
||||
|
||||
& .content {
|
||||
font-size: var(--preview-wide-content-sz);
|
||||
flex-grow: 1;
|
||||
|
@ -361,77 +402,90 @@
|
|||
|
||||
|
||||
// ---- card
|
||||
|
||||
.preview-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: var(--card-w);
|
||||
padding: 0rem !important;
|
||||
margin-bottom: auto;
|
||||
|
||||
height: var(--preview-cover-size);
|
||||
width: var(--preview-cover-size);
|
||||
background-color: var(--preview-bg) !important;
|
||||
transition: box-shadow 0.2s;
|
||||
|
||||
&.small {
|
||||
height: var(--preview-cover-small-size);
|
||||
width: var(--preview-cover-small-size);
|
||||
}
|
||||
&.tiny {
|
||||
height: var(--preview-cover-tiny-size);
|
||||
width: var(--preview-cover-tiny-size);
|
||||
&:hover {
|
||||
figure {
|
||||
box-shadow: 0em 0em 1.2em rgba(0, 0, 0, 0.4) !important;
|
||||
}
|
||||
|
||||
&:not(.header) {
|
||||
box-shadow: 0em 0em 1em rgba(0,0,0,0.2);
|
||||
a {
|
||||
color: var(--heading-link-hv-fg);
|
||||
}
|
||||
}
|
||||
|
||||
.headings {
|
||||
margin-top: v.$mp-2;
|
||||
|
||||
.heading {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.title {
|
||||
max-height: calc( var(--preview-cover-size) / 2 );
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.card-grid & {
|
||||
min-width: unset;
|
||||
.subtitle {
|
||||
font-size: v.$text-size-2;
|
||||
}
|
||||
}
|
||||
|
||||
.card-content {
|
||||
flex-grow: 1;
|
||||
position: relative;
|
||||
|
||||
figure {
|
||||
box-shadow: 0em 0em 1em rgba(0, 0, 0, 0.2);
|
||||
height: var(--cover-h);
|
||||
width: var(--cover-w);
|
||||
}
|
||||
|
||||
.actions {
|
||||
position: absolute;
|
||||
bottom: v.$mp-3;
|
||||
right: v.$mp-3;
|
||||
|
||||
label {
|
||||
display: none;
|
||||
padding: v.$mp-2;
|
||||
bottom: 0rem;
|
||||
right: 0rem;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.card-headings, .preview-card-headings {
|
||||
padding-top: v.$mp-3;
|
||||
|
||||
& > div:not(:last-child),
|
||||
& .column > div {
|
||||
margin-bottom: v.$mp-3;
|
||||
}
|
||||
|
||||
preview-header:not(.no-cover) & .heading {
|
||||
margin-bottom: v.$mp-3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ---- card grid
|
||||
.card-grid {
|
||||
// ---- grid
|
||||
.list-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-auto-flow: dense;
|
||||
gap: v.$mp-4;
|
||||
|
||||
// .grid-wide { grid-column: 1 / 3; }
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: v.$screen-smaller) {
|
||||
.list-grid {
|
||||
grid-template-columns: 1fr;
|
||||
// .grid-wide { grid-column: 1; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ---- ---- Carousel
|
||||
.a-carousel {
|
||||
margin-left: calc( 0rem - var(--a-carousel-ml));
|
||||
|
||||
.a-carousel-viewport {
|
||||
padding: var(--a-carousel-p) 0;
|
||||
padding-left: var(--a-carousel-ml);
|
||||
box-shadow: inset 0em 0em 20rem var(--a-carousel-bg);
|
||||
// background-color: var(--a-carousel-bg);
|
||||
padding: 0rem;
|
||||
padding-top: var(--a-carousel-p);
|
||||
margin-top: calc( 0rem - var(--a-carousel-p) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -445,16 +499,15 @@
|
|||
}
|
||||
}
|
||||
|
||||
.a-carousel-button-container {
|
||||
button, .button {
|
||||
z-index:1000;
|
||||
position: absolute;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
top: 50%;
|
||||
.a-carousel-bullets-container {
|
||||
// due to a-carousel margin-left
|
||||
padding-left: var(--a-carousel-ml);
|
||||
|
||||
&.prev { left: var(--a-carousel-nav-x); }
|
||||
&.next { right: var(--a-carousel-nav-x); }
|
||||
.bullet {
|
||||
margin: v.$mp-1;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover { color: var(--link-fg); }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -525,7 +578,7 @@
|
|||
height: 3rem;
|
||||
background-color: var(--a-sound-bg);
|
||||
|
||||
&.playing, &.playing .label {
|
||||
&.playing .label {
|
||||
color: var(--a-sound-playing-fg) !important;
|
||||
}
|
||||
|
||||
|
@ -567,6 +620,11 @@
|
|||
.button {
|
||||
width: 3em;
|
||||
font-size: var(--a-sound-text-sz);
|
||||
|
||||
&:hover {
|
||||
color: var(--a-sound-hv-fg) !important;
|
||||
background-color: unset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -645,11 +703,10 @@
|
|||
padding: v.$mp-2 !important;
|
||||
min-width: calc(var(--a-player-bar-height) + v.$mp-2 * 2);
|
||||
border-radius: 0px;
|
||||
transition: background-color 0.5s;
|
||||
|
||||
&.open {
|
||||
background-color: var(--highlight-color-2-alpha);
|
||||
color: var(--highlight-color);
|
||||
background-color: var(--button-active-bg);
|
||||
color: var(--button-active-fg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,15 @@
|
|||
|
||||
.push-right, .flex-push-right { margin-left: auto !important; }
|
||||
.push-bottom { margin-top: auto !important; }
|
||||
|
||||
|
||||
.grid-2 { display: grid; grid-template-columns: 1fr 1fr }
|
||||
.grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr }
|
||||
|
||||
.flex-row { display: flex; flex-direction: row }
|
||||
.flex-column { display: flex; flex-direction: column }
|
||||
.flex-grow-0 { flex-grow: 0 !important; }
|
||||
.flex-grow-1 { flex-grow: 1 !important; }
|
||||
|
||||
.float-right { float: right }
|
||||
.float-left { float: left }
|
||||
|
@ -59,8 +67,8 @@
|
|||
|
||||
|
||||
// -- colors
|
||||
.highlight-color { color: var(--highlight-color); }
|
||||
.highlight-color-2 { color: var(--highlight-color-2); }
|
||||
.hg-color { color: var(--highlight-color); }
|
||||
.hg-color-2 { color: var(--highlight-color-2); }
|
||||
|
||||
.bg-transparent { background-color: transparent; }
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
@use "./vars" as v;
|
||||
@use "./components";
|
||||
|
||||
@import "./vendor";
|
||||
@use "./vendor";
|
||||
|
||||
|
||||
// ---- main theme & layout
|
||||
|
@ -9,28 +9,33 @@
|
|||
padding-bottom: 5rem;
|
||||
|
||||
a {
|
||||
color: var(--highlight-color-2);
|
||||
text-decoration: none;
|
||||
color: var(--link-fg);
|
||||
text-decoration: underline;
|
||||
|
||||
&:hover {
|
||||
color: var(--text-color);
|
||||
color: var(--link-hv-fg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
section.container {
|
||||
margin-top: v.$mp-3;
|
||||
|
||||
> .title {
|
||||
margin-top: unset;
|
||||
padding-top: unset !important;
|
||||
margin-bottom: v.$mp-4;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-bottom: v.$mp-3;
|
||||
padding-bottom: calc(v.$mp-4 / 2);
|
||||
border-bottom: 2px var(--break-color) solid;
|
||||
}
|
||||
|
||||
> .title {
|
||||
font-size: var(--title-2-sz);
|
||||
clear: both;
|
||||
margin: v.$mp-3 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
*[data-oembed-url] {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,7 +47,7 @@
|
|||
}
|
||||
|
||||
.vc-weekday-1, .vc-weekday-7 {
|
||||
color: var(--highlight-color-2) !important;
|
||||
color: var(--hg-color-2) !important;
|
||||
}
|
||||
|
||||
|
||||
|
@ -55,6 +60,12 @@
|
|||
display: inline-block;
|
||||
margin: v.$mp-3;
|
||||
margin-left: 0rem;
|
||||
padding: v.$mp-2;
|
||||
border-bottom: 1px var(--main-color) solid;
|
||||
|
||||
.heading {
|
||||
padding: 0em;
|
||||
}
|
||||
|
||||
.day {
|
||||
font-weight: v.$weight-bold;
|
||||
|
@ -76,9 +87,10 @@
|
|||
display: none;
|
||||
}
|
||||
|
||||
button, .action {
|
||||
button, .action, a {
|
||||
justify-content: center;
|
||||
min-width: 2rem;
|
||||
padding: v.$mp-2;
|
||||
|
||||
.not-selected { opacity: 0.6; }
|
||||
.icon { margin: 0em !important; }
|
||||
|
@ -112,8 +124,8 @@
|
|||
}
|
||||
|
||||
.navbar-item.active, .table tr.is-selected {
|
||||
color: var(--highlight-color-2);
|
||||
background-color: var(--highlight-color);
|
||||
color: var(--hg-color-2);
|
||||
background-color: var(--hg-color);
|
||||
}
|
||||
|
||||
|
||||
|
@ -154,11 +166,7 @@
|
|||
|
||||
font-family: var(--heading-font-family);
|
||||
text-transform: uppercase;
|
||||
|
||||
a, .button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
color: var(--nav-fg) !important;
|
||||
|
||||
.icon:first-child, .icon + span {
|
||||
text-align: center;
|
||||
|
@ -166,17 +174,20 @@
|
|||
display: inline-block;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: var(--nav-hv-bg);
|
||||
color: var(--nav-hv-fg);
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: var(--nav-active-bg);
|
||||
color: var(--nav-active-fg);
|
||||
color: var(--nav-active-fg) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-menu {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
background-color: var(--nav-bg);
|
||||
|
||||
|
||||
.dropdown-content {
|
||||
font-size: v.$text-size;
|
||||
|
@ -210,7 +221,7 @@
|
|||
}
|
||||
|
||||
&.secondary {
|
||||
background-color: var(--nav-bg);
|
||||
background-color: var(--nav-secondary-bg);
|
||||
//position: absolute;
|
||||
//width: 100%;
|
||||
//box-shadow: 0em 0.5em 0.5em rgba(0, 0, 0, 0.05);
|
||||
|
@ -235,6 +246,7 @@
|
|||
.breadcrumbs {
|
||||
text-align: right;
|
||||
padding: v.$mp-3 0rem;
|
||||
font-size: v.$text-size-smaller;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
|
||||
|
@ -269,7 +281,7 @@
|
|||
}
|
||||
|
||||
.nav + .nav {
|
||||
flew-grow: 0 !important;
|
||||
flex-grow: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -284,6 +296,7 @@
|
|||
.nav-menu {
|
||||
display: block;
|
||||
position: absolute;
|
||||
background-color: var(--nav-secondary-bg);
|
||||
left: 0;
|
||||
top: 100%;
|
||||
width: 100%;
|
||||
|
@ -292,11 +305,7 @@
|
|||
.nav-item {
|
||||
display: block;
|
||||
font-weight: v.$weight-normal;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--highlight-color-2-alpha);
|
||||
color: var(--highlight-color);
|
||||
}
|
||||
font-size: var(--nav-fs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -383,14 +392,45 @@ nav li {
|
|||
|
||||
.header-cover:not(:only-child) {
|
||||
float: right;
|
||||
height: var(--header-height);
|
||||
max-width: calc(var(--header-height) * 2);
|
||||
position: relative;
|
||||
z-index: 1000;
|
||||
background-color: var(--body-bg);
|
||||
margin: 0 0 v.$mp-4 v.$mp-4;
|
||||
|
||||
.cover {
|
||||
max-width: calc(var(--header-height) * 2);
|
||||
height: var(--header-height);
|
||||
}
|
||||
}
|
||||
.header-cover:only-child {
|
||||
with: 100%;
|
||||
}
|
||||
|
||||
@media screen and (max-width: v.$screen-small) {
|
||||
.container.header {
|
||||
width: calc( 100% - v.$mp-2 );
|
||||
|
||||
.headings {
|
||||
width: 100%;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.header-cover {
|
||||
float: none;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.cover {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-height: calc(var(--cover-h) * 1);
|
||||
max-width: calc(var(--cover-w) * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ---- ---- detail
|
||||
.page-content {
|
||||
margin-top: v.$mp-6;
|
||||
|
@ -400,6 +440,32 @@ nav li {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// ---- ---- list
|
||||
.list-item {
|
||||
&.logs {
|
||||
.track {
|
||||
margin-right: v.$mp-3;
|
||||
.icon {
|
||||
margin-right: v.$mp-2;
|
||||
color: var(--secondary-color-dark);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:nth-child(3n):not(.wide) .media,
|
||||
{
|
||||
border-color: var(--main-color-dark) !important;
|
||||
}
|
||||
|
||||
&:nth-child(3n+1):not(.wide) .media,
|
||||
{
|
||||
border-color: var(--secondary-color-dark) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ---- responsive
|
||||
body { font-size: 1.4em; }
|
||||
|
||||
|
@ -420,22 +486,4 @@ body { font-size: 1.4em; }
|
|||
margin-right: v.$mp-2;
|
||||
}
|
||||
|
||||
.container.header {
|
||||
width: calc( 100% - v.$mp-2 );
|
||||
|
||||
.headings {
|
||||
width: 100%;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.header-cover {
|
||||
float: none;
|
||||
width: 100%;
|
||||
max-width: unset;
|
||||
height: unset;
|
||||
margin-left: 0rem;
|
||||
margin-right: 0rem;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -45,9 +45,8 @@ $weight-bolder: 500;
|
|||
$weight-bold: 700;
|
||||
|
||||
$screen-very-small: 400px;
|
||||
//TODO: switch small & smaller
|
||||
$screen-small: 600px;
|
||||
$screen-smaller: 800px;
|
||||
$screen-smaller: 900px;
|
||||
$screen-normal: 1024px;
|
||||
$screen-wider: 1280px;
|
||||
$screen-wide: 1380px;
|
||||
|
|
|
@ -10,6 +10,7 @@ $title-color: #000;
|
|||
|
||||
@import "~bulma/sass/base/_all";
|
||||
@import "~bulma/sass/components/dropdown";
|
||||
// @import "~bulma/sass/components/card";
|
||||
@import "~bulma/sass/components/media";
|
||||
@import "~bulma/sass/components/message";
|
||||
@import "~bulma/sass/components/modal";
|
||||
|
|
|
@ -1,24 +1,31 @@
|
|||
<template>
|
||||
<section class="a-carousel">
|
||||
<nav class="a-carousel-button-container" v-if="showPrevButton">
|
||||
<button :class="[buttonClass, 'prev']" aria-label="Go left" @click="prev">
|
||||
<span class="icon">
|
||||
<i :class="leftButtonIcon"></i>
|
||||
</span>
|
||||
</button>
|
||||
</nav>
|
||||
<div class="a-carousel-button-container" v-if="showNextButton">
|
||||
<button :class="[buttonClass, 'next']" aria-label="Go left" @click="next">
|
||||
<span class="icon">
|
||||
<i :class="rightButtonIcon"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<nav ref="viewport" class="a-carousel-viewport">
|
||||
<section ref="container" :class="['a-carousel-container', containerClass]">
|
||||
<slot name="default"></slot>
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
<nav class="a-carousel-bullets-container">
|
||||
<span class="left">
|
||||
<span class="icon bullet" @click="prev()" v-if="showPrev">
|
||||
<i :class="leftButtonIcon"></i>
|
||||
</span>
|
||||
</span>
|
||||
<template v-if="bullets.length > 1">
|
||||
<span class="icon bullet" v-bind:key="bullet" v-for="bullet of bullets" @click="select(bullet)">
|
||||
<i v-if="bullet == index" class="fa fa-circle"></i>
|
||||
<i v-else class="far fa-circle"></i>
|
||||
</span>
|
||||
</template>
|
||||
<span class="right">
|
||||
<span class="icon bullet" @click="next()" v-if="showNext">
|
||||
<i :class="rightButtonIcon"></i>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<slot name="bullets-right" :v-bind="this"></slot>
|
||||
</nav>
|
||||
</section>
|
||||
</template>
|
||||
<style scoped>
|
||||
|
@ -29,7 +36,7 @@
|
|||
|
||||
.a-carousel-viewport {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.a-carousel-container {
|
||||
|
@ -42,10 +49,67 @@
|
|||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.a-carousel-bullets-container {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.a-carousel-bullets-container .bullet {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.a-carousel-bullets-container .left {
|
||||
min-width: 2rem;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.a-carousel-bullets-container .right {
|
||||
min-width: 2rem;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.a-carousel-bullets-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
import {ref} from 'vue'
|
||||
|
||||
|
||||
class Offset {
|
||||
constructor(el, min=null, max=null) {
|
||||
this.el = el
|
||||
this.rect = el.getBoundingClientRect();
|
||||
({min, max} = this.minmax(min, max))
|
||||
this.min = min
|
||||
this.max = max
|
||||
this.size = max-min
|
||||
}
|
||||
|
||||
minmax(min=null, max=null) {
|
||||
min = min === null ? this.rect.left : min
|
||||
max = max === null ? this.rect.right : max
|
||||
return {min, max}
|
||||
}
|
||||
|
||||
relative(to) {
|
||||
return new Offset(this.el, this.min-to.min, this.max-to.min)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Card extends Offset {
|
||||
constructor(el, index) {
|
||||
super(el)
|
||||
this.index = index
|
||||
}
|
||||
|
||||
visible(viewportOffset) {
|
||||
return viewportOffset.min <= this.min && viewportOffset.max >= this.max
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
return {
|
||||
|
@ -72,109 +136,89 @@ export default {
|
|||
|
||||
computed: {
|
||||
card() { return this.cards()[this.index] },
|
||||
showPrevButton() {
|
||||
|
||||
showPrev() {
|
||||
return this.index > 0
|
||||
},
|
||||
showNextButton() {
|
||||
|
||||
showNext() {
|
||||
if(!this.cards || this.cards.length <= 1)
|
||||
return false
|
||||
|
||||
let { count } = this.visibility
|
||||
return (this.index + count) < this.cards.length
|
||||
let last = this.bullets[this.bullets.length-1]
|
||||
return this.index != last
|
||||
},
|
||||
|
||||
visibility() {
|
||||
// force refresh on index
|
||||
[this.index, this.refresh_]
|
||||
bullets() {
|
||||
if(!this.cards || !this.$refs.viewport)
|
||||
return []
|
||||
|
||||
if(!this.cards)
|
||||
return {min: -1, max: -1, count: 0};
|
||||
let contOff = new Offset(this.$refs.container)
|
||||
let viewMax = new Offset(this.$refs.viewport).size
|
||||
let bullets = []
|
||||
|
||||
const vOff = this.offset(this.$refs.viewport)
|
||||
var [min, max] = [-1, -1]
|
||||
for(let at=0; at < this.cards.length; at++) {
|
||||
const card = this.cards[at]
|
||||
const cOff = this.offset(card)
|
||||
const visible = vOff.min <= cOff.min && vOff.max >= cOff.max
|
||||
if(visible) {
|
||||
if(min === -1)
|
||||
min = parseInt(at)
|
||||
max = parseInt(at)
|
||||
let i = 0;
|
||||
let max = viewMax
|
||||
bullets.push(i)
|
||||
while(i < this.cards.length) {
|
||||
// skip until next view
|
||||
for(; i < this.cards.length; i++) {
|
||||
let card = this.cards[i].relative(contOff)
|
||||
if(card.max > max) {
|
||||
max = card.min + viewMax
|
||||
bullets.push(i)
|
||||
i++
|
||||
break
|
||||
}
|
||||
}
|
||||
if(max !== -1)
|
||||
max++
|
||||
return {
|
||||
min, max,
|
||||
count: (min !== -1) ? max-min : 0
|
||||
}
|
||||
return bullets
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
offset(el, parent=null) {
|
||||
const rect = el.getBoundingClientRect()
|
||||
const off = {min: rect.left, max: rect.right }
|
||||
if(parent === null)
|
||||
return off
|
||||
|
||||
const pOff = this.offset(parent)
|
||||
return {
|
||||
min: off.min - pOff.min,
|
||||
max: off.max - pOff.max,
|
||||
}
|
||||
},
|
||||
|
||||
getCards() {
|
||||
if(!this.$refs.container)
|
||||
return []
|
||||
if(!this.cardSelector)
|
||||
return this.$refs.container.children
|
||||
return this.$refs.container.querySelectorAll(this.cardSelector)
|
||||
let nodes = (!this.cardSelector) ?
|
||||
[...this.$refs.container.children] :
|
||||
[...this.$refs.container.querySelectorAll(this.cardSelector)]
|
||||
return nodes.map((el, index) => new Card(el, index))
|
||||
},
|
||||
|
||||
selectIndex(index, relative=false) {
|
||||
select(index, relative=false) {
|
||||
if(relative)
|
||||
index = this.index + index
|
||||
|
||||
index = Math.min(this.cards.length, index)
|
||||
const el = this.cards[index]
|
||||
if(!el)
|
||||
index = Math.min(index, this.cards.length)
|
||||
index = Math.max(index, 0)
|
||||
let card = this.cards[index]
|
||||
if(!card)
|
||||
return null;
|
||||
const elOff = this.offset(el, this.$refs.container)
|
||||
this.$refs.container.style.marginLeft = `-${elOff.min}px`
|
||||
|
||||
card = new Card(card.el)
|
||||
const cont = new Offset(this.$refs.container)
|
||||
const rel = card.relative(cont)
|
||||
this.$refs.container.style.marginLeft = `-${rel.min}px`
|
||||
this.index = index;
|
||||
return el
|
||||
return card.el
|
||||
},
|
||||
|
||||
next() {
|
||||
this.refresh_++
|
||||
|
||||
if(!this.visibility.count)
|
||||
return
|
||||
let {count} = this.visibility
|
||||
let at = Math.min(
|
||||
count === 1 ? this.index+count : this.index+count-1,
|
||||
this.cards.length-count
|
||||
)
|
||||
this.selectIndex(at)
|
||||
let n = this.bullets.indexOf(this.index)
|
||||
let index = this.bullets[n+1]
|
||||
this.select(index)
|
||||
},
|
||||
|
||||
prev() {
|
||||
this.refresh_++
|
||||
|
||||
if(!this.visibility.count)
|
||||
return
|
||||
const {min, count} = this.visibility
|
||||
let at = Math.max(0, min-count)
|
||||
if(min < 0 || count <= 0)
|
||||
return
|
||||
this.selectIndex(at)
|
||||
let n = this.bullets.indexOf(this.index)
|
||||
let index = this.bullets[n-1]
|
||||
this.select(index)
|
||||
},
|
||||
|
||||
refresh() {
|
||||
this.cards = this.getCards()
|
||||
this.selectIndex(this.index)
|
||||
this.select(this.index)
|
||||
this.refresh_++
|
||||
}
|
||||
},
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
<template>
|
||||
<div>
|
||||
<slot :page="page" :podcasts="podcasts"></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
|
7
assets/src/public.js
Normal file
7
assets/src/public.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
import "./assets/public.scss"
|
||||
import './index.js'
|
||||
import App from './app.js'
|
||||
|
||||
export default App
|
||||
|
||||
window.App = App
|
Binary file not shown.
Binary file not shown.
|
@ -238,6 +238,7 @@ TEMPLATES = [
|
|||
"django.template.context_processors.static",
|
||||
"django.template.context_processors.tz",
|
||||
"django.contrib.messages.context_processors.messages",
|
||||
"aircox.context_processors.station",
|
||||
),
|
||||
"loaders": (
|
||||
"django.template.loaders.filesystem.Loader",
|
||||
|
@ -249,3 +250,5 @@ TEMPLATES = [
|
|||
|
||||
|
||||
WSGI_APPLICATION = "instance.wsgi.application"
|
||||
|
||||
LOGOUT_REDIRECT_URL = "/"
|
||||
|
|
|
@ -23,6 +23,7 @@ import aircox.urls
|
|||
|
||||
urlpatterns = aircox.urls.urls + [
|
||||
path("admin/", admin.site.urls),
|
||||
path("accounts/", include("django.contrib.auth.urls")),
|
||||
path("ckeditor/", include("ckeditor_uploader.urls")),
|
||||
path("filer/", include("filer.urls")),
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue
Block a user