You are here

function audio_js_field_formatter_view in audio.js 7

Implements hook_field_formatter_view().

File

./audio_js.module, line 134
This is the main script for the audio.js module. It merely contains the implementation of hooks invoked by Drupal core.

Code

function audio_js_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  $settings = $display['settings'];

  // Include main audio.js library.
  if (module_exists('libraries')) {
    $audiojs_path = libraries_get_path('audiojs');
    $audio_library = $audiojs_path . "/audiojs/audio.min.js";
    drupal_add_js($audio_library, 'file');
  }
  $module_path = drupal_get_path('module', 'audio_js');
  $css_style = check_plain($settings['audio_js_style']);
  drupal_add_css($module_path . '/css/audio_js_' . $css_style . '.css');

  // Test whether you create a single player or a playlist.
  if (!empty($items[1]) && $settings['audio_js_playlist'] == 0) {

    // Create playlist player.
    $variables = array(
      'preload' => $settings['audio_js_preload'],
      'autoplay' => $settings['audio_js_autoplay'],
      'class' => $css_style,
    );
    $element[0]['#markup'] = theme('audio_js_audio_tag_for_playlist', $variables);
    $list = array();
    foreach ($items as $delta => $item) {

      // Get the file url and label.
      $file = _audio_js_get_items_info($display['type'], $instance, $item);

      // Make sure the file is a mp3.
      $file_parts = pathinfo($file['url']);
      if ($file_parts['extension'] == 'mp3') {
        $list[] = l($file['label'], NULL, array(
          'attributes' => array(
            'data-src' => $file['url'],
          ),
          'fragment' => 'audio',
          'external' => TRUE,
        ));
      }
      else {
        drupal_set_message("Invalid file type. The audio.js player only supports mp3 files.", "warning");
      }
    }
    $element[0]['#suffix'] = theme('item_list', array(
      'items' => $list,
      'title' => '',
      'type' => 'ol',
      'attributes' => array(
        'class' => array(
          'audiojs-playlist',
        ),
      ),
    ));

    // Close opening tag in audio_js_audio_tag_for_playlist theme.
    $element[0]['#suffix'] .= '</div>';
    $loop = $settings['audio_js_loop'] ? TRUE : FALSE;
    $settings = array(
      'loop' => $loop,
      'swf' => base_path() . $audiojs_path . "/audiojs/audiojs.swf",
    );
    if (!empty($items)) {
      drupal_add_js(array(
        'audio_js' => $settings,
      ), 'setting');
      drupal_add_js($module_path . '/js/audio_js_playlist.js', 'file');
    }
  }
  else {

    // Create single player.
    foreach ($items as $delta => $item) {

      // Get the file url and label.
      $file = _audio_js_get_items_info($display['type'], $instance, $item);
      $variables = array(
        'url' => $file['url'],
        'description' => $file['label'],
        'label' => $settings['audio_js_label'],
        'preload' => $settings['audio_js_preload'],
        'autoplay' => $settings['audio_js_autoplay'],
        'loop' => $settings['audio_js_loop'],
        'class' => $css_style,
      );

      // Make sure the file is a mp3.
      $file_parts = pathinfo($file['url']);
      if ($file_parts['extension'] == 'mp3') {
        $element[$delta]['#markup'] = theme('audio_js_audio_tag', $variables);
      }
      else {
        drupal_set_message("Invalid file type. The audio.js player only supports mp3 files.", "warning");
      }
    }
    $settings = array(
      'swf' => base_path() . $audiojs_path . "/audiojs/audiojs.swf",
    );
    if (!empty($items)) {
      drupal_add_js(array(
        'audio_js' => $settings,
      ), 'setting');
      drupal_add_js($module_path . '/js/audio_js_init.js', 'file');
    }
  }
  return $element;
}