]> git.0d.be Git - panikweb.git/commitdiff
Merge remote-tracking branch 'origin/master' into radio-esperanzah-2020
authorFrédéric Péters <fpeters@0d.be>
Sun, 15 Mar 2020 09:12:51 +0000 (10:12 +0100)
committerFrédéric Péters <fpeters@0d.be>
Sun, 15 Mar 2020 09:12:51 +0000 (10:12 +0100)
13 files changed:
1  2 
panikweb/settings.py
panikweb/views.py
panikweb_templates/locale/fr/LC_MESSAGES/django.po
panikweb_templates/static/css/_general.scss
panikweb_templates/static/css/_specifics.scss
panikweb_templates/static/js/audioPlayer.js
panikweb_templates/static/js/specifics.js
panikweb_templates/templates/base.html
panikweb_templates/templates/emissions/newsitem_detail.html
panikweb_templates/templates/grid.html
panikweb_templates/templates/includes/audio.html
panikweb_templates/templates/includes/player.html
panikweb_templates/templates/panikombo/episode_auto_selection.html

index bf911a26228e525d6d2c76a931822dab30f0c198,5173478157c83445c214c42ca6ec2b11ddf435b3..bee6c95d3422985d288e1eaaf7a1b61ba117a68c
@@@ -238,9 -241,13 +237,13 @@@ LANGUAGE_COOKIE_NAME = 'panikweb_langua
  TEMPLATE_VARS = {}
  
  COMBO_DASHBOARD_ENABLED = False
+ COMBO_MAP_TILE_URLTEMPLATE = ''
+ COMBO_MAP_ATTRIBUTION = ''
  JSON_CELL_TYPES = {}
  
 -RADIO_NAME = 'Radio Panik'
 -RADIO_LONG_NAME = 'Radio Panik - 105.4 FM'
--WEBSITE_BASE_URL = 'http://www.radiopanik.org/'
++RADIO_NAME = 'Radio Esperanzah!'
++RADIO_LONG_NAME = 'Radio Esperanzah! - 106.2 FM'
++WEBSITE_BASE_URL = 'https://radio.esperanzah.be/'
  
  COMBO_INITIAL_LOGIN_PAGE_PATH = '/'
  COMBO_WELCOME_PAGE_PATH = None
index c1e45a82964f9ff2f1e747d9901861eae550b9a5,3314d71fbeac1abe84043d64f425aed350b1f007..966e77fb1992beb85b1f6884925ed0664dcbe28a
@@@ -683,14 -652,8 +691,15 @@@ def onair(request)
              'url': d['emission'].get_absolute_url(),
              'chat': chat_url,
          }
 +
 +    track_title = None
 +    playing_txt = os.path.join(settings.MEDIA_ROOT, 'playing.txt')
 +    if os.path.exists(playing_txt):
 +        track_title = open(playing_txt).read().strip()
 +        if len(track_title) < 6:
 +            track_title = None
      if d.get('nonstop'):
+         redirect_path = d['nonstop'].redirect_path
          d['nonstop'] = {
              'title': d['nonstop'].title,
          }
