Browse Source

Evolution #545: chargements des lecteurs

Sevajol Bastien 11 years ago
parent
commit
20fa8f37e9

+ 14 - 0
src/Muzich/CoreBundle/Controller/ElementController.php View File

@@ -1153,4 +1153,18 @@ class ElementController extends Controller
1153 1153
     ));
1154 1154
   }
1155 1155
   
1156
+  public function getEmbedCodeAction($element_id)
1157
+  {
1158
+    if (!($element = $this->getDoctrine()->getRepository('MuzichCoreBundle:Element')
1159
+      ->findOneById($element_id)))
1160
+    {
1161
+      throw $this->createNotFoundException();
1162
+    }
1163
+    
1164
+    return $this->jsonResponse(array(
1165
+      'status' => 'success',
1166
+      'data'   => $element->getEmbed(),
1167
+    ));
1168
+  }
1169
+  
1156 1170
 }

+ 5 - 0
src/Muzich/CoreBundle/Entity/Element.php View File

@@ -951,4 +951,9 @@ class Element
951 951
     return array();
952 952
   }
953 953
   
954
+  public function getRefId()
955
+  {
956
+    return $this->getData(self::DATA_REF_ID);
957
+  }
958
+  
954 959
 }

+ 4 - 0
src/Muzich/CoreBundle/Resources/config/routing.yml View File

@@ -183,3 +183,7 @@ element_dom_get_one:
183 183
 element_get_stream_data:
184 184
   pattern: /ajax/element/data/get/stream/{element_id}
185 185
   defaults: { _controller: MuzichCoreBundle:Element:geJamendotStreamDatas, element_id: null }
186
+
187
+url_get_embed_for_element:
188
+  pattern: /ajax/element/data/get/embed/{element_id}
189
+  defaults: { _controller: MuzichCoreBundle:Element:getEmbedCode, element_id: null }

+ 12 - 0
src/Muzich/CoreBundle/Resources/public/js/muzich.js View File

@@ -396,6 +396,16 @@ $(document).ready(function(){
396 396
      li.find('a.element_embed_open_link_text').hide();
397 397
      li.find('div.element_embed').show();
398 398
      
399
+    if ((player = window.dynamic_player.play(
400
+      li.find('div.element_embed'),
401
+      li.data('type'),
402
+      li.data('refid'),
403
+      li.data('elementid')
404
+    )))
405
+    {
406
+      window.players_manager.add(player, li.attr('id'));
407
+    }
408
+     
399 409
      return false;
400 410
   });
401 411
   
@@ -421,6 +431,8 @@ $(document).ready(function(){
421 431
      li.find('a.element_embed_open_link_text').show();
422 432
      $(this).hide();
423 433
      
434
+     window.players_manager.get(li.attr('id')).stop();
435
+     
424 436
      return false;
425 437
   });
426 438
   

src/Muzich/CoreBundle/Resources/public/js/autoplay.js → src/Muzich/CoreBundle/Resources/public/js/play.js View File


+ 136 - 0
src/Muzich/CoreBundle/Resources/public/js/play2.js View File

