array('selectedMedia' => array_values($files))); drupal_add_js($setting, 'setting'); return $output; } $plugins = media_get_browser_plugin_info(); // Allow parameters to provide a list of enabled or disabled media browser // plugins. if (!empty($params['enabledPlugins'])) { $plugins = array_intersect_key($plugins, array_fill_keys($params['enabledPlugins'], 1)); } elseif (!empty($params['disabledPlugins'])) { $plugins = array_diff_key($plugins, array_fill_keys($params['disabledPlugins'], 1)); } // Render plugins. $plugin_output = array(); foreach ($plugins as $key => $plugin_info) { // Support the old CTools style handler definition. if (!isset($plugin_info['class']) && !empty($plugin_info['handler'])) { if (is_string($plugin_info['handler'])) { $plugin_info['class'] = $plugin_info['handler']; } elseif (isset($plugin_info['handler']['class'])) { $plugin_info['class'] = $plugin_info['handler']['class']; } } if (empty($plugin_info['class']) || !class_exists($plugin_info['class'])) { continue; } $plugin = new $plugin_info['class']($plugin_info, $params); if ($plugin->access()) { $plugin_output[$key] = $plugin->view(); if (!empty($plugin_output[$key]) && is_array($plugin_output[$key])) { $plugin_output[$key] += array( '#title' => $plugin_info['title'], '#weight' => isset($plugin_info['weight']) ? $plugin_info['weight'] : 0, ); } else { unset($plugin_output[$key]); continue; } } else { continue; } // We need to ensure that a submit button is available on each tab. If the // plugin is not returning a form element we need to add a submit button. // This is a fairly broad assumption. if (empty($plugin_output[$key]['#form']) && !empty($plugin_output[$key]['#markup'])) { $fake_buttons = '
'; $fake_buttons .= l(t('Submit'), '', array( 'attributes' => array( 'class' => array('button', 'button-yes', 'fake-submit', $key), ), )); $fake_buttons .= '
'; $plugin_output[$key]['#markup'] .= $fake_buttons; } } // Allow modules to change the tab names or whatever else they want to change // before we render. Perhaps this should be an alter on the theming function // that we should write to be making the tabs. drupal_alter('media_browser_plugins', $plugin_output); $tabs = array(); $settings = array('media' => array('browser' => array())); foreach (element_children($plugin_output, TRUE) as $key) { // Add any JavaScript settings from the browser tab. if (!empty($plugin_output[$key]['#settings'])) { $settings['media']['browser'][$key] = $plugin_output[$key]['#settings']; } // If this is a "ajax" style tab, add the href, otherwise an id. jQuery UI // will use an href value to load content from that url $tabid = 'media-tab-' . check_plain($key); if (!empty($plugin_output[$key]['#callback'])) { $href = $plugin_output[$key]['#callback']; } else { $attributes = array( 'class' => array('media-browser-tab'), 'id' => $tabid, 'data-tabid' => $key, ); // Create a div for each tab's content. $plugin_output[$key] += array( '#prefix' => '
\n", '#suffix' => "
\n", ); } $attributes = array( 'href' => '#' . $tabid, 'data-tabid' => $key, 'title' => $plugin_output[$key]['#title'], ); $tabs[]['element'] = array( '#markup' => '
  • ' . check_plain($plugin_output[$key]['#title']) . "
  • \n", ); } drupal_add_js($settings, 'setting'); $output['tabset']['tabs'] = array( '#theme' => 'menu_local_tasks', '#attributes' => array('class' => array('tabs', 'primary')), '#primary' => $tabs, ); $output['tabset']['panes'] = $plugin_output; return $output; } /** * Menu callback for testing the media browser. */ function media_browser_testbed($form) { $form['#attached']['library'][] = array('media', 'media_browser'); $form['#attached']['library'][] = array('media', 'media_browser_settings'); $form['test_element'] = array( '#type' => 'media', '#media_options' => array( 'global' => array( 'types' => array('video', 'audio'), ), ), ); $launcher = ' Launch Media Browser'; $form['options'] = array( '#type' => 'textarea', '#title' => 'Options (JSON)', '#rows' => 10, ); $form['launcher'] = array( '#markup' => $launcher, ); $form['result'] = array( '#type' => 'textarea', '#title' => 'Result', ); $js = <<').change(function() { jQuery('#edit-options').val(jQuery(this).val())}); jQuery('.form-item-options').append('