From d2a65bd1fec313f27ceb9c4165367efef06fb68d Mon Sep 17 00:00:00 2001 From: bkfox Date: Mon, 12 Dec 2022 12:29:05 +0100 Subject: [PATCH] various fixes --- aircox/locale/fr/LC_MESSAGES/django.mo | Bin 13507 -> 14363 bytes aircox/locale/fr/LC_MESSAGES/django.po | 294 +++++++++++------- aircox/static/aircox/js/chunk-common.js | 10 +- .../admin/aircox/playlist_inline.html | 4 +- aircox/templates/admin/aircox/statistics.html | 8 +- aircox/templatetags/aircox_admin.py | 26 +- assets/src/components/APlaylistEditor.vue | 34 +- assets/src/components/ARow.vue | 56 +++- assets/src/components/ARows.vue | 50 +-- 9 files changed, 282 insertions(+), 200 deletions(-) diff --git a/aircox/locale/fr/LC_MESSAGES/django.mo b/aircox/locale/fr/LC_MESSAGES/django.mo index 05d7605897fec576c42d986c9b87dbe43f0ab52b..9494df1cc59790fefceb0aa6220e9ae3aa7a5978 100644 GIT binary patch delta 6104 zcmZA3349dQ0mtzd!Vzvl!jXuu1Ohq05DtY3N)RkyK_G^TQgO)+aUt0ayBjfB*-{IN zQlqSj2!d5XffB3Hs)(Qlfl|4oqPBp5D2kvQQg74Wf9LI|w)5ei@0&L>@0{JG-oLyu zdboY#hYUvp=|a*|jJYw%m{#pnYs_sOjNzZD=1)hg!DhGyyJD@a-(}B_+w){@*8Q2* zLTttPXl#ik*u>S!J^CbJM*V+}UN$B+ihQ#c6M;ZQt+E%4$_ z?sGZVmh(bXdqvhU@#|4zCQ@k5g&QyxeW-!lis?8P+h7g0$Car2pTkUi71iMZR7Xdx zXHf%A>TFD7Y>Qffbksn)V+#G7Tnf6eKWaw9Q8T<68{s%q0~1gkm)P@Zs0MwgfzL(_ z;7-&M$4~=bg_=+;s^jNT?QO)U3R@_s;jO5F?6&6zQ8W9*)}OWY4XBlAp5fl#71d53 zYaym_ekp3}#v+ShijjY27Js_of(-WGLt!-)8re3~1G`Zpe-AaoPi*~p)J%Us-QR}w z*Lg?O`P zjp|^Zz5XGpowKNw{0`Ml zV$=YZqCT!GFbiKncEudD*DqjvAgJ~lbF*w=ZD);kw1qCHCC@@WL8cJZ@o0PfT2#j+ zsD^K_=RVYZew>DtsE+oc+B<++>W@*+okmUgYvj48X??MKAsw|uT~Q76vGx5?OFIgWP$gg>E{Hl43I zb#NK#V>ApkkRnurV^H@O+j>8$o!O`X%|+c8MZJ8BPy=`v3+Ug}Q_x#_9@S9;cEcw8 z(My?)vv3&d`dZXW`7Ek~H!vHw+4@tq{wLHxl0ELqwnA-HChF7D9iwWnKLt4$b;A{? zhDX`+v8ZppiKv&*hq@j_7Rf|V6IgbN!gstI?QL=$wAZ)T^PQ+~$URY8 z@eyhUpP~kG4*3o--=jv_v4?9HRD)Tlj(X!DEWl)RkVzUp7UI3AkKt>mcHTz4JMZ9V zj2@?uPoZy5_pO|Q>R=)2fqOAO$(RRFTku-8`~9#Vwe%-Z1N{coa9S_-izyp5!x7fW z)|sfSn}@tpQBy;q2^CMEI(P;(fX%2CsYlIp7iwkRMZJuNZT(r)^WWkyY`}>)thf78 z)}Xd#IqK822G!2y_;vPwI|aQg`>jW;r%?m>4%r3MfZFq{9QV8Xa@33`Ad6_GqXxDR zwdBiC9X^9vsn@X??nX`Y0LFj+Pf^fJFQAsJ0X3tvT=yl)Kt1TO=Ab(0hZ^9Os3jeV z>aYaWK?UkZ=1$Z=AHif?hx%01V*K}iGX*tNj~eL?R6_?)4}O7~naOh>OheW8K&{9i z)NjUkOhE@VfdKMLZ6db*KGaGs#cbS|$NsZj<_Hz^VVdzKYNmy#hK8VKG6I|9_1F@p zqrT$4G22DRm_`>_A&Fq1E2J&=WJxG$>1F{lTN zQ7bYHwe)jr{X$fOOHeEEEULX7s0r+~et>H480s7I6l%gPqJ7bXv+_M<)Qg*?>A`=R!1Flw(R zp=MHrdSD)^fdv>Jh^=3V>TosQf$QygZh^Zc1*rDNqE=!Ovb9k&)m{jp8lH=4cp<98 zn7#feYKxvg-M0aI<16<1QG5L})JlDY{E(V&QJ<>L{oMBYpaw7ihtt0qMxh-Q^X!Eh zRL9G(H9n4Ns1`NDU8pVDk6M}cPz@eIy{souGu8L6uBV{RQ&AJhz&6+u^XcCVpwJ(u zp=P!O^}tHZ!!@Xe_u*1Jff`7Zhf;9?YQ{@38&{w{j&Gs{`T=S}hfotbj#}Y!7*zue z6x3kq0M|~a2QEf6+|!=tVtdZ}p=NTGtsjs2(J8@pI0rR>yHP7}Kc?X_)W9~N-m$F% zSbr_uVJg(Xr>KTo3^eiYg$~xCsFf&1HEf^V;p6|rAobN+Df7I50 zhHB>wYUwZ7^G4B2-92oE+JX#gH`I;U*aQ39`pKvjn~G|12CAc3I1ge@hwz`Cs8wOGuRzi2jss2<}-39xs8k>iQ~~k0ZYj{ zL@U#QXlr8RW^#(?c%K}mfAcB@jbtd%al1?Wx4ee3_D{!GL^Hpd@V=TugnLPxg@AL?5d#NgP32(9-JA+pHH$ z$Mxjdc**_qXV6OOJLE(1TcSfR@Tcm(f!t4$$zbw3GMm(s8;SOJEYY#u#q_n-S^sYR zr&aA9v*iT(U3iK7gG6kl?lbR_S>#(Xf;>%rek|qWgso^~ZEJnY$_s6LWF1*gCX+Md za&im#7pWp!$ah3X5ADB>Ji-fVp3;duUdFeHpWI~YI^oCUG#N+Ek!qqZv3^9yFI?g; z^L@5_5-%b{$SU#)(Q#1y@1Sr+{M7w39A=QMm zj=W~i#avr1!ItDB@=LOU{N&+JZ<09vM!`dVO+F`&#}1_(ZRhiOyq-wNTRO`Wl~1p# zh;2$A+$a=@eVP7blk%#HKsZ*@VO<-4xYQf+c}j2b2Fjdp-DMq1k_x=l<^FKQGs@?W z1Vf&yg7Le}g!2EbFLo-uAuo5-E$Wn=)VLyes}oz_IX9))iA4N?vT$s7=Z%fLWw8Yr zQ`7tvj=7FM;fS}Ql2WAHiG7&SEoDM5?2q_^f!Nm>*=Z$VCuAo3ojD#V9W%x8hGN;7 zGm{y6-Qvu#P3sPN%92`CQ*Cbdd8_ZJ8}$5Y7ym^-}7s6famV<;i@>h+Wc z12g<(Rji)oUYmQSdHte@e|8ls7h9fpQ|f41X2G0_%CHtIvIBeShv8@oRLuEu%`>JH^!(yT6Z!1GD1y}IDIYia%i Dg;v-; delta 5292 zcmYk-34Bdg0>|<5NFoxAwXr04L7tEW70b-j+D=F@#uAjMl!-~i+E~gk&sJ%akg|Rp|;W)q|=!)9fs+rzyG@@pO5qL&-dK(?mgRGteJcu+kd4_ z&!WtSAg$+;>NJbtHlZv`- z6l%b1>m*b^(@o?X4>-Wg*GY?Q5*5rxQ`H`rBqfzZX z9EFLfi7!R%%v#iWC8!B+L7jilw)>A$(F)I@I{w=Ja2vHV_fQ=@M$I^gZP0OJ)cLWf zEsaP1nYR4V!`c`1dpc?YqcH);qi$W1`@7$~OGN{1M$K>+YKxA$CzyYtp7Q&sfghkc z)PCyxFjTu2)lVF1LhVrJbwmx=9W{Y|*al}|xZeL#Dw^qT)YJSC>LI#}Ie6dxp3&HS zn8u<8cok!Dj&0vy+jpTRvKO_p2T)u71?u6xfEw?%WPJ0TJ>fs7jvw1&58qdPkU~)p zQ55QTA99L`N4*uPr~%SY1E-?~&P44{F6!3hqju^Y+g^%(ZBaQDt>l>XU)YM{NVY>A zbVm&^1hs;Zr~xLTuAgn&7ooO#73vu%vF=0-d=Rzr6X?a$P1%3V_#O@NF=~auUiZW> zUErj>MtMlL0X2rvDi-~p2{86 z(;3O5AMY{dIn>rqYVN-Ouc5YlEoy?LsE!UH&!;($TG@STXbbl^8g-_0dw34x?9hiuE=w_g1ycoM+0S>^EsE5uQ>uzlV>TT(SYVVJF21Z!3tkW=v_W7vS zI}f>)ep5yxbQQ4{Tq>L&$t z-AkwiO-5a}K<$ig94dOMH=@4vAEQ=u4z+?S$mieOwCz74b1~K8+}AV-t8qLGbzKH( z;@KFu$EaJAk9<7M3fsON{aV>RDtf3+p>0fT!H=q`}6?Og5R`&frMMEeJ7qL3tKz-pVkbfquwR@b5UXBN%wm26< za2{60*HO1(32LHmqTY^m$fw2ZL-l(JHPMHy*?)Bq9Pe&*4b;r)pq|o3sEKt!otJ{@ zxF71)497W`f!e_O6mMD%#5asE$UWRyG^8rSnlc zun5)RGStIWgqrYH`}-byT#j16QPjOZgKUPmfzMz>lDn`T$n}2Hj|#WLq@g;Vi>q)Y zY9dMeXRX&K8MWdRjKw~vw`B?j?mcQnOYkXlum%>RuHS;{uiSbVL-hWiprVe?1RD4N zq2AN0sFi$g+y9SzrA<&C*K&>J>T&m8cyo##*=sHSkf?vveADE3Tlf3*&zH z)low#+JP9Anh1dPKe_-kB^n&4g34n9JC(1MbU z$-su#0%s+&{~CBb4g9YgD5ciFT36yNa+YWk?4GG0D@bL@q@pjI%2XFK!nzTUl7-}| zZR>+eNxJU;4zisT6RpBa))9TFjuVyLgv|+*?))9=R?YA5D_hs=JBxft>X0{xZlg*p zIYBar%3ks};@5-HiKzUZ=xe5@Hkhc)C;iEDIln>OH|Gfy*esuN!LJ)|3FX=sES@ay*8ss8TlotN-E0?Dld}rB;Ph(Lf+~? z`If)+$k*fmnLyst`X`YAV}t@J-wQ_`HMoFX?#4jD{Tl1LYFf%u4u{_j`$BUwh?CpC%6 zAQ!U)Q*Av3UnaYB{{u7NAci=kH+h~UlMji?MHf?KeUil-oF?Z;3(|{RBUOk#S}NUK z0)G>qs0W_Eku+>2we1h}t=p_W#}G1;G$ZAt2N_R3BV$N=vWDy=eaYu!ANeh*Eb&x^ zk=3>#O;)acIQ5T6D9I*MNCBBnJ|J_+pNL8Vd4((|-;hltj|?Gq$X)UYxj}wGwva!Q zXGs`&ji}rvHP#2J{PFgj>6FJdc8Z?f?_@=GbT&q=bNbYOudGUgL7uX_hRr 1);\n" -#: aircox/admin/episode.py:29 aircox/models/episode.py:183 +#: aircox/admin/episode.py:27 aircox/models/episode.py:183 #: aircox/models/log.py:82 msgid "start" msgstr "début" -#: aircox/admin/episode.py:33 aircox/models/episode.py:184 -#: aircox/models/program.py:473 +#: aircox/admin/episode.py:31 aircox/models/episode.py:184 +#: aircox/models/program.py:469 msgid "end" msgstr "fin" @@ -52,7 +52,7 @@ msgstr "Tout" msgid "Publication Settings" msgstr "Paramètre de la publication" -#: aircox/admin/program.py:40 aircox/models/program.py:286 +#: aircox/admin/program.py:40 aircox/models/program.py:282 msgid "Schedule" msgstr "Horaire" @@ -60,7 +60,7 @@ msgstr "Horaire" msgid "Program Settings" msgstr "Paramètres de l'émission" -#: aircox/admin/program.py:64 aircox/models/program.py:122 +#: aircox/admin/program.py:64 aircox/models/program.py:118 msgid "Program" msgstr "Émission" @@ -68,23 +68,25 @@ msgstr "Émission" msgid "Day" msgstr "Jour" -#: aircox/admin/sound.py:35 aircox/admin/sound.py:67 +#: aircox/admin/sound.py:37 aircox/admin/sound.py:71 msgid "Audio" msgstr "Audio" -#: aircox/admin/sound.py:63 +#: aircox/admin/sound.py:65 msgid "Program / Episode" msgstr "Émission / Épisode" -#: aircox/admin/sound.py:81 aircox/templates/aircox/episode_detail.html:36 +#: aircox/admin/sound.py:100 +#: aircox/templates/admin/aircox/playlist_inline.html:20 +#: aircox/templates/aircox/episode_detail.html:36 msgid "Playlist" msgstr "Playlist" -#: aircox/admin/sound.py:82 +#: aircox/admin/sound.py:102 msgid "Info" msgstr "Info" -#: aircox/admin/sound.py:96 aircox/models/sound.py:243 +#: aircox/admin/sound.py:116 aircox/models/sound.py:240 msgid "timestamp" msgstr "temps" @@ -92,8 +94,8 @@ msgstr "temps" msgid "Statistics" msgstr "Statistiques" -#: aircox/filters.py:8 aircox/templates/admin/base.html:81 -#: aircox/templates/admin/base.html:95 aircox/templates/admin/base.html:109 +#: aircox/filters.py:8 aircox/templates/admin/base.html:84 +#: aircox/templates/admin/base.html:98 aircox/templates/admin/base.html:112 #: aircox/templates/aircox/base.html:78 #: aircox/templates/aircox/page_list.html:15 msgid "Search" @@ -103,24 +105,24 @@ msgstr "Chercher" msgid "Podcast" msgstr "Podcast" -#: aircox/management/commands/sounds_monitor.py:204 +#: aircox/management/commands/sounds_monitor.py:205 msgid "unknown" msgstr "inconnu" -#: aircox/models/article.py:14 +#: aircox/models/article.py:16 msgid "Article" msgstr "Article" -#: aircox/models/article.py:15 aircox/templates/admin/base.html:92 +#: aircox/models/article.py:17 aircox/templates/admin/base.html:95 #: aircox/templates/aircox/program_detail.html:19 msgid "Articles" msgstr "Articles" -#: aircox/models/episode.py:52 +#: aircox/models/episode.py:52 aircox/templates/admin/aircox/statistics.html:23 msgid "Episode" msgstr "Épisode" -#: aircox/models/episode.py:53 aircox/templates/admin/base.html:106 +#: aircox/models/episode.py:53 aircox/templates/admin/base.html:109 msgid "Episodes" msgstr "Épisodes" @@ -136,8 +138,8 @@ msgstr "non confirmé" msgid "cancelled" msgstr "annulé" -#: aircox/models/episode.py:174 aircox/models/sound.py:102 -#: aircox/models/sound.py:233 aircox/templates/admin/aircox/statistics.html:23 +#: aircox/models/episode.py:174 aircox/models/sound.py:99 +#: aircox/models/sound.py:230 msgid "episode" msgstr "épisode" @@ -146,7 +148,7 @@ msgid "schedule" msgstr "horaire" #: aircox/models/episode.py:181 aircox/models/log.py:91 -#: aircox/models/sound.py:105 aircox/models/station.py:142 +#: aircox/models/sound.py:102 aircox/models/station.py:142 msgid "type" msgstr "type" @@ -171,12 +173,12 @@ msgstr "rediffusion" msgid "stop" msgstr "stop" -#: aircox/models/log.py:84 aircox/models/sound.py:89 +#: aircox/models/log.py:84 aircox/models/sound.py:86 msgid "other" msgstr "autre" #: aircox/models/log.py:89 aircox/models/page.py:248 -#: aircox/models/program.py:55 aircox/models/station.py:139 +#: aircox/models/program.py:54 aircox/models/station.py:139 msgid "station" msgstr "station" @@ -184,7 +186,7 @@ msgstr "station" msgid "related station" msgstr "station relative" -#: aircox/models/log.py:92 aircox/models/program.py:254 +#: aircox/models/log.py:92 aircox/models/program.py:250 msgid "date" msgstr "date" @@ -200,11 +202,12 @@ msgstr "identifiant de la source relative à ce log" msgid "comment" msgstr "commentaire" -#: aircox/models/log.py:107 aircox/models/sound.py:146 +#: aircox/models/log.py:107 aircox/models/sound.py:143 msgid "Sound" msgstr "Son" #: aircox/models/log.py:112 aircox/models/sound.py:259 +#: aircox/templates/admin/aircox/statistics.html:24 msgid "Track" msgstr "Morceau" @@ -217,7 +220,7 @@ msgid "Logs" msgstr "Logs" #: aircox/models/page.py:30 aircox/models/page.py:251 -#: aircox/models/sound.py:247 +#: aircox/models/sound.py:244 msgid "title" msgstr "titre" @@ -338,8 +341,8 @@ msgstr "Commentaires" msgid "menu" msgstr "menu" -#: aircox/models/page.py:250 aircox/models/sound.py:107 -#: aircox/models/sound.py:240 +#: aircox/models/page.py:250 aircox/models/sound.py:104 +#: aircox/models/sound.py:237 msgid "order" msgstr "ordre" @@ -359,234 +362,239 @@ msgstr "Élément du menu" msgid "Menu items" msgstr "Éléments de menu" -#: aircox/models/program.py:57 aircox/models/station.py:52 +#: aircox/models/program.py:56 aircox/models/station.py:52 #: aircox/models/station.py:144 msgid "active" msgstr "actif" -#: aircox/models/program.py:59 +#: aircox/models/program.py:58 msgid "if not checked this program is no longer active" msgstr "si selectionné, cette émission n'est plus active" -#: aircox/models/program.py:62 +#: aircox/models/program.py:61 msgid "syncronise" msgstr "synchroniser" -#: aircox/models/program.py:64 +#: aircox/models/program.py:63 msgid "update later diffusions according to schedule changes" msgstr "met à jour les dates de diffusion à venir lorsque l'horaire change" -#: aircox/models/program.py:123 aircox/templates/admin/base.html:78 +#: aircox/models/program.py:119 aircox/templates/admin/base.html:81 msgid "Programs" msgstr "Émissions" -#: aircox/models/program.py:178 aircox/models/program.py:461 +#: aircox/models/program.py:174 aircox/models/program.py:457 msgid "related program" msgstr "émission apparentée" -#: aircox/models/program.py:182 +#: aircox/models/program.py:178 msgid "rerun of" msgstr "rediffusion de" -#: aircox/models/program.py:226 +#: aircox/models/program.py:222 msgid "rerun must happen after original" msgstr "la rediffusion doit être après l'original" -#: aircox/models/program.py:254 +#: aircox/models/program.py:250 msgid "date of the first diffusion" msgstr "date de la première diffusion" -#: aircox/models/program.py:257 -#: aircox/templates/admin/aircox/statistics.html:22 +#: aircox/models/program.py:253 msgid "time" msgstr "heure" -#: aircox/models/program.py:257 +#: aircox/models/program.py:253 msgid "start time" msgstr "heure de début" -#: aircox/models/program.py:260 +#: aircox/models/program.py:256 msgid "timezone" msgstr "zone horaire" -#: aircox/models/program.py:263 +#: aircox/models/program.py:259 msgid "timezone used for the date" msgstr "zone horaire utilisée pour la date" -#: aircox/models/program.py:266 aircox/models/sound.py:120 +#: aircox/models/program.py:262 aircox/models/sound.py:117 msgid "duration" msgstr "durée" -#: aircox/models/program.py:267 +#: aircox/models/program.py:263 msgid "regular duration" msgstr "durée normale" -#: aircox/models/program.py:270 +#: aircox/models/program.py:266 msgid "frequency" msgstr "fréquence" -#: aircox/models/program.py:272 +#: aircox/models/program.py:268 msgid "ponctual" msgstr "ponctuel" -#: aircox/models/program.py:273 +#: aircox/models/program.py:269 #, python-brace-format msgid "1st {day} of the month" msgstr "1er {day} du mois" -#: aircox/models/program.py:274 +#: aircox/models/program.py:270 #, python-brace-format msgid "2nd {day} of the month" msgstr "2ème {day} du mois" -#: aircox/models/program.py:275 +#: aircox/models/program.py:271 #, python-brace-format msgid "3rd {day} of the month" msgstr "3ème {day} du mois" -#: aircox/models/program.py:276 +#: aircox/models/program.py:272 #, python-brace-format msgid "4th {day} of the month" msgstr "4ème {day} du mois" -#: aircox/models/program.py:277 +#: aircox/models/program.py:273 #, python-brace-format msgid "last {day} of the month" msgstr "dernier {day} du mois" -#: aircox/models/program.py:278 +#: aircox/models/program.py:274 #, python-brace-format msgid "1st and 3rd {day} of the month" msgstr "1er et 3ème {day} du mois" -#: aircox/models/program.py:279 +#: aircox/models/program.py:275 #, python-brace-format msgid "2nd and 4th {day} of the month" msgstr "2ème et 4ème {day} du mois" -#: aircox/models/program.py:280 -#, fuzzy, python-brace-format -#| msgid "every {day}" +#: aircox/models/program.py:276 msgid "{day}" msgstr "{day}" -#: aircox/models/program.py:281 +#: aircox/models/program.py:277 #, python-brace-format msgid "one {day} on two" msgstr "un {day} sur deux" -#: aircox/models/program.py:287 +#: aircox/models/program.py:283 msgid "Schedules" msgstr "Horaires" -#: aircox/models/program.py:464 +#: aircox/models/program.py:460 msgid "delay" msgstr "délai" -#: aircox/models/program.py:465 +#: aircox/models/program.py:461 msgid "minimal delay between two sound plays" msgstr "délai minimum entre deux sons joués" -#: aircox/models/program.py:468 +#: aircox/models/program.py:464 msgid "begin" msgstr "début" -#: aircox/models/program.py:469 aircox/models/program.py:475 +#: aircox/models/program.py:465 aircox/models/program.py:471 msgid "used to define a time range this stream is played" msgstr "" "utilisé pour définir un intervalle de temps pendant lequel ce stream est joué" -#: aircox/models/sound.py:89 +#: aircox/models/sound.py:86 msgid "archive" msgstr "archive" -#: aircox/models/sound.py:90 +#: aircox/models/sound.py:87 msgid "excerpt" msgstr "extrait" -#: aircox/models/sound.py:90 +#: aircox/models/sound.py:87 msgid "removed" msgstr "supprimé" -#: aircox/models/sound.py:93 aircox/models/station.py:37 +#: aircox/models/sound.py:90 aircox/models/station.py:37 msgid "name" msgstr "nom" -#: aircox/models/sound.py:96 +#: aircox/models/sound.py:93 msgid "program" msgstr "émission" -#: aircox/models/sound.py:97 +#: aircox/models/sound.py:94 msgid "program related to it" msgstr "émission apparentée à celui-ci" -#: aircox/models/sound.py:107 aircox/models/sound.py:240 +#: aircox/models/sound.py:104 aircox/models/sound.py:237 msgid "position in the playlist" msgstr "position dans la playlist" -#: aircox/models/sound.py:116 aircox/models/station.py:135 +#: aircox/models/sound.py:113 aircox/models/station.py:135 msgid "file" msgstr "fichier" -#: aircox/models/sound.py:122 +#: aircox/models/sound.py:119 msgid "duration of the sound" msgstr "durée du son" -#: aircox/models/sound.py:125 +#: aircox/models/sound.py:122 msgid "modification time" msgstr "dernière modification" -#: aircox/models/sound.py:127 +#: aircox/models/sound.py:124 msgid "last modification date and time" msgstr "date et heure de la dernière modification" -#: aircox/models/sound.py:130 +#: aircox/models/sound.py:127 msgid "good quality" msgstr "bonne qualité" -#: aircox/models/sound.py:130 +#: aircox/models/sound.py:127 msgid "sound meets quality requirements" msgstr "le son rencontre les exigences de qualité" -#: aircox/models/sound.py:134 +#: aircox/models/sound.py:131 msgid "public" msgstr "publique" -#: aircox/models/sound.py:134 +#: aircox/models/sound.py:131 msgid "whether it is publicly available as podcast" msgstr "coché pour rendre le podcast public" -#: aircox/models/sound.py:138 +#: aircox/models/sound.py:135 msgid "downloadable" msgstr "téléchargeable" -#: aircox/models/sound.py:139 +#: aircox/models/sound.py:136 msgid "" "whether it can be publicly downloaded by visitors (sound must be public)" msgstr "" "coché pour permettre le téléchargement public (le podcast doit être " "disponible publiquement)" -#: aircox/models/sound.py:147 +#: aircox/models/sound.py:144 msgid "Sounds" msgstr "Sons" -#: aircox/models/sound.py:237 +#: aircox/models/sound.py:234 msgid "sound" msgstr "son" -#: aircox/models/sound.py:245 +#: aircox/models/sound.py:242 msgid "position (in seconds)" msgstr "position (en secondes)" -#: aircox/models/sound.py:248 +#: aircox/models/sound.py:245 msgid "artist" msgstr "artiste" -#: aircox/models/sound.py:249 aircox/templates/admin/aircox/statistics.html:25 +#: aircox/models/sound.py:246 +msgid "album" +msgstr "album" + +#: aircox/models/sound.py:247 msgid "tags" msgstr "tags" +#: aircox/models/sound.py:248 +msgid "year" +msgstr "année" + #: aircox/models/sound.py:251 msgid "information" msgstr "information" @@ -677,6 +685,18 @@ msgstr "" "liste des paramètres disponibles séparés par des virgules; placé dans le " "fichier de configuration en tant que code brut; relatif au plugin utilisé" +#: aircox/models/user_settings.py:11 +msgid "User" +msgstr "Utilisateur" + +#: aircox/models/user_settings.py:14 +msgid "Playlist Editor Columns" +msgstr "Colonnes de l'éditeur de playlist" + +#: aircox/models/user_settings.py:16 +msgid "Playlist Editor Separator" +msgstr "Séparateur de l'éditeur de playlist" + #: aircox/templates/admin/aircox/filters/filter.html:2 #, python-format msgid " By %(filter_title)s " @@ -684,7 +704,7 @@ msgstr "Par %(filter_title)s " #: aircox/templates/admin/aircox/page_change_form.html:9 #: aircox/templates/admin/aircox/page_change_list.html:7 -#: aircox/templates/admin/base.html:163 +#: aircox/templates/admin/base.html:166 #: aircox/templates/admin/change_list.html:30 #: aircox/templates/aircox/base.html:54 msgid "Home" @@ -715,36 +735,46 @@ msgstr "Sauvegarder et continuer" msgid "Publish" msgstr "Publier" -#: aircox/templates/admin/aircox/statistics.html:24 -msgid "track" -msgstr "piste" +#: aircox/templates/admin/aircox/playlist_inline.html:33 +#: aircox/templates/admin/aircox/playlist_inline.html:34 +msgid "Track Position" +msgstr "Position dans la playlist" + +#: aircox/templates/admin/aircox/statistics.html:22 +msgid "Time" +msgstr "Heure" + +#: aircox/templates/admin/aircox/statistics.html:25 +#: aircox/templatetags/aircox_admin.py:52 +msgid "Tags" +msgstr "Étiquettes" #: aircox/templates/admin/aircox/statistics.html:67 msgid "Total" msgstr "Total" -#: aircox/templates/admin/base.html:65 aircox/templates/admin/index.html:11 +#: aircox/templates/admin/base.html:68 aircox/templates/admin/index.html:11 #: aircox/templates/aircox/home.html:47 msgid "Today" msgstr "Aujourd'hui" -#: aircox/templates/admin/base.html:121 +#: aircox/templates/admin/base.html:124 msgid "Tools" msgstr "Outils" -#: aircox/templates/admin/base.html:137 +#: aircox/templates/admin/base.html:140 msgid "View site" msgstr "Voir le site" -#: aircox/templates/admin/base.html:142 +#: aircox/templates/admin/base.html:145 msgid "Documentation" msgstr "Documentation" -#: aircox/templates/admin/base.html:146 +#: aircox/templates/admin/base.html:149 msgid "Change password" msgstr "Changer le mot de passe" -#: aircox/templates/admin/base.html:149 +#: aircox/templates/admin/base.html:152 msgid "Log out" msgstr "Se déconnecter" @@ -958,67 +988,108 @@ msgstr "Épisode en ce moment sur les ondes" msgid "Currently playing" msgstr "En ce moment" -#: aircox/urls.py:40 +#: aircox/templatetags/aircox_admin.py:51 +msgid "Artist" +msgstr "Artiste" + +#: aircox/templatetags/aircox_admin.py:51 +msgid "Album" +msgstr "Album" + +#: aircox/templatetags/aircox_admin.py:51 +msgid "Title" +msgstr "Titre" + +#: aircox/templatetags/aircox_admin.py:52 +msgid "Year" +msgstr "Année" + +#: aircox/templatetags/aircox_admin.py:53 +msgid "Save Settings" +msgstr "Enregistrer la configuration" + +#: aircox/templatetags/aircox_admin.py:54 +msgid "Discard changes" +msgstr "Annuler les changements" + +#: aircox/templatetags/aircox_admin.py:55 +msgid "Columns" +msgstr "Colonnes" + +#: aircox/templatetags/aircox_admin.py:56 +msgid "Add a track" +msgstr "Ajouter un morceau" + +#: aircox/templatetags/aircox_admin.py:57 +msgid "Remove" +msgstr "Supprimer" + +#: aircox/templatetags/aircox_admin.py:58 +#| msgid "timestamp" +msgid "Timestamp" +msgstr "Temps" + +#: aircox/urls.py:44 msgid "articles/" msgstr "articles/" -#: aircox/urls.py:43 +#: aircox/urls.py:47 msgid "articles//" msgstr "articles//" -#: aircox/urls.py:47 +#: aircox/urls.py:51 msgid "episodes/" msgstr "episodes/" -#: aircox/urls.py:49 +#: aircox/urls.py:53 msgid "episodes//" msgstr "episodes//" -#: aircox/urls.py:51 +#: aircox/urls.py:55 msgid "week/" msgstr "semaine/" -#: aircox/urls.py:53 +#: aircox/urls.py:57 msgid "week//" msgstr "semaine//" -#: aircox/urls.py:56 +#: aircox/urls.py:60 msgid "logs/" msgstr "logs/" -#: aircox/urls.py:57 +#: aircox/urls.py:61 msgid "logs//" msgstr "logs//" -#: aircox/urls.py:60 +#: aircox/urls.py:64 msgid "publications/" msgstr "publications/" -#: aircox/urls.py:63 +#: aircox/urls.py:67 msgid "pages/" msgstr "pages/" -#: aircox/urls.py:69 +#: aircox/urls.py:73 msgid "pages//" msgstr "pages//" -#: aircox/urls.py:76 +#: aircox/urls.py:80 msgid "programs/" msgstr "emissions/" -#: aircox/urls.py:78 +#: aircox/urls.py:82 msgid "programs//" msgstr "emissions//" -#: aircox/urls.py:80 +#: aircox/urls.py:84 msgid "programs//episodes/" msgstr "emissions//episodes/" -#: aircox/urls.py:82 +#: aircox/urls.py:86 msgid "programs//articles/" msgstr "emissions//articles/" -#: aircox/urls.py:84 +#: aircox/urls.py:88 msgid "programs//publications/" msgstr "emissions//publications/" @@ -1026,6 +1097,9 @@ msgstr "emissions//publications/" msgid "comments are not allowed" msgstr "les commentaires ne sont pas autorisés" +#~ msgid "track" +#~ msgstr "morceau" + #~ msgid "if it can be podcasted from the server" #~ msgstr "s'il peut être podcasté depuis le serveur" diff --git a/aircox/static/aircox/js/chunk-common.js b/aircox/static/aircox/js/chunk-common.js index 393dcb8..fe892c8 100644 --- a/aircox/static/aircox/js/chunk-common.js +++ b/aircox/static/aircox/js/chunk-common.js @@ -85,7 +85,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 export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Page\": function() { return /* binding */ Page; }\n/* harmony export */ });\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 lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n/* harmony import */ var _track__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../track */ \"./src/track.js\");\n/* harmony import */ var _AActionButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AActionButton */ \"./src/components/AActionButton.vue\");\n/* harmony import */ var _ARow_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ARow.vue */ \"./src/components/ARow.vue\");\n/* harmony import */ var _ARows_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ARows.vue */ \"./src/components/ARows.vue\");\n\n\n\n\n\n\n\n\n/// Page display\nconst Page = {\n Text: 0,\n List: 1,\n Settings: 2\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n AActionButton: _AActionButton__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n ARow: _ARow_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n ARows: _ARows_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n },\n props: {\n initData: Object,\n dataPrefix: String,\n labels: Object,\n settingsUrl: String,\n defaultColumns: {\n type: Array,\n default: () => ['artist', 'title', 'tags', 'album', 'year', 'timestamp']\n }\n },\n data() {\n const settings = {\n playlist_editor_columns: this.defaultColumns,\n playlist_editor_sep: ' -- '\n };\n return {\n Page: Page,\n page: Page.Text,\n set: new _model__WEBPACK_IMPORTED_MODULE_2__.Set(_track__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n extraData: {},\n settings,\n savedSettings: (0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(settings)\n };\n },\n computed: {\n settingsChanged() {\n var k = Object.keys(this.savedSettings).findIndex(k => !(0,lodash__WEBPACK_IMPORTED_MODULE_1__.isEqual)(this.settings[k], this.savedSettings[k]));\n return k != -1;\n },\n separator: {\n set(value) {\n this.settings.playlist_editor_sep = value;\n if (this.page == Page.List) this.updateInput();\n },\n get() {\n return this.settings.playlist_editor_sep;\n }\n },\n columns: {\n set(value) {\n var cols = value.filter(x => x in this.defaultColumns);\n var left = this.defaultColumns.filter(x => !(x in cols));\n value = cols.concat(left);\n this.settings.playlist_editor_columns = value;\n },\n get() {\n return this.settings.playlist_editor_columns;\n }\n },\n items() {\n return this.set.items;\n },\n rowsSlots() {\n return Object.keys(this.$slots).filter(x => x.startsWith('row-') || x.startsWith('rows-')).map(x => [x, x.startsWith('rows-') ? x.slice(5) : x]);\n }\n },\n methods: {\n onCellEvent(event) {\n switch (event.name) {\n case 'change':\n this.updateInput();\n break;\n }\n },\n formatMove({\n from,\n to\n }) {\n const value = this.columns[from];\n this.columns.splice(from, 1);\n this.columns.splice(to, 0, value);\n if (this.page == Page.Text) this.updateList();else this.updateText();\n },\n columnMove({\n from,\n to\n }) {\n const value = this.columns[from];\n this.columns.splice(from, 1);\n this.columns.splice(to, 0, value);\n this.updateInput();\n },\n listItemMove({\n from,\n to,\n set\n }) {\n set.move(from, to);\n this.updateInput();\n },\n updateList() {\n const items = this.toList(this.$refs.textarea.value);\n this.set.reset(items);\n },\n updateInput() {\n const input = this.toText(this.items);\n this.$refs.textarea.value = input;\n },\n /**\n * From input and separator, return list of items.\n */\n toList(input) {\n var lines = input.split('\\n');\n var items = [];\n for (let line of lines) {\n line = line.trimLeft();\n if (!line) continue;\n var lineBits = line.split(this.separator);\n var item = {};\n for (var col in this.columns) {\n if (col >= lineBits.length) break;\n const attr = this.columns[col];\n item[attr] = lineBits[col].trim();\n }\n item && items.push(item);\n }\n return items;\n },\n /**\n * From items and separator return a string\n */\n toText(items) {\n const sep = ` ${this.separator.trim()} `;\n const lines = [];\n for (let item of items) {\n if (!item) continue;\n var line = [];\n for (var col of this.columns) line.push(item.data[col] || '');\n line = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.dropRightWhile)(line, x => !x || !('' + x).trim());\n line = line.join(sep).trimRight();\n lines.push(line);\n }\n return lines.join('\\n');\n },\n _data_key(key) {\n key = key.slice(this.dataPrefix.length);\n try {\n var [index, attr] = key.split('-', 1);\n return [Number(index), attr];\n } catch (err) {\n return [null, key];\n }\n },\n //! Update saved settings from this.settings\n settingsSaved(settings = null) {\n if (settings !== null) this.settings = settings;\n this.savedSettings = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(this.settings);\n },\n /**\n * Load initial data\n */\n loadData({\n items = [],\n settings = null\n }, reset = false) {\n if (reset) {\n this.set.items = [];\n }\n for (var index in items) this.set.push((0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(items[index]));\n if (settings) this.settingsSaved(settings);\n this.updateInput();\n }\n },\n watch: {\n initData(val) {\n this.loadData(val);\n }\n },\n mounted() {\n this.initData && this.loadData(this.initData);\n this.page = this.items ? Page.List : Page.Text;\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.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 export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Page\": function() { return /* binding */ Page; }\n/* harmony export */ });\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 lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n/* harmony import */ var _track__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../track */ \"./src/track.js\");\n/* harmony import */ var _AActionButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AActionButton */ \"./src/components/AActionButton.vue\");\n/* harmony import */ var _ARow_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ARow.vue */ \"./src/components/ARow.vue\");\n/* harmony import */ var _ARows_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ARows.vue */ \"./src/components/ARows.vue\");\n\n\n\n\n\n\n\n\n/// Page display\nconst Page = {\n Text: 0,\n List: 1,\n Settings: 2\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n components: {\n AActionButton: _AActionButton__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n ARow: _ARow_vue__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n ARows: _ARows_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n },\n props: {\n initData: Object,\n dataPrefix: String,\n labels: Object,\n settingsUrl: String,\n defaultColumns: {\n type: Array,\n default: () => ['artist', 'title', 'tags', 'album', 'year', 'timestamp']\n }\n },\n data() {\n const settings = {\n playlist_editor_columns: this.defaultColumns,\n playlist_editor_sep: ' -- '\n };\n return {\n Page: Page,\n page: Page.Text,\n set: new _model__WEBPACK_IMPORTED_MODULE_2__.Set(_track__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n extraData: {},\n settings,\n savedSettings: (0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(settings)\n };\n },\n computed: {\n settingsChanged() {\n var k = Object.keys(this.savedSettings).findIndex(k => !(0,lodash__WEBPACK_IMPORTED_MODULE_1__.isEqual)(this.settings[k], this.savedSettings[k]));\n return k != -1;\n },\n separator: {\n set(value) {\n this.settings.playlist_editor_sep = value;\n if (this.page == Page.List) this.updateInput();\n },\n get() {\n return this.settings.playlist_editor_sep;\n }\n },\n columns: {\n set(value) {\n var cols = value.filter(x => x in this.defaultColumns);\n var left = this.defaultColumns.filter(x => !(x in cols));\n value = cols.concat(left);\n this.settings.playlist_editor_columns = value;\n },\n get() {\n return this.settings.playlist_editor_columns;\n }\n },\n items() {\n return this.set.items;\n },\n rowsSlots() {\n return Object.keys(this.$slots).filter(x => x.startsWith('row-') || x.startsWith('rows-')).map(x => [x, x.startsWith('rows-') ? x.slice(5) : x]);\n }\n },\n methods: {\n onCellEvent(event) {\n switch (event.name) {\n case 'change':\n this.updateInput();\n break;\n }\n },\n formatMove({\n from,\n to\n }) {\n const value = this.columns[from];\n this.settings.playlist_editor_columns.splice(from, 1);\n this.settings.playlist_editor_columns.splice(to, 0, value);\n if (this.page == Page.Text) this.updateList();else this.updateInput();\n },\n columnMove({\n from,\n to\n }) {\n const value = this.columns[from];\n this.columns.splice(from, 1);\n this.columns.splice(to, 0, value);\n this.updateInput();\n },\n listItemMove({\n from,\n to,\n set\n }) {\n set.move(from, to);\n this.updateInput();\n },\n updateList() {\n const items = this.toList(this.$refs.textarea.value);\n this.set.reset(items);\n },\n updateInput() {\n const input = this.toText(this.items);\n this.$refs.textarea.value = input;\n },\n /**\n * From input and separator, return list of items.\n */\n toList(input) {\n var lines = input.split('\\n');\n var items = [];\n for (let line of lines) {\n line = line.trimLeft();\n if (!line) continue;\n var lineBits = line.split(this.separator);\n var item = {};\n for (var col in this.columns) {\n if (col >= lineBits.length) break;\n const attr = this.columns[col];\n item[attr] = lineBits[col].trim();\n }\n item && items.push(item);\n }\n return items;\n },\n /**\n * From items and separator return a string\n */\n toText(items) {\n const sep = ` ${this.separator.trim()} `;\n const lines = [];\n for (let item of items) {\n if (!item) continue;\n var line = [];\n for (var col of this.columns) line.push(item.data[col] || '');\n line = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.dropRightWhile)(line, x => !x || !('' + x).trim());\n line = line.join(sep).trimRight();\n lines.push(line);\n }\n return lines.join('\\n');\n },\n _data_key(key) {\n key = key.slice(this.dataPrefix.length);\n try {\n var [index, attr] = key.split('-', 1);\n return [Number(index), attr];\n } catch (err) {\n return [null, key];\n }\n },\n //! Update saved settings from this.settings\n settingsSaved(settings = null) {\n if (settings !== null) this.settings = settings;\n this.savedSettings = (0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(this.settings);\n },\n /**\n * Load initial data\n */\n loadData({\n items = [],\n settings = null\n }, reset = false) {\n if (reset) {\n this.set.items = [];\n }\n for (var index in items) this.set.push((0,lodash__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(items[index]));\n if (settings) this.settingsSaved(settings);\n this.updateInput();\n }\n },\n watch: {\n initData(val) {\n this.loadData(val);\n }\n },\n mounted() {\n this.initData && this.loadData(this.initData);\n this.page = this.items ? Page.List : Page.Text;\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.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"); /***/ }), @@ -105,7 +105,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ \**************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -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/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n emit: ['move', 'cell'],\n props: {\n item: Object,\n columns: Array,\n cell: {\n type: Object,\n default() {\n return {\n row: 0\n };\n }\n },\n cellTag: {\n type: String,\n default: 'td'\n },\n orderable: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n row() {\n return this.cell && this.cell.row;\n },\n itemData() {\n return this.item instanceof _model__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ? this.item.data : this.item;\n },\n cells() {\n const cell = (0,vue__WEBPACK_IMPORTED_MODULE_1__.isReactive)(this.cell) && (0,vue__WEBPACK_IMPORTED_MODULE_1__.toRefs)(this.cell) || this.cell || {};\n const cells = [];\n for (var col in this.columns) cells.push({\n ...cell,\n col: Number(col)\n });\n return cells;\n },\n cellEls() {\n return [...this.$el.querySelectorAll(self.cellTag)].filter(x => x.dataset.col);\n }\n },\n methods: {\n /// Emit a 'cell' event.\n /// Event data: `{name, data, item, attr}`\n ///\n /// @param {Number} col: cell column's index\n /// @param {String} name: cell's event name\n /// @param {} data: cell's event data\n cellEmit(name, cell, data) {\n this.$emit('cell', {\n name,\n cell,\n data,\n item: this.item\n });\n },\n onDragStart(ev) {\n const dataset = ev.target.dataset;\n const data = `cell:${dataset.col}`;\n ev.dataTransfer.setData(\"text/cell\", data);\n ev.dataTransfer.dropEffect = 'move';\n },\n onDragOver(ev) {\n ev.preventDefault();\n ev.dataTransfer.dropEffect = 'move';\n },\n onDrop(ev) {\n const data = ev.dataTransfer.getData(\"text/cell\");\n if (!data || !data.startsWith('cell:')) return;\n ev.preventDefault();\n this.$emit('move', {\n from: Number(data.slice(5)),\n to: Number(ev.target.dataset.col)\n });\n },\n focus(col, from) {\n if (from) col += from.col;\n const target = this.cellEls[col];\n if (!target) return;\n const control = target.querySelector('input') || target.querySelector('button') || target.querySelector('select') || target.querySelector('a');\n control && control.focus();\n }\n },\n mounted() {\n this.$el.__row = this;\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARow.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/* harmony import */ var _model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../model */ \"./src/model.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n emit: ['move', 'cell'],\n props: {\n //! Item to display in row\n item: Object,\n //! Columns to display, as items' attributes\n columns: Array,\n //! Default cell's info\n cell: {\n type: Object,\n default() {\n return {\n row: 0\n };\n }\n },\n //! Cell component tag\n cellTag: {\n type: String,\n default: 'td'\n },\n //! If true, can reorder cell by drag & drop\n orderable: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n /**\n * Row index\n */\n row() {\n return this.cell && this.cell.row || 0;\n },\n /**\n * Item's data if model instance, otherwise item\n */\n itemData() {\n return this.item instanceof _model__WEBPACK_IMPORTED_MODULE_2__[\"default\"] ? this.item.data : this.item;\n },\n /**\n * Computed cell infos\n */\n cells() {\n const cell = (0,vue__WEBPACK_IMPORTED_MODULE_1__.isReactive)(this.cell) && (0,vue__WEBPACK_IMPORTED_MODULE_1__.toRefs)(this.cell) || this.cell || {};\n const cells = [];\n for (var col in this.columns) cells.push({\n ...cell,\n col: Number(col)\n });\n return cells;\n }\n },\n methods: {\n /**\n * Emit a 'cell' event.\n * Event data: `{name, cell, data, item}`\n * @param {Number} col: cell column's index\n * @param {String} name: cell's event name\n * @param {} data: cell's event data\n */\n cellEmit(name, cell, data) {\n this.$emit('cell', {\n name,\n cell,\n data,\n item: this.item\n });\n },\n onDragStart(ev) {\n const dataset = ev.target.dataset;\n const data = `cell:${dataset.col}`;\n ev.dataTransfer.setData(\"text/cell\", data);\n ev.dataTransfer.dropEffect = 'move';\n },\n onDragOver(ev) {\n ev.preventDefault();\n ev.dataTransfer.dropEffect = 'move';\n },\n /**\n * Handle drop event, emit `'move': { from, to }`.\n */\n onDrop(ev) {\n const data = ev.dataTransfer.getData(\"text/cell\");\n if (!data || !data.startsWith('cell:')) return;\n ev.preventDefault();\n this.$emit('move', {\n from: Number(data.slice(5)),\n to: Number(ev.target.dataset.col)\n });\n },\n /**\n * Return DOM node for cells at provided position `col`\n */\n getCellEl(col) {\n const els = this.$el.querySelectorAll(this.cellTag);\n for (var el of els) if (col == Number(el.dataset.col)) return el;\n return null;\n },\n /**\n * Focus cell's form input. If from is provided, related focus\n */\n focus(col, from) {\n if (from) col += from.col;\n const target = this.getCellEl(col);\n if (!target) return;\n const control = target.querySelector('input:not([type=\"hidden\"])') || target.querySelector('button') || target.querySelector('select') || target.querySelector('a');\n control && control.focus();\n }\n },\n mounted() {\n this.$el.__row = this;\n }\n});\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARow.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"); /***/ }), @@ -115,7 +115,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core \***************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { -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 _AList_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AList.vue */ \"./src/components/AList.vue\");\n/* harmony import */ var _ARow_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ARow.vue */ \"./src/components/ARow.vue\");\n\n\n\nconst Component = {\n extends: _AList_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n components: {\n ARow: _ARow_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n },\n emit: ['cell', 'colmove'],\n props: {\n ..._AList_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].props,\n columns: Array,\n labels: Object,\n allowCreate: Boolean\n },\n data() {\n return {\n ...super.data,\n extraItem: new this.set.model()\n };\n },\n computed: {\n rowCells() {\n const cells = [];\n for (var row in this.items) cells.push({\n row\n });\n },\n rows() {\n return [...this.$el.querySelectorAll('tr')].filter(x => x.__row).map(x => x.__row);\n },\n rowSlots() {\n return Object.keys(this.$slots).filter(x => x.startsWith('row-')).map(x => [x, x.slice(4)]);\n }\n },\n methods: {\n onControlKey(event, cell) {\n switch (event.key) {\n case \"ArrowUp\":\n this.focus(-1, 0, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowDown\":\n this.focus(1, 0, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n this.focus(0, -1, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n case \"ArrowRight\":\n this.focus(0, 1, cell);\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n },\n /**\n * React on 'cell' event, re-emitting it with additional values:\n * - `set`: data set\n * - `row`: row index\n *\n * @param {Number} row: row index\n * @param {} data: cell's event data\n */\n onCellEvent(row, event) {\n if (event.name == 'focus') this.cellFocus(event.data, event.cell);\n this.$emit('cell', {\n ...event,\n row,\n set: this.set\n });\n },\n getCellNode(row, col) {\n const el = this.$refs[row];\n return el && el.cellEls(col);\n },\n /**\n * Focus on a cell\n */\n focus(row, col, from = null) {\n if (from) row += from.row;\n row = this.rows[row];\n row && row.focus(col, from);\n }\n }\n};\nComponent.props.itemTag.default = 'tr';\nComponent.props.listTag.default = 'tbody';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Component);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.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 _AList_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AList.vue */ \"./src/components/AList.vue\");\n/* harmony import */ var _ARow_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ARow.vue */ \"./src/components/ARow.vue\");\n\n\n\nconst Component = {\n extends: _AList_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n components: {\n ARow: _ARow_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n },\n emit: ['cell', 'colmove'],\n props: {\n ..._AList_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"].props,\n columns: Array,\n labels: Object,\n allowCreate: Boolean\n },\n data() {\n return {\n ...super.data,\n extraItem: new this.set.model()\n };\n },\n computed: {\n rowCells() {\n const cells = [];\n for (var row in this.items) cells.push({\n row\n });\n },\n rowSlots() {\n return Object.keys(this.$slots).filter(x => x.startsWith('row-')).map(x => [x, x.slice(4)]);\n }\n },\n methods: {\n /**\n * React on 'cell' event, re-emitting it with additional values:\n * - `set`: data set\n * - `row`: row index\n *\n * @param {Number} row: row index\n * @param {} data: cell's event data\n */\n onCellEvent(row, event) {\n if (event.name == 'focus') this.focus(event.data, event.cell);\n this.$emit('cell', {\n ...event,\n row,\n set: this.set\n });\n },\n /**\n * Return row component at provided index\n */\n getRow(row) {\n const els = this.$el.querySelectorAll('tr');\n for (var el of els) if (el.__row && row == Number(el.dataset.row)) return el.__row;\n },\n /**\n * Focus on a cell\n */\n focus(row, col, from = null) {\n if (from) row += from.row;\n row = this.getRow(row);\n row && row.focus(col, from);\n }\n }\n};\nComponent.props.itemTag.default = 'tr';\nComponent.props.listTag.default = 'tbody';\n/* harmony default export */ __webpack_exports__[\"default\"] = (Component);\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.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"); /***/ }), @@ -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 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\nconst _hoisted_1 = {\n class: \"playlist-editor\"\n};\nconst _hoisted_2 = {\n class: \"columns\"\n};\nconst _hoisted_3 = {\n class: \"column\"\n};\nconst _hoisted_4 = {\n class: \"column has-text-right\"\n};\nconst _hoisted_5 = {\n class: \"float-right field has-addons\"\n};\nconst _hoisted_6 = {\n class: \"control\"\n};\nconst _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon is-small\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-pencil\"\n})], -1 /* HOISTED */);\nconst _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", null, \"Texte\", -1 /* HOISTED */);\nconst _hoisted_9 = [_hoisted_7, _hoisted_8];\nconst _hoisted_10 = {\n class: \"control\"\n};\nconst _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon is-small\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-list\"\n})], -1 /* HOISTED */);\nconst _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", null, \"Liste\", -1 /* HOISTED */);\nconst _hoisted_13 = [_hoisted_11, _hoisted_12];\nconst _hoisted_14 = {\n class: \"page\"\n};\nconst _hoisted_15 = {\n class: \"page\"\n};\nconst _hoisted_16 = [\"onClick\", \"title\", \"aria-label\"];\nconst _hoisted_17 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-trash\"\n})], -1 /* HOISTED */);\nconst _hoisted_18 = [_hoisted_17];\nconst _hoisted_19 = {\n class: \"mt-2\"\n};\nconst _hoisted_20 = {\n class: \"field is-inline-block is-vcentered mr-3\"\n};\nconst _hoisted_21 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"label\", {\n class: \"label is-inline mr-2\",\n style: {\n \"vertical-align\": \"middle\"\n }\n}, \" Séparateur\", -1 /* HOISTED */);\nconst _hoisted_22 = {\n class: \"control is-inline-block\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_23 = {\n class: \"field is-inline-block is-vcentered mr-3\"\n};\nconst _hoisted_24 = {\n class: \"label is-inline mr-2\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_25 = {\n class: \"table is-bordered is-inline-block\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_26 = {\n key: 0,\n style: {\n \"cursor\": \"pointer\"\n }\n};\nconst _hoisted_27 = [\"onClick\"];\nconst _hoisted_28 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-left-right\"\n}, null, -1 /* HOISTED */);\nconst _hoisted_29 = [_hoisted_28];\nconst _hoisted_30 = {\n key: 0,\n class: \"field is-vcentered is-inline-block\"\n};\nconst _hoisted_31 = {\n class: \"float-right\"\n};\nconst _hoisted_32 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-rotate\"\n})], -1 /* HOISTED */);\nconst _hoisted_33 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-plus\"\n})], -1 /* HOISTED */);\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_rows = (0,vue__WEBPACK_IMPORTED_MODULE_1__.resolveComponent)(\"a-rows\");\n const _component_a_row = (0,vue__WEBPACK_IMPORTED_MODULE_1__.resolveComponent)(\"a-row\");\n const _component_a_action_button = (0,vue__WEBPACK_IMPORTED_MODULE_1__.resolveComponent)(\"a-action-button\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_1__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, \"title\")]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"p\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_1__.normalizeClass)(['button', 'p-2', $data.page == $data.Page.Text ? 'is-primary' : 'is-light']),\n onClick: _cache[0] || (_cache[0] = $event => $data.page = $data.Page.Text)\n }, _hoisted_9, 2 /* CLASS */)]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"p\", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_1__.normalizeClass)(['button', 'p-2', $data.page == $data.Page.List ? 'is-primary' : 'is-light']),\n onClick: _cache[1] || (_cache[1] = $event => $data.page = $data.Page.List)\n }, _hoisted_13, 2 /* CLASS */)])])])]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, \"top\", {\n set: $data.set,\n columns: $options.columns,\n items: $options.items\n }), (0,vue__WEBPACK_IMPORTED_MODULE_1__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"section\", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"textarea\", {\n ref: \"textarea\",\n class: \"is-fullwidth is-size-6\",\n rows: \"20\",\n onChange: _cache[2] || (_cache[2] = (...args) => $options.updateList && $options.updateList(...args))\n }, null, 544 /* HYDRATE_EVENTS, NEED_PATCH */)], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_1__.vShow, $data.page == $data.Page.Text]]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"section\", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createVNode)(_component_a_rows, {\n set: $data.set,\n columns: $options.columns,\n labels: $props.labels,\n \"allow-create\": true,\n orderable: true,\n onMove: $options.listItemMove,\n onColmove: $options.columnMove,\n onCell: $options.onCellEvent\n }, (0,vue__WEBPACK_IMPORTED_MODULE_1__.createSlots)({\n \"row-tail\": (0,vue__WEBPACK_IMPORTED_MODULE_1__.withCtx)(data => [_ctx.$slots['row-tail'] ? (0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, _ctx.row - _ctx.tail, (0,vue__WEBPACK_IMPORTED_MODULE_1__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_1__.mergeProps)({\n key: 0\n }, data))) : (0,vue__WEBPACK_IMPORTED_MODULE_1__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"td\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: \"button is-danger is-outlined p-3 is-size-6\",\n onClick: $event => $options.items.splice(data.row, 1),\n title: $props.labels.remove_track,\n \"aria-label\": $props.labels.remove_track\n }, _hoisted_18, 8 /* PROPS */, _hoisted_16)])]),\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.renderList)($options.rowsSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_1__.withCtx)(data => [name != 'row-tail' ? (0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_1__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_1__.mergeProps)({\n key: 0\n }, data))) : (0,vue__WEBPACK_IMPORTED_MODULE_1__.createCommentVNode)(\"v-if\", true)])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"set\", \"columns\", \"labels\", \"onMove\", \"onColmove\", \"onCell\"])], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_1__.vShow, $data.page == $data.Page.List]]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_19, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_20, [_hoisted_21, (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_22, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"input\", {\n type: \"text\",\n ref: \"sep\",\n class: \"input is-inline is-text-centered is-small\",\n style: {\n \"max-width\": \"5em\"\n },\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $options.separator = $event),\n onChange: _cache[4] || (_cache[4] = $event => $options.updateList())\n }, null, 544 /* HYDRATE_EVENTS, NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_1__.vModelText, $options.separator]])])]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_23, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"label\", _hoisted_24, (0,vue__WEBPACK_IMPORTED_MODULE_1__.toDisplayString)($props.labels.columns), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"table\", _hoisted_25, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"tr\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createVNode)(_component_a_row, {\n columns: $options.columns,\n item: $props.labels,\n onMove: $options.formatMove,\n orderable: true\n }, {\n \"cell-after\": (0,vue__WEBPACK_IMPORTED_MODULE_1__.withCtx)(({\n cell\n }) => [cell.col < $options.columns.length - 1 ? ((0,vue__WEBPACK_IMPORTED_MODULE_1__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementBlock)(\"td\", _hoisted_26, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon\",\n onClick: $event => $options.formatMove({\n from: cell.col,\n to: cell.col + 1\n })\n }, _hoisted_29, 8 /* PROPS */, _hoisted_27)])) : (0,vue__WEBPACK_IMPORTED_MODULE_1__.createCommentVNode)(\"v-if\", true)]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"columns\", \"item\", \"onMove\"])])])]), $options.settingsChanged ? ((0,vue__WEBPACK_IMPORTED_MODULE_1__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementBlock)(\"div\", _hoisted_30, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createVNode)(_component_a_action_button, {\n icon: \"fa fa-floppy-disk\",\n class: \"button control p-3 is-info\",\n \"run-class\": \"blink\",\n url: $props.settingsUrl,\n method: \"POST\",\n data: $data.settings,\n \"aria-label\": $props.labels.save_settings,\n onDone: _cache[5] || (_cache[5] = $event => $options.settingsSaved())\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_1__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_1__.toDisplayString)($props.labels.save_settings), 1 /* TEXT */)]),\n\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"url\", \"data\", \"aria-label\"])])) : (0,vue__WEBPACK_IMPORTED_MODULE_1__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_31, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: \"button is-warning p-2 ml-2\",\n onClick: _cache[6] || (_cache[6] = $event => $options.loadData({\n items: this.initData.items\n }, true))\n }, [_hoisted_32, (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_1__.toDisplayString)($props.labels.discard_changes), 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: \"button is-primary p-2 ml-2\",\n \"t-if\": \"page == page.List\",\n onClick: _cache[7] || (_cache[7] = $event => this.set.push(new this.set.model()))\n }, [_hoisted_33, (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_1__.toDisplayString)($props.labels.add_track), 1 /* TEXT */)])])]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, \"bottom\", {\n set: $data.set,\n columns: $options.columns,\n items: $options.items\n })]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.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 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\nconst _hoisted_1 = {\n class: \"playlist-editor\"\n};\nconst _hoisted_2 = {\n class: \"columns\"\n};\nconst _hoisted_3 = {\n class: \"column\"\n};\nconst _hoisted_4 = {\n class: \"column has-text-right\"\n};\nconst _hoisted_5 = {\n class: \"float-right field has-addons\"\n};\nconst _hoisted_6 = {\n class: \"control\"\n};\nconst _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon is-small\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-pencil\"\n})], -1 /* HOISTED */);\nconst _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", null, \"Texte\", -1 /* HOISTED */);\nconst _hoisted_9 = [_hoisted_7, _hoisted_8];\nconst _hoisted_10 = {\n class: \"control\"\n};\nconst _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon is-small\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-list\"\n})], -1 /* HOISTED */);\nconst _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", null, \"Liste\", -1 /* HOISTED */);\nconst _hoisted_13 = [_hoisted_11, _hoisted_12];\nconst _hoisted_14 = {\n class: \"page\"\n};\nconst _hoisted_15 = {\n class: \"page\"\n};\nconst _hoisted_16 = [\"onClick\", \"title\", \"aria-label\"];\nconst _hoisted_17 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-trash\"\n})], -1 /* HOISTED */);\nconst _hoisted_18 = [_hoisted_17];\nconst _hoisted_19 = {\n class: \"mt-2\"\n};\nconst _hoisted_20 = {\n class: \"float-right\"\n};\nconst _hoisted_21 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-rotate\"\n})], -1 /* HOISTED */);\nconst _hoisted_22 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon\"\n}, [/*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-plus\"\n})], -1 /* HOISTED */);\nconst _hoisted_23 = {\n class: \"field is-inline-block is-vcentered mr-3\"\n};\nconst _hoisted_24 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"label\", {\n class: \"label is-inline mr-2\",\n style: {\n \"vertical-align\": \"middle\"\n }\n}, \" Séparateur\", -1 /* HOISTED */);\nconst _hoisted_25 = {\n class: \"control is-inline-block\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_26 = {\n class: \"field is-inline-block is-vcentered mr-3\"\n};\nconst _hoisted_27 = {\n class: \"label is-inline mr-2\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_28 = {\n class: \"table is-bordered is-inline-block\",\n style: {\n \"vertical-align\": \"middle\"\n }\n};\nconst _hoisted_29 = {\n key: 0,\n style: {\n \"cursor\": \"pointer\"\n }\n};\nconst _hoisted_30 = [\"onClick\"];\nconst _hoisted_31 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"i\", {\n class: \"fa fa-left-right\"\n}, null, -1 /* HOISTED */);\nconst _hoisted_32 = [_hoisted_31];\nconst _hoisted_33 = {\n key: 0,\n class: \"field is-vcentered is-inline-block\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_rows = (0,vue__WEBPACK_IMPORTED_MODULE_1__.resolveComponent)(\"a-rows\");\n const _component_a_row = (0,vue__WEBPACK_IMPORTED_MODULE_1__.resolveComponent)(\"a-row\");\n const _component_a_action_button = (0,vue__WEBPACK_IMPORTED_MODULE_1__.resolveComponent)(\"a-action-button\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_1__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, \"title\")]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_5, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"p\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_1__.normalizeClass)(['button', 'p-2', $data.page == $data.Page.Text ? 'is-primary' : 'is-light']),\n onClick: _cache[0] || (_cache[0] = $event => $data.page = $data.Page.Text)\n }, _hoisted_9, 2 /* CLASS */)]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"p\", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: (0,vue__WEBPACK_IMPORTED_MODULE_1__.normalizeClass)(['button', 'p-2', $data.page == $data.Page.List ? 'is-primary' : 'is-light']),\n onClick: _cache[1] || (_cache[1] = $event => $data.page = $data.Page.List)\n }, _hoisted_13, 2 /* CLASS */)])])])]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, \"top\", {\n set: $data.set,\n columns: $options.columns,\n items: $options.items\n }), (0,vue__WEBPACK_IMPORTED_MODULE_1__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"section\", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"textarea\", {\n ref: \"textarea\",\n class: \"is-fullwidth is-size-6\",\n rows: \"20\",\n onChange: _cache[2] || (_cache[2] = (...args) => $options.updateList && $options.updateList(...args))\n }, null, 544 /* HYDRATE_EVENTS, NEED_PATCH */)], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_1__.vShow, $data.page == $data.Page.Text]]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"section\", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createVNode)(_component_a_rows, {\n set: $data.set,\n columns: $options.columns,\n labels: $props.labels,\n \"allow-create\": true,\n orderable: true,\n onMove: $options.listItemMove,\n onColmove: $options.columnMove,\n onCell: $options.onCellEvent\n }, (0,vue__WEBPACK_IMPORTED_MODULE_1__.createSlots)({\n \"row-tail\": (0,vue__WEBPACK_IMPORTED_MODULE_1__.withCtx)(data => [_ctx.$slots['row-tail'] ? (0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, _ctx.row - _ctx.tail, (0,vue__WEBPACK_IMPORTED_MODULE_1__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_1__.mergeProps)({\n key: 0\n }, data))) : (0,vue__WEBPACK_IMPORTED_MODULE_1__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"td\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: \"button is-danger is-outlined p-3 is-size-6\",\n onClick: $event => $options.items.splice(data.row, 1),\n title: $props.labels.remove_track,\n \"aria-label\": $props.labels.remove_track\n }, _hoisted_18, 8 /* PROPS */, _hoisted_16)])]),\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.renderList)($options.rowsSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_1__.withCtx)(data => [name != 'row-tail' ? (0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_1__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_1__.mergeProps)({\n key: 0\n }, data))) : (0,vue__WEBPACK_IMPORTED_MODULE_1__.createCommentVNode)(\"v-if\", true)])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"set\", \"columns\", \"labels\", \"onMove\", \"onColmove\", \"onCell\"])], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_1__.vShow, $data.page == $data.Page.List]]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_19, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_20, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: \"button is-warning p-2 ml-2\",\n onClick: _cache[3] || (_cache[3] = $event => $options.loadData({\n items: this.initData.items\n }, true))\n }, [_hoisted_21, (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_1__.toDisplayString)($props.labels.discard_changes), 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"a\", {\n class: \"button is-primary p-2 ml-2\",\n \"t-if\": \"page == page.List\",\n onClick: _cache[4] || (_cache[4] = $event => this.set.push(new this.set.model()))\n }, [_hoisted_22, (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_1__.toDisplayString)($props.labels.add_track), 1 /* TEXT */)])]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_23, [_hoisted_24, (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_25, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"input\", {\n type: \"text\",\n ref: \"sep\",\n class: \"input is-inline is-text-centered is-small\",\n style: {\n \"max-width\": \"5em\"\n },\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $options.separator = $event),\n onChange: _cache[6] || (_cache[6] = $event => $options.updateList())\n }, null, 544 /* HYDRATE_EVENTS, NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_1__.vModelText, $options.separator]])])]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"div\", _hoisted_26, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"label\", _hoisted_27, (0,vue__WEBPACK_IMPORTED_MODULE_1__.toDisplayString)($props.labels.columns), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"table\", _hoisted_28, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"tr\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createVNode)(_component_a_row, {\n columns: $options.columns,\n item: $props.labels,\n onMove: $options.formatMove,\n orderable: true\n }, {\n \"cell-after\": (0,vue__WEBPACK_IMPORTED_MODULE_1__.withCtx)(({\n cell\n }) => [cell.col < $options.columns.length - 1 ? ((0,vue__WEBPACK_IMPORTED_MODULE_1__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementBlock)(\"td\", _hoisted_29, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementVNode)(\"span\", {\n class: \"icon\",\n onClick: $event => $options.formatMove({\n from: cell.col,\n to: cell.col + 1\n })\n }, _hoisted_32, 8 /* PROPS */, _hoisted_30)])) : (0,vue__WEBPACK_IMPORTED_MODULE_1__.createCommentVNode)(\"v-if\", true)]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"columns\", \"item\", \"onMove\"])])])]), $options.settingsChanged ? ((0,vue__WEBPACK_IMPORTED_MODULE_1__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_1__.createElementBlock)(\"div\", _hoisted_33, [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createVNode)(_component_a_action_button, {\n icon: \"fa fa-floppy-disk\",\n class: \"button control p-3 is-info\",\n \"run-class\": \"blink\",\n url: $props.settingsUrl,\n method: \"POST\",\n data: $data.settings,\n \"aria-label\": $props.labels.save_settings,\n onDone: _cache[7] || (_cache[7] = $event => $options.settingsSaved())\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_1__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_1__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_1__.toDisplayString)($props.labels.save_settings), 1 /* TEXT */)]),\n\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"url\", \"data\", \"aria-label\"])])) : (0,vue__WEBPACK_IMPORTED_MODULE_1__.createCommentVNode)(\"v-if\", true)]), (0,vue__WEBPACK_IMPORTED_MODULE_1__.renderSlot)(_ctx.$slots, \"bottom\", {\n set: $data.set,\n columns: $options.columns,\n items: $options.items\n })]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/APlaylistEditor.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"); /***/ }), @@ -255,7 +255,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 _hoisted_1 = {\n class: \"table is-stripped is-fullwidth\"\n};\nconst _hoisted_2 = [\"onKeydown\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-row\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"table\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"thead\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n item: _ctx.labels,\n columns: _ctx.columns,\n orderable: _ctx.orderable,\n onMove: _cache[0] || (_cache[0] = $event => _ctx.$emit('colmove', $event))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [_ctx.$slots['header-head'] ? {\n name: \"head\",\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header-head\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n key: \"0\"\n } : undefined, _ctx.$slots['header-tail'] ? {\n name: \"tail\",\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header-tail\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n key: \"1\"\n } : undefined]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"columns\", \"orderable\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"tbody\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"head\"), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.items, (item, row) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: row\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" data-index comes from AList component drag & drop \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n item: item,\n cell: {\n row\n },\n columns: _ctx.columns,\n \"data-index\": row,\n draggable: _ctx.orderable,\n onDragstart: _ctx.onDragStart,\n onDragover: _ctx.onDragOver,\n onDrop: _ctx.onDrop,\n onCell: $event => _ctx.onCellEvent(row, $event)\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.rowSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [slot == 'head' || slot == 'tail' ? (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.mergeProps)({\n key: 0\n }, data))) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: 1,\n onKeydown: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => _ctx.onControlKey($event, data.cell), [\"ctrl\"])\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))], 40 /* PROPS, HYDRATE_EVENTS */, _hoisted_2))])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"cell\", \"columns\", \"data-index\", \"draggable\", \"onDragstart\", \"onDragover\", \"onDrop\", \"onCell\"])], 64 /* STABLE_FRAGMENT */);\n }), 128 /* KEYED_FRAGMENT */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"tail\")])]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.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 _hoisted_1 = {\n class: \"table is-stripped is-fullwidth\"\n};\nconst _hoisted_2 = {\n key: 1\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_a_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"a-row\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"table\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"thead\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n item: _ctx.labels,\n columns: _ctx.columns,\n orderable: _ctx.orderable,\n onMove: _cache[0] || (_cache[0] = $event => _ctx.$emit('colmove', $event))\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [_ctx.$slots['header-head'] ? {\n name: \"head\",\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header-head\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n key: \"0\"\n } : undefined, _ctx.$slots['header-tail'] ? {\n name: \"tail\",\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"header-tail\", (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]),\n key: \"1\"\n } : undefined]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"columns\", \"orderable\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"tbody\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"head\"), ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.items, (item, row) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n key: row\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" data-index comes from AList component drag & drop \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_a_row, {\n item: item,\n cell: {\n row\n },\n columns: _ctx.columns,\n \"data-index\": row,\n \"data-row\": row,\n draggable: _ctx.orderable,\n onDragstart: _ctx.onDragStart,\n onDragover: _ctx.onDragOver,\n onDrop: _ctx.onDrop,\n onCell: $event => _ctx.onCellEvent(row, $event)\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createSlots)({\n _: 2 /* DYNAMIC */\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(_ctx.rowSlots, ([name, slot]) => {\n return {\n name: slot,\n fn: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(data => [slot == 'head' || slot == 'tail' ? (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.mergeProps)({\n key: 0\n }, data))) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, name, (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeProps)((0,vue__WEBPACK_IMPORTED_MODULE_0__.guardReactiveProps)(data)))]))])\n };\n })]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"item\", \"cell\", \"columns\", \"data-index\", \"data-row\", \"draggable\", \"onDragstart\", \"onDragover\", \"onDrop\", \"onCell\"])], 64 /* STABLE_FRAGMENT */);\n }), 128 /* KEYED_FRAGMENT */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, \"tail\")])]);\n}\n\n//# sourceURL=webpack://aircox-assets/./src/components/ARows.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"); /***/ }), diff --git a/aircox/templates/admin/aircox/playlist_inline.html b/aircox/templates/admin/aircox/playlist_inline.html index 45e371a..d065b71 100644 --- a/aircox/templates/admin/aircox/playlist_inline.html +++ b/aircox/templates/admin/aircox/playlist_inline.html @@ -10,9 +10,6 @@