@@@ -746,10 -702,10 +755,10 @@@ class RssCustomPodcastsFeed(Rss201rev2F
              handler.addQuickElement('itunes:name', emission.title)
              handler.endElement('itunes:owner')
          else:
-             handler.addQuickElement('itunes:author', 'Radio Esperanzah!')
+             handler.addQuickElement('itunes:author', settings.RADIO_NAME)
              handler.startElement('itunes:owner', {})
 -            handler.addQuickElement('itunes:email', 'info@radiopanik.org')
 +            handler.addQuickElement('itunes:email', 'radio@esperanzah.be')
-             handler.addQuickElement('itunes:name', 'Radio Esperanzah!')
+             handler.addQuickElement('itunes:name', settings.RADIO_NAME)
              handler.endElement('itunes:owner')
  
      def root_attributes(self):
@@@ -792,8 -748,8 +801,8 @@@ class PodcastsFeed(Feed)
  
      def item_title(self, item):
          if item.fragment:
-             return '%s - %s' % (item.title, item.episode.title)
 -            return '[%s] %s - %s' % (item.episode.emission.title, item.title, item.episode.title)
 -        return '[%s] %s' % (item.episode.emission.title, item.episode.title)
++            return '%s - %s - %s' % (item.episode.emission.title, item.title, item.episode.title)
 +        return '%s - %s' % (item.episode.emission.title, item.episode.title)
  
      def item_link(self, item):
          return item.episode.get_absolute_url()
index 2ccd05fbc3932488ec07ce1dd2dabb87a0a9076d,adb2c84f7c414a8b94a9ce764200670f421951cc..65af4e1b740d21d28f41e55e9291bab25d3a2bcc
@@@ -110,14 -139,14 +139,14 @@@ msgstr "À propos
  msgid "Get the stream on your player!"
  msgstr "Récupérez le stream sur votre lecteur !"
  
- #: templates/includes/player.html:10
- msgid "Need some help?"
- msgstr "Besoin d'aide ?"
- #: templates/includes/player.html:14
+ #: templates/includes/player.html:13
  msgid "live"
 -msgstr "en direct"
 +msgstr "En direct de la radio"
  
+ #: templates/includes/player.html:38
+ msgid "Empty playlist"
+ msgstr "Vider la playlist"
  #: templates/nonstop_playlist.html:16
  msgid "Playlist"
  msgstr "Playlist"
index bc1a6e70cb9b71c8bb719fe144881c55de03b3c3,91e927bbf84e16fd9e8e3222900b7a9d28ea0f41..85581bb475d4403b787d6d26af303a93c4454aa1
@@@ -111,10 -87,10 +103,10 @@@ h5.focus-title 
  .wrapper.text {max-width: 780px; margin:auto;}
  .wrapper .rightPart{margin-top:1em;}
  
 -@media screen and (min-width: 760px) {
 +@media screen and (min-width: $size_m) {
        #player-container.fixed {
                position: fixed;
-               top: 50px;
+               top: 60px;
                width: calc(0% + 235px);
        }
        .wrapper .rightPart{
@@@ -2328,19 -2111,8 +2337,25 @@@ div#loading-page 
        100% { right: 0%; }
  }
  
 +div#header_date {
 +        text-transform: uppercase;
 +        position: absolute;
 +        text-align: left;
 +        color: $red;
 +      font-weight: bold;
 +        top: 63px;
 +        left: 135px;
 +      @media screen and (max-width:$size_m){
 +              display: none;
 +      }
 +}
 +
 +h2.top {
 +      padding-bottom: 2rem;
 +}
++
+ .episode-auto-selection-cell.hide-emission-titles {
+       .emission-title, .soundfile-info .sep {
+               display: none;
+       }
+ }
index 47f5486a9203c1e7bf8951944f370b0e7d82b03e,35f1dafd6fefc55df62772ab0feeae30e319a61f..8622f7f2b7bbf83f830f7c7b564ac538eeb62fc5
                                }
                                thePlaylist.setFocus(container);
                                container.addClass('playing');
 -                              playpause.addClass('icon-pause').removeClass('icon-play');
 -                              thePlaylist.controlButtons['playpause'].removeClass('icon-play').addClass('icon-pause');
 +                              playpause.addClass('action-pause').removeClass('action-play');
 +                              thePlaylist.controlButtons['playpause'].removeClass('action-play').addClass('action-pause');
                                thePlaylist.afterPlay();
-                       }).on('pause',function(){
-                               container.removeClass('playing');
-                               $(this).removeClass('playing');
-                               playpause.addClass('action-play').removeClass('action-pause');
-                               thePlaylist.controlButtons['playpause'].removeClass('action-pause').addClass('action-play');
-                       }).on('stop',function(){
-                               container.removeClass('playing');
+                               var sound_id = $(e.target).data('sound-id');
+                               $(document).trigger('panik:play', {'sound_id': sound_id});
+                       }).on('pause',function(e){
                                $(this).removeClass('playing');
+                               playpause.addClass('icon-play').removeClass('icon-pause');
+                               var sound_id = $(e.target).data('sound-id');
+                               $(document).trigger('panik:pause', {'sound_id': sound_id});
+                               thePlaylist.controlButtons['playpause'].removeClass('icon-pause').addClass('icon-play');
+                       }).on('stop',function(event){
                                $(this).trigger('pause');
                                if($(this)[0].currentTime){$(this)[0].currentTime = 0;}
                        }).on("ended", function(e){
                        });
                        var controls = $('<span>',{'class':'soundControls controls'});
                        var link = $('<a>',{href:sound.url,'class':'button icon-external-link'});
