diff --git a/jw_player.module b/jw_player.module index fa15c78..3fa5ba3 100644 --- a/jw_player.module +++ b/jw_player.module @@ -148,7 +148,7 @@ function jw_player_field_formatter_settings_form($field, $instance, $view_mode, '#title' => t('Select player type'), '#type' => 'select', '#options' => array( - 'player' => 'Single file player', + 'player' => 'Single file player (one or more players)', 'playlist' => 'Playlist player (multiple files)', 'sources' => 'Sources player (file with fallback sources)', ), @@ -783,18 +783,24 @@ function jw_player_pre_render_element($element) { } } + // Pass player type to JavaScript. + $settings['player_type'] = $element['#player_type']; + // If player type is playlist or sources, shift the #files to include // 'playlist'. Once done, merge #files and #options into $settings array. if ($element['#player_type'] != 'player') { $shift['playlist'] = $element['#files']; - $settings['options'] = array_merge($shift, $element['#options']); + $settings['config'][0]['options'] = array_merge($shift, $element['#options']); + $settings['config'][0]['html_id'] = $element['#html_id']; } else { - $settings['options'] = array_merge($element['#files'][0], $element['#options']); + foreach ($element['#files'] as $delta => $file) { + $settings['config'][$delta]['options'] = array_merge($file, $element['#options']); + $settings['config'][$delta]['html_id'] = $element['#html_id'] . '-' . $delta; + } } - // Pass html_id and options to JavaScript. - $settings['html_id'] = $element['#html_id']; + // Pass settings to JavaScript. $element['#attached']['js'][] = array( 'data' => array('jw_player' => array($settings)), 'type' => 'setting', @@ -1143,7 +1149,7 @@ function jw_player_build_element($field_type, $entity_type, $entity, $items, $se list($id) = entity_extract_ids($entity_type, $entity); $element['entity_id'] = $id; - $element['#html_id'] = jw_player_build_player_id($items, $settings); + $element['#html_id'] = jw_player_build_player_id($items[0], $settings); $element['#player_type'] = $settings['player_type']; if (!empty($settings['jwplayer_preset'])) { $element['#preset'] = $settings['jwplayer_preset']; @@ -1159,8 +1165,8 @@ function jw_player_build_element($field_type, $entity_type, $entity, $items, $se * Build a custom JW Player id to be set as the player's html id. Also can be * referenced via hook_jw_player_alter. * - * @param array $items - * Array of field items to be rendered. + * @param array $item + * Array of a single field item to be rendered. * @param array $settings * Array of display settings for the field item to be rendered. * @@ -1175,22 +1181,22 @@ function jw_player_build_element($field_type, $entity_type, $entity, $items, $se * * @see hook_jw_player_alter() */ -function jw_player_build_player_id($items, $settings) { +function jw_player_build_player_id($item, $settings) { // @todo Consider using standard approach when caching patches are committed. // https://www.drupal.org/node/2637552 // https://www.drupal.org/node/2643188 $item_id = ''; // If item being rendered is a file, video, or audio. - if (isset($items[0]['fid'])) { - $item_id = $items[0]['fid']; + if (isset($item['fid'])) { + $item_id = $item['fid']; } // If item being rendered is a link_field. - else if (isset($items[0]['url'])) { - $item_id = $items[0]['url']; + else if (isset($item['url'])) { + $item_id = $item['url']; } // If item being rendered is a text field. - else if (isset($items[0]['value'])) { - $item_id = $items[0]['value']; + else if (isset($item['value'])) { + $item_id = $item['value']; } $item_id = jw_player_remove_special_chars($item_id); // Cannot completely guarantee uniqueness, but adding different settings diff --git a/theme/jw_player.theme.inc b/theme/jw_player.theme.inc index 0219842..ddba899 100644 --- a/theme/jw_player.theme.inc +++ b/theme/jw_player.theme.inc @@ -22,9 +22,21 @@ function theme_jw_player_player($variables) { $attributes['id'] = $element['#html_id']; $output = '