diff options
Diffstat (limited to 'sites/all/modules/colorbox/colorbox.module')
-rw-r--r-- | sites/all/modules/colorbox/colorbox.module | 525 |
1 files changed, 525 insertions, 0 deletions
diff --git a/sites/all/modules/colorbox/colorbox.module b/sites/all/modules/colorbox/colorbox.module new file mode 100644 index 000000000..e3d94d230 --- /dev/null +++ b/sites/all/modules/colorbox/colorbox.module @@ -0,0 +1,525 @@ +<?php + +/** + * @file + * A light-weight, customizable lightbox plugin for jQuery 1.3 + */ + +/** + * The default path to the Colorbox directory. + */ +define('COLORBOX_MIN_PLUGIN_VERSION', '1.3.21.1'); + + +/** + * Implements hook_theme(). + */ +function colorbox_theme() { + return array( + 'colorbox_imagefield' => array( + 'variables' => array( + 'image' => array(), + 'path' => NULL, + 'title' => NULL, + 'gid' => NULL, + ), + 'file' => 'colorbox.theme.inc', + ), + + 'colorbox_insert_image' => array( + 'variables' => array( + 'item' => NULL, + 'widget' => NULL, + ), + 'template' => 'colorbox-insert-image', + 'pattern' => 'colorbox_insert_image__[a-z0-9_]+', + 'file' => 'colorbox.theme.inc', + ), + + 'colorbox_image_formatter' => array( + 'variables' => array( + 'item' => NULL, + 'entity_type' => NULL, + 'entity' => NULL, + 'node' => NULL, // Left for legacy support. + 'field' => array(), + 'display_settings' => array(), + 'delta' => null, + ), + 'file' => 'colorbox.theme.inc', + ), + ); +} + +/** + * Implements hook_init(). + */ +function colorbox_init() { + // Do not load colorbox during the Drupal installation process, e.g. if part + // of installation profiles. + if (!drupal_installation_attempted()) { + _colorbox_doheader(); + } +} + +/** + * Implements hook_views_api(). + */ +function colorbox_views_api() { + return array( + 'api' => 2, + 'path' => drupal_get_path('module', 'colorbox') . '/views', + ); +} + +/** + * Implements hook_libraries_info(). + */ +function colorbox_libraries_info() { + $libraries['colorbox'] = array( + 'name' => 'Colorbox plugin', + 'vendor url' => 'http://www.jacklmoore.com/colorbox', + 'download url' => 'https://github.com/jackmoore/colorbox/archive/1.x.zip', + 'version arguments' => array( + 'file' => 'jquery.colorbox-min.js', + 'pattern' => '@(?i:Colorbox)\sv?([0-9\.a-z]+)@', + 'lines' => 5, + ), + 'files' => array( + 'js' => array( + 'jquery.colorbox-min.js', + ), + ), + 'variants' => array( + 'minified' => array( + 'files' => array( + 'js' => array( + 'jquery.colorbox-min.js', + ), + ), + ), + 'source' => array( + 'files' => array( + 'js' => array( + 'jquery.colorbox.js', + ), + ), + ), + ), + ); + + return $libraries; +} + +/** + * Implements hook_menu(). + */ +function colorbox_menu() { + $items = array(); + + $items['admin/config/media/colorbox'] = array( + 'title' => 'Colorbox', + 'description' => 'Adjust Colorbox settings.', + 'file' => 'colorbox.admin.inc', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('colorbox_admin_settings'), + 'access arguments' => array('administer site configuration'), + ); + + return $items; +} + +/** + * Check if Colorbox should be active for the current URL. + * + * @return + * TRUE if Colorbox should be active for the current page. + */ +function _colorbox_active() { + // Make it possible deactivate Colorbox with + // parameter ?colorbox=no in the url. + if (isset($_GET['colorbox']) && $_GET['colorbox'] == 'no') { + return FALSE; + } + + // Code from the block_list function in block.module. + $path = drupal_get_path_alias($_GET['q']); + $colorbox_pages = variable_get('colorbox_pages', "admin*\nimagebrowser*\nimg_assist*\nimce*\nnode/add/*\nnode/*/edit\nprint/*\nprintpdf/*\nsystem/ajax\nsystem/ajax/*"); + // Compare with the internal and path alias (if any). + $page_match = drupal_match_path($path, $colorbox_pages); + if ($path != $_GET['q']) { + $page_match = $page_match || drupal_match_path($_GET['q'], $colorbox_pages); + } + $page_match = variable_get('colorbox_visibility', 0) == 0 ? !$page_match : $page_match; + + // Allow other modules to change the state of colorbox for the current URL. + drupal_alter('colorbox_active', $page_match); + + return $page_match; +} + +/** + * Loads the various js and css files. + */ +function _colorbox_doheader() { + static $already_added = FALSE; + if ($already_added) { + return; // Don't add the JavaScript and CSS multiple times. + } + if (!_colorbox_active()) { + return; // Don't add the JavaScript and CSS on specified paths. + } + + // Insert options and translated strings as javascript settings. + if (variable_get('colorbox_custom_settings_activate', 0)) { + $js_settings = array( + 'transition' => variable_get('colorbox_transition_type', 'elastic'), + 'speed' => variable_get('colorbox_transition_speed', 350), + 'opacity' => variable_get('colorbox_opacity', '0.85'), + 'slideshow' => variable_get('colorbox_slideshow', 0) ? TRUE : FALSE, + 'slideshowAuto' => variable_get('colorbox_slideshowauto', 1) ? TRUE : FALSE, + 'slideshowSpeed' => variable_get('colorbox_slideshowspeed', 2500), + 'slideshowStart' => variable_get('colorbox_text_start', 'start slideshow'), + 'slideshowStop' => variable_get('colorbox_text_stop', 'stop slideshow'), + 'current' => strip_tags(variable_get('colorbox_text_current', '{current} of {total}')), + 'previous' => strip_tags(variable_get('colorbox_text_previous', '« Prev')), + 'next' => strip_tags(variable_get('colorbox_text_next', 'Next »')), + 'close' => strip_tags(variable_get('colorbox_text_close', 'Close')), + 'overlayClose' => variable_get('colorbox_overlayclose', 1) ? TRUE : FALSE, + 'maxWidth' => variable_get('colorbox_maxwidth', '98%'), + 'maxHeight' => variable_get('colorbox_maxheight', '98%'), + 'initialWidth' => variable_get('colorbox_initialwidth', '300'), + 'initialHeight' => variable_get('colorbox_initialheight', '250'), + 'fixed' => variable_get('colorbox_fixed', 1) ? TRUE : FALSE, + 'scrolling' => variable_get('colorbox_scrolling', 1) ? TRUE : FALSE, + 'mobiledetect' => variable_get('colorbox_mobile_detect', 1) ? TRUE : FALSE, + 'mobiledevicewidth' => variable_get('colorbox_mobile_device_width', '480px'), + ); + } + else { + $js_settings = array( + 'opacity' => '0.85', + 'current' => t('{current} of {total}'), + 'previous' => t('« Prev'), + 'next' => t('Next »'), + 'close' => t('Close'), + 'maxWidth' => '98%', + 'maxHeight' => '98%', + 'fixed' => TRUE, + 'mobiledetect' => variable_get('colorbox_mobile_detect', 1) ? TRUE : FALSE, + 'mobiledevicewidth' => variable_get('colorbox_mobile_device_width', '480px'), + ); + } + + $path = drupal_get_path('module', 'colorbox'); + $style = variable_get('colorbox_style', 'default'); + + // Give other modules the possibility to override Colorbox settings and style. + $data = &$js_settings; + drupal_alter('colorbox_settings', $data, $style); + + drupal_add_js(array('colorbox' => $js_settings), array('type' => 'setting', 'scope' => JS_DEFAULT)); + + // Add and initialise the Colorbox plugin. + $variant = variable_get('colorbox_compression_type', 'minified'); + if (module_exists('libraries')) { + libraries_load('colorbox', $variant); + } + drupal_add_js($path . '/js/colorbox.js'); + + // Add JS and CSS based on selected style. + switch ($style) { + case 'none': + break; + case 'default': + case 'plain': + case 'stockholmsyndrome': + drupal_add_css($path . '/styles/' . $style . '/colorbox_style.css'); + drupal_add_js($path . '/styles/' . $style . '/colorbox_style.js'); + break; + default: + drupal_add_css($style . '/colorbox.css'); + } + + if (variable_get('colorbox_load', 0)) { + drupal_add_js($path . '/js/colorbox_load.js'); + } + + if (variable_get('colorbox_inline', 0)) { + drupal_add_js($path . '/js/colorbox_inline.js'); + } + + $already_added = TRUE; +} + +/** + * Implements hook_field_formatter_info(). + */ +function colorbox_field_formatter_info() { + return array( + 'colorbox' => array( + 'label' => t('Colorbox'), + 'field types' => array('image'), + 'settings' => array( + 'colorbox_node_style' => '', + 'colorbox_node_style_first' => '', + 'colorbox_image_style' => '', + 'colorbox_gallery' => 'post', + 'colorbox_gallery_custom' => '', + 'colorbox_caption' => 'auto', + 'colorbox_caption_custom' => '', + 'colorbox_multivalue_index' => NULL, + ), + ), + ); +} + +/** + * Implements hook_field_formatter_settings_form(). + */ +function colorbox_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $image_styles = image_style_options(FALSE); + $image_styles_hide = $image_styles; + $image_styles_hide['hide'] = t('Hide (do not display image)'); + $element['colorbox_node_style'] = array( + '#title' => t('Content image style'), + '#type' => 'select', + '#default_value' => $settings['colorbox_node_style'], + '#empty_option' => t('None (original image)'), + '#options' => $image_styles_hide, + '#description' => t('Image style to use in the content.'), + ); + $element['colorbox_node_style_first'] = array( + '#title' => t('Content image style for first image'), + '#type' => 'select', + '#default_value' => $settings['colorbox_node_style_first'], + '#empty_option' => t('No special style.'), + '#options' => $image_styles, + '#description' => t('Image style to use in the content for the first image.'), + ); + $element['colorbox_image_style'] = array( + '#title' => t('Colorbox image style'), + '#type' => 'select', + '#default_value' => $settings['colorbox_image_style'], + '#empty_option' => t('None (original image)'), + '#options' => $image_styles, + '#description' => t('Image style to use in the Colorbox.'), + ); + + $gallery = array( + 'post' => t('Per post gallery'), + 'page' => t('Per page gallery'), + 'field_post' => t('Per field in post gallery'), + 'field_page' => t('Per field in page gallery'), + 'custom' => t('Custom'), + 'none' => t('No gallery'), + ); + $element['colorbox_gallery'] = array( + '#title' => t('Gallery (image grouping)'), + '#type' => 'select', + '#default_value' => $settings['colorbox_gallery'], + '#options' => $gallery, + '#description' => t('How Colorbox should group the image galleries.'), + ); + $element['colorbox_gallery_custom'] = array( + '#title' => t('Custom gallery'), + '#type' => 'textfield', + '#maxlength' => 32, + '#default_value' => $settings['colorbox_gallery_custom'], + '#description' => t('All images on a page with the same gallery value (rel attribute) will be grouped together. It must only contain lowercase letters, numbers, hyphen and underscores.'), + '#element_validate' => array('colorbox_gallery_custom_validate'), + '#required' => FALSE, + '#states' => array( + 'visible' => array( + ':input[name$="[settings_edit_form][settings][colorbox_gallery]"]' => array('value' => 'custom'), + ), + ), + ); + + $caption = array( + 'auto' => t('Automatic'), + 'title' => t('Title text'), + 'alt' => t('Alt text'), + 'node_title' => t('Content title'), + 'custom' => t('Custom (with tokens)'), + 'none' => t('None'), + ); + $element['colorbox_caption'] = array( + '#title' => t('Caption'), + '#type' => 'select', + '#default_value' => $settings['colorbox_caption'], + '#options' => $caption, + '#description' => t('Automatic will use the first non-empty value of the title, the alt text and the content title.'), + ); + $element['colorbox_caption_custom'] = array( + '#title' => t('Custom caption'), + '#type' => 'textfield', + '#default_value' => $settings['colorbox_caption_custom'], + '#states' => array( + 'visible' => array( + ':input[name$="[settings_edit_form][settings][colorbox_caption]"]' => array('value' => 'custom'), + ), + ), + ); + // Allow users to hide or set a custom recursion limit. + // The module token_tweaks sets a global recursion limit that can not be bypassed. + if (module_exists('token') && $recursion_limit = min(variable_get('token_tree_recursion_limit', 3), variable_get('colorbox_token_recursion_limit', 3))) { + $element['colorbox_token'] = array( + '#type' => 'fieldset', + '#title' => t('Replacement patterns'), + '#theme' => 'token_tree', + '#token_types' => array($instance['entity_type'], 'file'), + '#recursion_limit' => $recursion_limit, + '#dialog' => TRUE, + '#states' => array( + 'visible' => array( + ':input[name$="[settings_edit_form][settings][colorbox_caption]"]' => array('value' => 'custom'), + ), + ), + ); + } + else { + $element['colorbox_token'] = array( + '#type' => 'fieldset', + '#title' => t('Replacement patterns'), + '#description' => '<strong class="error">' . t('For token support the <a href="@token_url">token module</a> must be installed.', array('@token_url' => 'http://drupal.org/project/token')) . '</strong>', + '#states' => array( + 'visible' => array( + ':input[name$="[settings_edit_form][settings][colorbox_caption]"]' => array('value' => 'custom'), + ), + ), + ); + } + + return $element; +} + +/** + * Validate function for colorbox_gallery_custom. + */ +function colorbox_gallery_custom_validate($element, &$form_state) { + if (!empty($element['#value']) && !preg_match('!^[a-z0-9_-]+$!', $element['#value'])) { + form_error($element, t('%name must only contain lowercase letters, numbers, hyphen and underscores.', array('%name' => $element['#title']))); + } +} + +/** + * Implements hook_field_formatter_settings_summary(). + */ +function colorbox_field_formatter_settings_summary($field, $instance, $view_mode) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $summary = array(); + + $image_styles = image_style_options(FALSE); + // Unset possible 'No defined styles' option. + unset($image_styles['']); + // Styles could be lost because of enabled/disabled modules that defines + // their styles in code. + if (isset($image_styles[$settings['colorbox_node_style']])) { + $summary[] = t('Content image style: @style', array('@style' => $image_styles[$settings['colorbox_node_style']])); + } + elseif ($settings['colorbox_node_style'] == 'hide') { + $summary[] = t('Content image style: Hide'); + } + else { + $summary[] = t('Content image style: Original image'); + } + + if (isset($image_styles[$settings['colorbox_node_style_first']])) { + $summary[] = t('Content image style of first image: @style', array('@style' => $image_styles[$settings['colorbox_node_style_first']])); + } + + if (isset($image_styles[$settings['colorbox_image_style']])) { + $summary[] = t('Colorbox image style: @style', array('@style' => $image_styles[$settings['colorbox_image_style']])); + } + else { + $summary[] = t('Colorbox image style: Original image'); + } + + $gallery = array( + 'post' => t('Per post gallery'), + 'page' => t('Per page gallery'), + 'field_post' => t('Per field in post gallery'), + 'field_page' => t('Per field in page gallery'), + 'custom' => t('Custom'), + 'none' => t('No gallery'), + ); + if (isset($settings['colorbox_gallery'])) { + $summary[] = t('Colorbox gallery type: @type', array('@type' => $gallery[$settings['colorbox_gallery']])) . ($settings['colorbox_gallery'] == 'custom' ? ' (' . $settings['colorbox_gallery_custom'] . ')' : ''); + } + + $caption = array( + 'auto' => t('Automatic'), + 'title' => t('Title text'), + 'alt' => t('Alt text'), + 'node_title' => t('Content title'), + 'custom' => t('Custom (with tokens)'), + 'none' => t('None'), + ); + if (isset($settings['colorbox_caption'])) { + $summary[] = t('Colorbox caption: @type', array('@type' => $caption[$settings['colorbox_caption']])); + } + + return implode('<br />', $summary); +} + +/** + * Implements hook_field_formatter_view(). + */ +function colorbox_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { + $element = array(); + $index = $display['settings']['colorbox_multivalue_index']; + + foreach ($items as $delta => $item) { + if ($index === NULL || $index === $delta) { + $element[$delta] = array( + '#theme' => 'colorbox_image_formatter', + '#item' => $item, + '#entity_type' => $entity_type, + '#entity' => $entity, + '#node' => $entity, // Left for legacy support. + '#field' => $field, + '#display_settings' => $display['settings'], + '#delta' => $delta, + ); + } + } + + return $element; +} + +/** + * Implements hook_insert_styles(). + */ +function colorbox_insert_styles() { + $insert_styles = array(); + foreach (image_styles() as $key => $style) { + $label = isset($style['label']) ? $style['label'] : $style['name']; + $insert_styles['colorbox__' . $key] = array('label' => t('Colorbox @style', array('@style' => $label))); + } + + return $insert_styles; +} + +/** + * Implements hook_insert_content(). + */ +function colorbox_insert_content($item, $style, $widget) { + list($item['module_name'], $item['style_name']) = explode('__', $style['name'], 2); + return theme(array('colorbox_insert_image__' . str_replace('-', '_', $item['style_name']), 'colorbox_insert_image'), array('item' => $item, 'widget' => $widget)); +} + +/** + * Machine names normally need to be unique but that does not apply to galleries. + * + * @return + * Always FALSE + */ +function colorbox_gallery_exists() { + return FALSE; +} |