Skip to content

Commit

Permalink
Various bug fixes and changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
PackWeb committed Dec 16, 2020
1 parent 765b80a commit 694e19e
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 208 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ attribute for more fine-grained control.
Installation
------------

- Install the [Preset](https://github.com/backdrop-contrib/preset) module.

- Install this module using the official Backdrop CMS instructions at
https://backdropcms.org/guide/modules.

Expand Down
154 changes: 0 additions & 154 deletions srcset_image.admin.inc

This file was deleted.

2 changes: 1 addition & 1 deletion srcset_image.info
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ description = Provides responsive images that utilise the `srcset` attribute.
backdrop = 1.x
type = module
dependencies[] = image
dependencies[] = preset
package = Media
configure = admin/config/media/srcset-image

100 changes: 54 additions & 46 deletions srcset_image.module
Original file line number Diff line number Diff line change
Expand Up @@ -17,40 +17,51 @@ function srcset_image_config_info() {
}

/**
* Implements hook_menu().
* Implements hook_preset_types().
*/
function srcset_image_menu() {
$items['admin/config/media/srcset-image'] = array(
'title' => 'srcset Image',
'description' => 'Configure srcset Image.',
'page callback' => 'srcset_image_sets_list',
'access arguments' => array('administer site configuration'),
'file' => 'srcset_image.admin.inc',
);
$items['admin/config/media/srcset-image/add'] = array(
'title' => 'Add image set',
'page callback' => 'backdrop_get_form',
'page arguments' => array('srcset_image_sets_form'),
'access arguments' => array('administer site configuration'),
'file' => 'srcset_image.admin.inc',
'type' => MENU_LOCAL_ACTION,
);
$items['admin/config/media/srcset-image/%srcset_image_set'] = array(
'title' => 'Edit image set',
'page callback' => 'backdrop_get_form',
'page arguments' => array('srcset_image_sets_form', 4),
'access arguments' => array('administer site configuration'),
'file' => 'srcset_image.admin.inc',
);
$items['admin/config/media/srcset-image/%srcset_image_set/delete'] = array(
'title' => 'Delete image set',
'page callback' => 'backdrop_get_form',
'page arguments' => array('srcset_image_sets_form_delete', 4),
'access arguments' => array('administer site configuration'),
'file' => 'srcset_image.admin.inc',
function srcset_image_preset_types() {
return array(
'sets' => array(
'name' => 'srcset Image Set',
'path' => 'admin/config/media/srcset-image',
'path_title' => 'srcset Image',
'path_description' => 'Configure srcset Image.',
'id_name' => 'Name',
'columns' => array(
'image_styles' => 'Image styles',
),
),
);
}

return $items;
/**
* Implements hook_preset_form().
*/
function srcset_image_preset_form($preset_type, $id) {
$form = array();
$config = config('srcset_image.' . $preset_type);

// Get default values.
$values = ($id) ? $config->get($id) : array();

// Get image styles as options for checkboxes.
$options = array();
foreach (image_styles() as $image_style) {
$options[$image_style['name']] = $image_style['label'];
}

if ($preset_type == 'sets') {
$form['image_styles'] = array(
'#type' => 'checkboxes',
'#title' => t('Image styles'),
'#description' => t('Select the image styles that make up this image set.'),
'#options' => $options,
'#default_value' => isset($values['image_styles']) ? $values['image_styles'] : array(),
'#required' => TRUE,
);
}

return $form;
}

/**
Expand All @@ -62,6 +73,7 @@ function srcset_image_theme($existing, $type, $theme, $path) {
'variables' => array(
'item' => NULL,
'image_set' => '',
'original' => TRUE,
'sizes' => '100vw',
'link' => '',
),
Expand All @@ -80,6 +92,7 @@ function srcset_image_field_formatter_info() {
'field types' => array('image'),
'settings' => array(
'srcset_image_set' => '',
'srcset_image_original' => TRUE,
'srcset_image_sizes' => '100vw',
'srcset_image_link' => '',
),
Expand All @@ -96,8 +109,8 @@ function srcset_image_field_formatter_settings_form($field, $instance, $view_mod

$image_sets = array();
$sets = config_get('srcset_image.sets');
foreach ($sets as $set) {
$image_sets[$set['machine_name']] = $set['name'];
foreach ($sets as $machine_name => $set) {
$image_sets[$machine_name] = $set['title'];
}
$element['srcset_image_set'] = array(
'#type' => 'select',
Expand All @@ -107,6 +120,13 @@ function srcset_image_field_formatter_settings_form($field, $instance, $view_mod
'#empty_option' => t('- None -'),
);

$element['srcset_image_original'] = array(
'#type' => 'checkbox',
'#title' => t('Include original image'),
'#description' => t('Whether or not the original (i.e. non-image-style version) should be included in the srcset attribute.'),
'#default_value' => $settings['srcset_image_original'],
);

$element['srcset_image_sizes'] = array(
'#type' => 'textfield',
'#title' => t('Sizes'),
Expand Down Expand Up @@ -201,23 +221,11 @@ function srcset_image_field_formatter_view($entity_type, $entity, $field, $insta
'#theme' => 'srcset_image_formatter',
'#item' => $item,
'#image_set' => $image_set,
'#original' => $settings['srcset_image_original'],
'#sizes' => filter_xss($settings['srcset_image_sizes']),
'#link' => isset($uri) ? $uri : '',
);
}

return $element;
}

/**
* Load an image set.
*/
function srcset_image_set_load($machine_name) {
$image_set = config_get('srcset_image.sets', $machine_name);

if (!empty($image_set)) {
return $image_set;
}
return FALSE;
}

38 changes: 31 additions & 7 deletions srcset_image.theme.inc
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,53 @@

/**
* Returns HTML for a srcset Image field formatter.
*
* @param array $variables
* An associative array which contains:
* - item: An array of image field values.
* - image_set: An array representing the srcset image preset.
* - original: Whether or not the original image should be included.
* - sizes: The value of the srcset image size setting.
* - link: An array of settings to generate a link.
*/
function theme_srcset_image_formatter($variables) {
$item = $variables['item'];

// Do not output an empty 'title' attribute.
if (isset($item['title']) && backdrop_strlen($item['title']) == 0) {
if (empty($item['title'])) {
unset($item['title']);
}

// Prepare srcset attribute.
if ($variables['image_set'] && $variables['image_set']['image_styles']) {
if (!empty($variables['image_set']['image_styles'])) {
$srcset = array();

// Get image style URL and width of each image style.
foreach ($variables['image_set']['image_styles'] as $image_style) {
$image_style_url = image_style_url($image_style, $item['uri']);
$image_size = getimagesize($image_style_url);
$srcset[] = $image_style_url . ' ' . $image_size[0] . 'w';
if (!empty($image_style)) {
// Generate the image style derivative.
$style = image_style_load($image_style);
$style_uri = image_style_path($image_style, $item['uri']);
$success = file_exists($style_uri) || image_style_create_derivative($style, $item['uri'], $style_uri);

if ($success) {
image_style_remove_allowed_uri($style_uri);

// Get the image size.
$style_url = image_style_url($image_style, $item['uri']);
$image_size = getimagesize($style_url);
if (!empty($image_size)) {
$srcset[] = $style_url . ' ' . $image_size[0] . 'w';
}
}
}
}

// Add original image.
$srcset[] = file_create_url($item['uri']) . ' ' . $item['width'] . 'w';
if ($variables['original']) {
$srcset[] = file_create_url($item['uri']) . ' ' . $item['width'] . 'w';
}

$item['attributes']['srcset'] = implode(', ', $srcset);

// Prepare sizes attribute.
Expand All @@ -49,4 +74,3 @@ function theme_srcset_image_formatter($variables) {

return $output;
}

0 comments on commit 694e19e

Please sign in to comment.