-                       var html5 = $('<button>',{title:"Display HTML5 audio",'class':'icon-html5',click:function(){
-                               audio.toggle();
-                       }}).hide();
 -                      var remove = $('<button>',{title:"Remove from list",'class':'icon-remove',click:function(){
 +                      var remove = $('<button>',{title:"Remove from list",'class':'no-icon-remove',click:function(){
                                container.remove();
                                thePlaylist._update();
                        }});
index dbcd36e9b9119dd996916995e73bfa257c9db2db,584a36ea51c3947243afbf98be31bb442a1e7eaf..ecca941695c009ac2acf8c874d1d16f0d4310b0c
@@@ -252,16 -222,28 +222,15 @@@ $(function() 
        });
        $('#DirectStreamPanik').on('play',function(){
                $('audio:not(#DirectStreamPanik)').each(function(){this.pause();});
 -              $('#streamSymbol').removeClass('icon-volume-up').addClass('icon-pause');
 +              $('#streamSymbol').removeClass('player-start').addClass('player-pause');
-               $('#RefreshWhatsOnAir').trigger('activate');
        }).on('pause',function(){
                //$('audio:not(#DirectStreamPanik)').each(function(){this.pause();});
 -              $('#streamSymbol').addClass('icon-volume-up').removeClass('icon-pause');
 +              $('#streamSymbol').addClass('player-start').removeClass('player-pause');
        });
 -      if($('#player-container').offset()){
 -              var topPosition = 0;
 -              topPosition = $('#mainHeader > div').offset().top + $('#mainHeader > div').height();
 -              $(window).bind('scroll load',function (event) {
 -                      //$('#player-container').removeClass('fixed');
 -                      var y = $(this).scrollTop() + 60;
 -                      if (topPosition!== 0 && y >= topPosition) {
 -                              $('#player-container').addClass('fixed').removeClass('normal');
 -                      } else {
 -                              $('#player-container').removeClass('fixed').addClass('normal');
 -                      }
 -              });
 -      }
  
        var $localList = $('#localList').playlist({
 -              controlContainer: $('<div>',{'class':"playListControls"}).sortable(),
 -              playlistContainer: $('<ol>',{id:"myPlaylist",'class':"custom"}).sortable(),
 +              controlContainer: $('<div>',{'class':"playListControls"}),
 +              playlistContainer: $('<ol>',{id:"myPlaylist",'class':"custom"}),
                onLoad:function(self){
                        $('#toggleList').on('click',function(){ 
                                self.playlistContainer.toggleClass('deploy');
                        if($(this).attr('data-player-action') == "registerAudio"){
                                $localList.playlist("registerAudio",audio);
                        }else if($(this).attr('data-player-action') == "playAudio"){
-                               $localList.playlist("reset");
-                               $localList.playlist("registerAudio",audio);
-                               $localList.playlist("playSoundId", sound_id);
-                               if ($(this).parent().find('.icon-pause').length) {
-                                       $(this).hide();
-                                       $(this).parent().find('.icon-pause').show();
 -                              if ($(this).hasClass('icon-play-sign')) {
++                              if ($(this).hasClass('icon-play-sign') || $(this).hasClass('action-play')) {
+                                       $localList.playlist("registerAudio",audio);
+                                       $localList.playlist("playSoundId", sound_id);
+                                       if ($(this).parent().find('.icon-pause').length) {
+                                               $(this).hide();
+                                               $(this).parent().find('.icon-pause').show();
+                                       }
+                               } else {
+                                       $localList.playlist('pauseSounds');
                                }
                        }else if ($(this).attr('data-player-action') == "pauseSounds") {
                                if ($(this).parent().find('.icon-play-sign').length) {
                $('#aac-m3u').addClass('resymbol').show();
        }
  
 -      var konami = new Konami('/party');
 -
+       $(document).on('panik:play', function(ev, data) {
+               var $page_audio_controls = $('#Main').find('div.audio[data-sound-id="' + data.sound_id + '"]');
+               $page_audio_controls.find('.icon-play-sign').removeClass('icon-play-sign').addClass('icon-pause');
+       });
+       $(document).on('panik:pause', function(ev, data) {
+               var $page_audio_controls = $('#Main').find('div.audio[data-sound-id="' + data.sound_id + '"]');
+               $page_audio_controls.find('.icon-pause').removeClass('icon-pause').addClass('icon-play-sign');
+       });
 -
        $(document).on('panik:timeupdate', function(ev, data) {
+               var $page_audio_controls = $('#Main').find('div.audio[data-sound-id="' + data.sound_id + '"]');
+               $page_audio_controls.find('.icon-play-sign').removeClass('icon-play-sign').addClass('icon-pause');
                $waveform = $('#Main div.waveform[data-sound-id="' + data.sound_id + '"]');
                var elems = $waveform.find('span');
                var total_elems = elems.length;
index ca4db074eea96ac6dd1eecb77e74e62cc4c67f88,ba54f50b56a0da9d9cfe464650b1d3e3ef51c77e..3ecc64f5460d2b4ff2e3ed509aeee3a1f740965b
@@@ -2,24 -2,27 +2,23 @@@
  <html>
  <head>
      <meta charset="UTF-8" />
-     <title>Radio Esperanzah! - {% block title %}{% endblock %}</title>
-       <meta name="viewport" content="width=device-width, initial-scale=1.0">
+     <title>{{ radio_name }} - {% block title %}{% endblock %}</title>
+     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 -    <link rel="icon" href="{{ STATIC_URL }}img/favicon-16.png" type="image/png" sizes="16x16">
 -    <link rel="icon" href="{{ STATIC_URL }}img/favicon-32.png" type="image/png" sizes="32x32">
 -    <link rel="icon" href="{{ STATIC_URL }}img/favicon-48.png" type="image/png" sizes="48x48">
 -    <link rel="apple-touch-icon" href="{{ STATIC_URL}}img/logo-panik-500-invert.png">
 +    <link rel="icon" href="{{ STATIC_URL }}img/favicon-2020.png" type="image/png">
 +    <link rel="apple-touch-icon" href="{{ STATIC_URL}}img/favicon-300x300-2020.png">
      <link rel="canonical" href="{{ request.build_absolute_uri }}" />
  
-     <meta name="og:site_name" content="Radio Esperanzah!"/>
+     <meta name="og:site_name" content="{{ radio_name }}"/>
 -    {% block head %}
 -    <meta name="description" content="En vous branchant sur le 105.4 FM, vous pénétrerez plus avant dans l'œil du cyclone…" />
 +    <meta name="twitter:site" content="@radioesperanzah" />
  
-     <meta property="og:title" content="Radio Esperanzah! - 106.2 FM" />
 +    {% block head %}
 -    <meta property="og:image" content="{{ site_url }}{% static 'img/Radio_Panik_Logo_2016-01.png' %}" />
 -    <meta property="og:description" content="En vous branchant sur le 105.4 FM, vous pénétrerez plus avant dans l'œil du cyclone…" />
+     <meta property="og:title" content="{{ radio_long_name }}" />
 +    <meta property="og:image" content="{{ site_url }}{% static 'img/favicon-300x300-2020.png' %}" />
  
      <meta name="twitter:card" content="summary" />
-     <meta name="twitter:title" content="Radio Esperanzah! - 106.2 FM" />
+     <meta name="twitter:title" content="{{ radio_long_name }}" />
 -    <meta name="twitter:image" content="{{ site_url }}{% static 'img/Radio_Panik_Logo_2016-01.png' %}" />
 -    <meta name="twitter:description" content="En vous branchant sur le 105.4 FM, vous pénétrerez plus avant dans l'œil du cyclone…" />
 -
 +    <meta name="twitter:description" content="La radio du festival Esperanzah!, à partir du 30 juillet 2020 à Floreffe" />
 +    <meta name="twitter:image" content="{{ site_url }}{% static 'img/favicon-300x300-2020-solid.png' %}" />
      {% endblock %}
  
  <link rel="alternate" type="application/rss+xml"  href="{% url 'rss-feed' %}" title="News rss feed">
  
      <script src="{% xstatic 'jquery' 'jquery.min.js' %}"></script>
      <script src="{% xstatic 'jquery-ui' 'jquery-ui.min.js' %}"></script>
-     <script type="text/javascript" src="{{ STATIC_URL }}js/audioPlayer.js"></script>
-     <script type="text/javascript" src="{{ STATIC_URL }}js/specifics.js"></script>
 -    <script type="text/javascript" src="{{ STATIC_URL }}js/jquery.scrollTo-1.4.3.1-min.js"></script>
+     <script type="text/javascript" src="{{ STATIC_URL }}js/audioPlayer.js?{% start_timestamp %}"></script>
 -    <script type="text/javascript" src="{{ STATIC_URL }}js/konami.js"></script>
 -    <script type="text/javascript" src="{{ STATIC_URL}}js/strophe.min.js"></script>
 -    <script type="text/javascript" src="{{ STATIC_URL}}js/strophe.muc.js"></script>
+     <script type="text/javascript" src="{{ STATIC_URL }}js/specifics.js?{% start_timestamp %}"></script>
  
      {% block extrascripts %}{% endblock %}
  </head>
  
  <body {% block bodyattr %}id="{{sectionName}}" class="section-{{sectionName}}"{% endblock %}>
        <div id="All">
 -              {% block meta %}<div id="metaNav">{% metanav active=sectionName %}</div>{% endblock %}
 -              <div id="Commons" class="cf" >
 -            <div class="wrapper sided" >
 -                <div id="backgroundBox" class="cf">
 +              <div id="Commons" >
 +            <div class="sided" >
 +                <div id="backgroundBox">
 +                        <div id="header_date">31 juillet, 1 &amp; 2 août 2020<br>Abbaye de Floreffe</div>
                                <a href="{% url 'home' %}" id="mainHeader"><div>
-                                       <h1 class="top" id="radiopanik">Radio Esperanzah! - 106.2 FM</h1>
+                                       <h1 class="top" id="radiopanik">{{ radio_long_name }}</h1>
                                </div></a>
                                <div id="Player" class="withoutPlaylist">
                                        {% block listen %}{% player %}{% endblock %}
index 09f2b1fee2bdaa29e06ab88300d4096358dc68d2,0ea270be43a5d5c979bea23322077b0dadf66d40..9334d39f59fb110671fc6f6e4f412e0046e3eab3
@@@ -59,8 -60,9 +59,9 @@@
                                        </div>
                                        {% endfor %}
                                      {% else %}
-                                     <div class="continu"><strong><a href="{% url 'emission-view' slug=cell.nonstop_slug %}">{{ cell }}</a></strong></div>
+                                       <div class="continu"><strong><a
+                                          href="{% if cell.redirect_path %}{{ cell.redirect_path }}{% else %}{% url 'emission-view' slug=cell.nonstop_slug %}{% endif %}">{{ cell }}</a></strong></div>
 -                                      {% if cell.w > 1 and cell.h > 1%}<p>la musique en continu</p>{% endif %}
 +                                      {% if cell.w > 1 and cell.h > 1%}<!--<p>la musique en continu</p>-->{% endif %}
                                      {% endif %}
                          </td>
                          {% endfor %}
index 05f5b1c37b2ca2873d0abb2094b8db9466a7199c,5cb813adad096ac2ac4155bc24eff65959094fd4..6c708f7f2e3120f6cec617a418bbe3e94a712c18
@@@ -1,14 -1,22 +1,23 @@@
- {% load soundfiles paniktags %}
+ {% load soundfiles paniktags i18n %}
  {% if sound|is_format_available:'mp3' or sound|is_format_available:'ogg' %}
-       <div class="audio">
-               {% if embed %}
++<<<<<<< HEAD
+       <div class="audio" data-sound-id="{{ sound.id }}">
+               {% if not embed %}
+               <button class="resymbol icon-plus-sign big"
+                       title="{% trans "Add to playlist" %}"
+                       data-player-audio="Audio-{{ sound.file.url|slugify }}" 
+                       data-player-action="registerAudio" 
+                       id="addToPlaylist-{{ sound.file.url|slugify }}"
+                       ><span class="sr-only">{% trans "Add to playlist" %}</span></button>
+               {% endif %}
                <button class="resymbol icon-play-sign big"
-                       title="Play" 
+                       title="{% trans "Play" %}"
                        data-player-audio="Audio-{{ sound.file.url|slugify }}" 
                        data-player-action="playAudio" 
-                       ></button>
+                       ><span class="sr-only">{% trans "Play" %}</span></button>
+               {% if embed %}
                <button class="icons icon-pause big"
-                       title="Pause"
+                       title="{% trans "Pause" %}"
                        style="display: none;"
                        data-player-audio="Audio-{{ sound.file.url|slugify }}" 
                        data-player-action="pauseSounds" 
index d12a827700c872b95b03423adb729e0490211d3b,f4a7df5e2c0aa4cb5e71e51f397da7f2425ee495..8c891a630236d75f7f9f47c379a6da1e1c853f7a
@@@ -1,18 -1,21 +1,17 @@@
  {% load i18n paniktags %}
  <div id="player-container" class="normal cf">
 +      <button id="togglePlayer" class="hidden left huge no-icon-double-angle-left "></button>
        <div id="player" class="cf">
                <div id="audioPlayer" class="cf">
 -                      <div id="Live" class="padded cf">
 -                              <div class="metas custom">
 -                                      <a id="ogg-m3u" class="button resymbol icon-download inBlock" title="{% trans 'Get the stream on your player!' %}" href="https://streaming.domainepublic.net/radiopanik.ogg.m3u"></a>
 -                                      <a id="aac-m3u" style="display: none;" class="button icon-download inBlock" title="{% trans 'Get the stream on your player!' %}" href="https://streaming.domainepublic.net/radiopanik.aac.m3u"></a>
 -                              </div>
 +                      <div id="Live" class="cf">
                                <span class="button" id="DirectStreamPanikControler">
 -                                      <div id="streamSymbol" class="icon-volume-up resymbol"></div>
 -                                      <div class="label">{% trans 'live' %}</div>
 -                              </span>
 +                                      <div id="streamSymbol" class="player-start"></div>
                                <div id="CurrentlyPlaying">
                                        <span id="WhatsOnAir"></span>
-                                       <button class="no-icon-refresh" id="RefreshWhatsOnAir"></button>
                                </div>
 +                              </span>
                                <div id="CurrentlyChatting" style="display: none;">
 -                                        <a href=""><div id="chatSymbol" class="icon-comments control"></div>
 +                                        <a href=""><div id="chatSymbol" class="no-icon-comments control"></div>
                                                  <div class="label">CHAT</div></a>
                                          <span>La radio est ouverte</span>
                                </div>
index 7d416abbabb03781196cfd63b133ca24552f796c,fa6dc8df3d0d2ae7dec9035bf90fba36d3248cb2..c126bebab90e392a8b1a817058c9a672a479e88e
@@@ -1,20 -1,39 +1,19 @@@
  {% load paniktags thumbnail staticfiles %}
  {% if title and episodes %}<h3>{{title}}</h3>{% endif %}
  {% for episode in episodes %}
 -
 -<div class="wrapper extra-soundfiles soundcell">
 -      <div class="logo">
 -              {% if episode.image %}
 -                      {% thumbnail episode.image "60x60" crop="50% 25%" as im %}
 -                      <img width="60" height="60" src="{{im.url}}"/>
 +{% if episode.creation_timestamp|date:"Y" == "2019" %}
 +      <div class="emission-tile">
 +                <a href="{% url 'episode-view' emission_slug=episode.emission.slug slug=episode.slug %}">
 +              <div class="image">
 +                        <div class="img">
 +                      {% thumbnail episode.image "230x300" crop="50% 50%" as im %}
 +                        <img src="{{im.url}}">
 +                        {% empty %}
 +                        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8nez3HwAGugKtHMIYIwAAAABJRU5ErkJggg==" height="300" width="230">
                        {% endthumbnail %}
 -              {% elif episode.emission.image %}
 -                      {% thumbnail episode.emission.image "60x60" crop="50% 25%" as im %}
 -                      <img width="60" height="60" src="{{im.url}}"/>
 -                      {% endthumbnail %}
 -              {% else %}
 -                      <img class="smooth"  style="width:60px;" src="{% static "img/emission.png" %}"/>
 -              {% endif %}
 +                        </div>
 +              </div>
 +                </a>
 +              <div class="name"><span>{{episode.title}}</span></div>
        </div>
- {% endif %}
 -<ul class="padded custom list">
 -<li>
 -  <div class="soundfile-info"><strong>
 -    <a class="emission-title" href="{% url 'emission-view' slug=episode.emission.slug%}">{{ episode.emission.title }}</a>
 -    <span class="sep">-</span>
 -    <a class="episode-title" href="{% url 'episode-view' emission_slug=episode.emission.slug slug=episode.slug %}">{{ episode.title }}</a></strong>
 -  </div>
 -  {% for diffusion in episode.diffusions %}
 -  <span class="date">→ {{ diffusion.datetime|date:"l d M Y à H:i" }}</span>
 -  {% endfor %}
 -  {% if episode.main_sound %}{% audio sound=episode.main_sound %}{% endif %}
 -  {% for sound in episode.fragment_sounds %}
 -  <div class="fragment-sound">
 -    {% audio sound=sound display_fragment_name=True %}
 -  </div>
 -  {% endfor %}
 -</li>
 -</ul>
 -</div>
 -
  {% endfor %}