@@ -0,0 +1,136 @@
1
+
2
+function DynamicPlayer()
3
+{
4
+  
5
+  this.play = function(object_for_player, player_type, ref_id, element_id)
6
+  {
7
+    if ((player = getPlayerObjectForElementType(object_for_player, player_type, ref_id, element_id)))
8
+    {
9
+      player.play();
10
+      return player;
11
+    }
12
+    
13
+    return false;
14
+  }
15
+  
16
+  var getPlayerObjectForElementType = function(object_for_player, player_type, ref_id, element_id)
17
+  {
18
+    if (player_type == 'youtube.com' || player_type == 'youtu.be')
19
+    {
20
+      return new YoutubePlayer(ref_id, object_for_player);
21
+    }
22
+    return new GenericPlayer(element_id, object_for_player);
23
+  }
24
+  
25
+}
26
+
27
+function YoutubePlayer(ref_id, object_for_player)
28
+{
29
+  var _ref_id = ref_id;
30
+  var _object_for_player = object_for_player;
31
+  var _yt_player;
32
+  
33
+  this.play = function()
34
+  { 
35
+    create_player();
36
+  }
37
+  
38
+  var create_player = function()
39
+  {
40
+    var div_for_iframe = $('<div>').attr('id', _object_for_player.attr('id')+'_iframe');
41
+    _object_for_player.append(div_for_iframe);
42
+    
43
+    _yt_player = new YT.Player(_object_for_player.attr('id')+'_iframe', {
44
+      height  : config_player_youtube_height,
45
+      width   : config_player_youtube_width,
46
+      videoId : _ref_id,
47
+      events  : {
48
+        'onReady': onPlayerReady,
49
+        'onStateChange': onPlayerStateChange
50
+      }
51
+    });
52
+    
53
+    
54
+  }
55
+  
56
+  var onPlayerReady = function(event)
57
+  {
58
+    _yt_player.playVideo();
59
+  }
60
+  
61
+  var onPlayerStateChange = function(event)
62
+  {
63
+    if (event.data == YT.PlayerState.PLAYING)
64
+    {
65
+      
66
+    }
67
+    if (event.data == YT.PlayerState.ENDED)
68
+    {
69
+      
70
+    }
71
+    if (event.data == YT.PlayerState.PAUSED)
72
+    {
73
+      
74
+    }
75
+    if (event.data == YT.PlayerState.BUFFERING)
76
+    {
77
+      
78
+    }
79
+    if (event.data == YT.PlayerState.CUED)
80
+    {
81
+      
82
+    }
83
+  }
84
+  
85
+  this.pause = function()
86
+  {
87
+    _yt_player.pauseVideo();
88
+  }
89
+  
90
+  this.stop = function()
91
+  {
92
+    _yt_player.stopVideo();
93
+    _object_for_player.html('');
94
+  }
95
+}
96
+
97
+function GenericPlayer(ref_id, object_for_player)
98
+{
99
+  var _ref_id = ref_id;
100
+  var _object_for_player = object_for_player;
101
+  
102
+  this.play = function()
103
+  {
104
+    JQueryJson(url_get_embed_for_element+'/'+_ref_id, {}, function(response){
105
+      if (response.status == 'success')
106
+      {
107
+        object_for_player.html(response.data);
108
+      }
109
+    });
110
+  }
111
+  
112
+  this.stop = function()
113
+  {
114
+    _object_for_player.html('');
115
+  }
116
+}
117
+
118
+function PlayersManager()
119
+{
120
+  var _players = new Array();
121
+  
122
+  this.add = function(player, key)
123
+  {
124
+    _players[key] = player;
125
+  }
126
+  
127
+  this.get = function(key)
128
+  {
129
+    return _players[key];
130
+  }
131
+}
132
+
133
+$(document).ready(function() {
134
+  window.dynamic_player = new DynamicPlayer();
135
+  window.players_manager = new PlayersManager();
136
+});

+ 16 - 2
src/Muzich/CoreBundle/Resources/views/Layout/head_js.html.twig View File

@@ -9,11 +9,22 @@
9 9
   'js/jquery.form-2.14.js'
10 10
   'js/jConfirmAction/jconfirmaction.jquery.js'
11 11
   '@MuzichCoreBundle/Resources/public/js/TagPrompt.js'
12
-  '@MuzichCoreBundle/Resources/public/js/autoplay.js'
12
+  '@MuzichCoreBundle/Resources/public/js/play.js'
13
+  '@MuzichCoreBundle/Resources/public/js/play2.js'
13 14
   '@MuzichCoreBundle/Resources/public/js/muzich.js' %}{# filter='yui_js' %}#}
14 15
   <script src="{{ asset_url }}"></script>
15 16
 {% endjavascripts %}
16 17
 
18
+<script>
19
+  $(document).ready(function(){  
20
+    // Pour le moment on charge toujours yt api
21
+    var tag = document.createElement('script');
22
+    tag.src = "//www.youtube.com/iframe_api";
23
+    var firstScriptTag = document.getElementsByTagName('script')[0];
24
+    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
25
+  });
26
+</script>
27
+
17 28
 <script type="text/javascript">
18 29
   string_follow_stop = "{{ 'user.stop_follow'|trans({}, 'users') }}";
19 30
   string_follow_following = "{{ 'user.following'|trans({}, 'users') }}";
@@ -56,6 +67,9 @@
56 67
   url_element_add = "{{ path('element_add') }}";
57 68
   url_element_dom_get_one_autoplay = "{{ path('element_dom_get_one', {'type':'autoplay'}) }}";
58 69
   url_element_get_stream_data = "{{ path('element_get_stream_data') }}";
59
-
60 70
   url_img_ajax_loader = "{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}";
71
+  url_get_embed_for_element = "{{ path('url_get_embed_for_element') }}";
72
+  
73
+  config_player_youtube_width = "{{ player_config_youtube_width }}";
74
+  config_player_youtube_height = "{{ player_config_youtube_height }}";
61 75
 </script>

+ 13 - 29
src/Muzich/CoreBundle/Resources/views/SearchElement/default.html.twig View File

@@ -8,36 +8,18 @@
8 8
   </div>
9 9
 {% endif %}
10 10
 
11
-<div class="elements_loader_div">
12
-  <img class="elements_new_loader" style="display: none;" src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loading" />
13
-</div>
11
+{% if not app.request.isXmlHttpRequest %}
12
+  <div class="elements_loader_div">
13
+    <img class="elements_new_loader" style="display: none;" src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loading" />
14
+  </div>
15
+{% endif %}
14 16
 
15 17
 {% if elements|length %}
16 18
   {% if not app.request.isXmlHttpRequest %}<ul class="elements">{% endif %}
17 19
     {% for element in elements %} 
18
-      <li class="element 
19
-
20
-{% if loop.index0 is even %}
21
-  {% if invertcolor is not defined %}
22
-    even
23
-  {% elseif invertcolor %}
24
-    odd
25
-  {% else %}
26
-    even
27
-  {% endif %}
28
-{% else %}
29
-  {% if invertcolor is not defined %}
30
-    odd
31
-  {% elseif invertcolor %}
32
-    even
33
-  {% else %}
34
-    odd
35
-  {% endif %}
36
-{% endif %}" id="element_{{ element.id }}">
37
-             
38
-        {% include "MuzichCoreBundle:SearchElement:element.html.twig" %}
39
-
40
-      </li>
20
+      
21
+      {% include "MuzichCoreBundle:SearchElement:li.element.html.twig" %}
22
+      
41 23
     {% endfor %} 
42 24
   {% if not app.request.isXmlHttpRequest %}</ul>{% endif %}
43 25
 
@@ -61,6 +43,8 @@
61 43
 
62 44
 {% endif %}
63 45
 
64
-<div class="elements_loader_div">
65
-  <img class="elements_more_loader" style="display: none;" src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loading" />
66
-</div>
46
+{% if not app.request.isXmlHttpRequest %}
47
+  <div class="elements_loader_div">
48
+    <img class="elements_more_loader" style="display: none;" src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loading" />
49
+  </div>
50
+{% endif %}

+ 2 - 6
src/Muzich/CoreBundle/Resources/views/SearchElement/element.html.twig View File

@@ -274,12 +274,8 @@
274 274
 {% endif %}
275 275
 {% endif %}
276 276
 
277
-{% if element.embed and display_player %}
278
-  {% autoescape false %}
279
-    <div id="embed_{{ element.id }}" class="element_embed" style="display: none;">
280
-      {{ element.embed }}
281
-    </div>
282
-  {% endautoescape %}
277
+{% if display_player %}
278
+  <div id="embed_{{ element.id }}" class="element_embed" style="display: none;"></div>
283 279
 {% endif %}
284 280
 
285 281
 {% if display_comments %}

+ 10 - 1
src/Muzich/CoreBundle/Resources/views/SearchElement/li.element.html.twig View File

@@ -1,4 +1,13 @@
1
-<li class="element {{ class_color }}" id="element_{{ element.id }}">
1
+{% if class_color is not defined %}
2
+  {% set class_color = '' %}
3
+{% endif %}
4
+<li
5
+  class="element {{ class_color }}"
6
+  id="element_{{ element.id }}"
7
+  data-type="{{ element.type }}"
8
+  data-refid="{{ element.refId }}"
9
+  data-elementid="{{ element.id }}"
10
+>
2 11
   
3 12
   {% include "MuzichCoreBundle:SearchElement:element.html.twig" %}
4 13