diff --git a/composer.json b/composer.json index bda85b2a8d9b333410566012d67917fcafc172ff..1d3ebef36a17748f7d183a804f4b092f73dc5620 100644 --- a/composer.json +++ b/composer.json @@ -119,7 +119,7 @@ "drupal/externalauth": "1.4", "drupal/field_group": "3.4", "drupal/field_permissions": "1.2", - "drupal/focal_point": "1.5", + "drupal/focal_point": "2.0.1", "drupal/google_analytics": "^4.0", "drupal/google_tag": "1.5", "drupal/honeypot": "2.1.2", diff --git a/composer.lock b/composer.lock index f6fbbb067f62c79cb4b41a724efee3025180e24d..9532820a2e43f116b935abe6aa3e71ad84f44f99 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b811d44ed2412e7c33e294cc83b69afe", + "content-hash": "ddf30e030f55e1ec3eb9cfae125ebf00", "packages": [ { "name": "alchemy/zippy", @@ -4177,21 +4177,23 @@ }, { "name": "drupal/focal_point", - "version": "1.5.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/focal_point.git", - "reference": "8.x-1.5" + "reference": "2.0.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/focal_point-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "41198e9220788c3b7d3146b10e5dfd6c73cd4784" + "url": "https://ftp.drupal.org/files/projects/focal_point-2.0.1.zip", + "reference": "2.0.1", + "shasum": "2af4bb7f305735adbc216de742f0fa02bba6457b" }, "require": { - "drupal/core": "^8.8 || ^9", - "drupal/crop": "^1.0 || ^2.0" + "drupal/core": "^9.3 || ^10", + "drupal/crop": "^2.3", + "drupal/jquery_ui": "^1.6", + "drupal/jquery_ui_draggable": "^2.0" }, "require-dev": { "drupal/crop": "*" @@ -4199,8 +4201,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.5", - "datestamp": "1598663903", + "version": "2.0.1", + "datestamp": "1689093654", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -4753,6 +4755,59 @@ "source": "https://git.drupalcode.org/project/jquery_ui_datepicker" } }, + { + "name": "drupal/jquery_ui_draggable", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jquery_ui_draggable.git", + "reference": "2.0.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jquery_ui_draggable-2.0.0.zip", + "reference": "2.0.0", + "shasum": "13a8f4bf037449cd176ddb967fc9cba9a466a705" + }, + "require": { + "drupal/core": "^9.2 || ^10", + "drupal/jquery_ui": "^1.6" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "2.0.0", + "datestamp": "1670871516", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "bnjmnm", + "homepage": "https://www.drupal.org/user/2369194" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + }, + { + "name": "zrpnr", + "homepage": "https://www.drupal.org/user/1448368" + } + ], + "description": "Provides jQuery UI Draggable library.", + "homepage": "https://www.drupal.org/project/jquery_ui_draggable", + "support": { + "source": "https://git.drupalcode.org/project/jquery_ui_draggable" + } + }, { "name": "drupal/jquery_ui_menu", "version": "2.0.0", diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index f875dfc39a5ecf987094df391e7153b8e4cf3b1a..d203241eee5939e9c04a719c81d4a87c8b39b99b 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -15,11 +15,11 @@ 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', - '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', + '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php', '3e41e0554275033aae3e9e7e056c2d14' => $vendorDir . '/longwave/laminas-diactoros/src/functions/create_uploaded_file.php', 'f4ee20bfdee1006b0970e8d951bea11e' => $vendorDir . '/longwave/laminas-diactoros/src/functions/marshal_headers_from_sapi.php', '039b4ca04402a921dc2af19c2e8c1f6e' => $vendorDir . '/longwave/laminas-diactoros/src/functions/marshal_method_from_sapi.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 00e4050e2c0d2b63d2d0dbced449833f74fc871d..43f7b892ec125a2404363d9adcec17713238a9fb 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -16,11 +16,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', - '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', + '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php', '3e41e0554275033aae3e9e7e056c2d14' => __DIR__ . '/..' . '/longwave/laminas-diactoros/src/functions/create_uploaded_file.php', 'f4ee20bfdee1006b0970e8d951bea11e' => __DIR__ . '/..' . '/longwave/laminas-diactoros/src/functions/marshal_headers_from_sapi.php', '039b4ca04402a921dc2af19c2e8c1f6e' => __DIR__ . '/..' . '/longwave/laminas-diactoros/src/functions/marshal_method_from_sapi.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index f94f82247d553aa60d5d878ee76059072e35ea52..4e83e4e6280d035f5f9bfe142c5bc0f7845c6bb1 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -4321,22 +4321,24 @@ }, { "name": "drupal/focal_point", - "version": "1.5.0", - "version_normalized": "1.5.0.0", + "version": "2.0.1", + "version_normalized": "2.0.1.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/focal_point.git", - "reference": "8.x-1.5" + "reference": "2.0.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/focal_point-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "41198e9220788c3b7d3146b10e5dfd6c73cd4784" + "url": "https://ftp.drupal.org/files/projects/focal_point-2.0.1.zip", + "reference": "2.0.1", + "shasum": "2af4bb7f305735adbc216de742f0fa02bba6457b" }, "require": { - "drupal/core": "^8.8 || ^9", - "drupal/crop": "^1.0 || ^2.0" + "drupal/core": "^9.3 || ^10", + "drupal/crop": "^2.3", + "drupal/jquery_ui": "^1.6", + "drupal/jquery_ui_draggable": "^2.0" }, "require-dev": { "drupal/crop": "*" @@ -4344,8 +4346,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.5", - "datestamp": "1598663903", + "version": "2.0.1", + "datestamp": "1689093654", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -4362,6 +4364,10 @@ "name": "Alexander Ross (bleen)", "homepage": "https://www.drupal.org/u/bleen", "role": "Maintainer" + }, + { + "name": "Rajeshreeputra", + "homepage": "https://www.drupal.org/user/3418561" } ], "description": "Focal Point allows content creators to mark the most important part of an image for easier cropping.", @@ -4904,6 +4910,62 @@ }, "install-path": "../../web/modules/jquery_ui_datepicker" }, + { + "name": "drupal/jquery_ui_draggable", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jquery_ui_draggable.git", + "reference": "2.0.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jquery_ui_draggable-2.0.0.zip", + "reference": "2.0.0", + "shasum": "13a8f4bf037449cd176ddb967fc9cba9a466a705" + }, + "require": { + "drupal/core": "^9.2 || ^10", + "drupal/jquery_ui": "^1.6" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "2.0.0", + "datestamp": "1670871516", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "installation-source": "dist", + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "bnjmnm", + "homepage": "https://www.drupal.org/user/2369194" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + }, + { + "name": "zrpnr", + "homepage": "https://www.drupal.org/user/1448368" + } + ], + "description": "Provides jQuery UI Draggable library.", + "homepage": "https://www.drupal.org/project/jquery_ui_draggable", + "support": { + "source": "https://git.drupalcode.org/project/jquery_ui_draggable" + }, + "install-path": "../../web/modules/jquery_ui_draggable" + }, { "name": "drupal/jquery_ui_menu", "version": "2.0.0", diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index d1fb3747a3e9677fee4fbb1fb29bb1d9f75d5bab..02dc331e71aad07965e17e621a9c5ff0116641d8 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'osu-asc-webservices/d8-upstream', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '44d8d50fd541fad1e6de4cfd98b65e451d9cde2e', + 'reference' => 'bcc1a39ef696685f6490451f9d8ee448dd5f745a', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -761,9 +761,9 @@ 'dev_requirement' => false, ), 'drupal/focal_point' => array( - 'pretty_version' => '1.5.0', - 'version' => '1.5.0.0', - 'reference' => '8.x-1.5', + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'reference' => '2.0.1', 'type' => 'drupal-module', 'install_path' => __DIR__ . '/../../web/modules/focal_point', 'aliases' => array(), @@ -832,6 +832,15 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'drupal/jquery_ui_draggable' => array( + 'pretty_version' => '2.0.0', + 'version' => '2.0.0.0', + 'reference' => '2.0.0', + 'type' => 'drupal-module', + 'install_path' => __DIR__ . '/../../web/modules/jquery_ui_draggable', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'drupal/jquery_ui_menu' => array( 'pretty_version' => '2.0.0', 'version' => '2.0.0.0', @@ -1558,7 +1567,7 @@ 'osu-asc-webservices/d8-upstream' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '44d8d50fd541fad1e6de4cfd98b65e451d9cde2e', + 'reference' => 'bcc1a39ef696685f6490451f9d8ee448dd5f745a', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), diff --git a/web/modules/focal_point/composer.json b/web/modules/focal_point/composer.json index ce849489d938fd80882778aa66da952f344a41ff..614806cf7792d9a30051bc09dbbd1eada25d902b 100644 --- a/web/modules/focal_point/composer.json +++ b/web/modules/focal_point/composer.json @@ -24,6 +24,8 @@ } ], "require": { - "drupal/crop": "^1.0 || ^2.0" + "drupal/crop": "^2.3", + "drupal/jquery_ui": "^1.6", + "drupal/jquery_ui_draggable": "^2.0" } } diff --git a/web/modules/focal_point/css/focal_point.css b/web/modules/focal_point/css/focal_point.css index 5a30b58ab5e9f102c525a439b0efe39d63cbac45..36db9989ec1a374beb80bd4941a66a0c3dca0e1e 100644 --- a/web/modules/focal_point/css/focal_point.css +++ b/web/modules/focal_point/css/focal_point.css @@ -26,6 +26,7 @@ display: block; direction: initial; text-align: center; + line-height: initial; } .focal-point-preview-link:before { content: "\1F50D"; diff --git a/web/modules/focal_point/focal_point.info.yml b/web/modules/focal_point/focal_point.info.yml index 490faaae7ba08472eaf9732a80521dde824831df..21101167c3402772e0a02d8b8ec5eaed8723c8ce 100644 --- a/web/modules/focal_point/focal_point.info.yml +++ b/web/modules/focal_point/focal_point.info.yml @@ -1,7 +1,7 @@ name: Focal Point type: module description: Allows users to specify the focal point of an image for use during cropping. -core_version_requirement: ^8.8 || ^9 +core_version_requirement: ^9.3 || ^10 package: Media test_dependencies: - crop:crop @@ -9,7 +9,7 @@ dependencies: - drupal:image - crop:crop -# Information added by Drupal.org packaging script on 2020-08-29 -version: '8.x-1.5' +# Information added by Drupal.org packaging script on 2023-07-11 +version: '2.0.1' project: 'focal_point' -datestamp: 1598663906 +datestamp: 1689093655 diff --git a/web/modules/focal_point/focal_point.install b/web/modules/focal_point/focal_point.install index 0979bfca2a1f31d252d8251019a278d4a639857a..64d30c94e53cecdb3c32e29bfd29b8284ca2d92a 100644 --- a/web/modules/focal_point/focal_point.install +++ b/web/modules/focal_point/focal_point.install @@ -29,7 +29,6 @@ function focal_point_update_8001() { * Migrates legacy values to crop entities. */ function focal_point_update_8002(&$sandbox) { - /** @var \Drupal\file\FileUsage\FileUsageInterface $file_usage */ $file_storage = \Drupal::entityTypeManager()->getStorage('file'); $crop_storage = \Drupal::entityTypeManager()->getStorage('crop'); $crop_type = \Drupal::config('focal_point.settings')->get('crop_type'); @@ -53,8 +52,9 @@ function focal_point_update_8002(&$sandbox) { ->fetchAll(); foreach ($focal_points as $focal_point) { + $fid = $focal_point->fid; /** @var \Drupal\file\FileInterface $file */ - $file = $file_storage->load($focal_point->fid); + $file = $file_storage->load($fid); if (!is_null($file)) { $size = getimagesize($file->getFileUri()); @@ -76,7 +76,7 @@ function focal_point_update_8002(&$sandbox) { else { $sandbox['num_skipped']++; } - $sandbox['last_fid'] = $focal_point->fid; + $sandbox['last_fid'] = $fid; } $sandbox['#finished'] = $sandbox['total_items'] ? ($sandbox['num_processed'] + $sandbox['num_skipped']) / $sandbox['total_items'] : 1; diff --git a/web/modules/focal_point/focal_point.module b/web/modules/focal_point/focal_point.module index b10bf789868bfa97606ead42ad950d20fe60a6bd..90a35da26c05a8ed5f0b9cc37236f37f50b0a1c4 100644 --- a/web/modules/focal_point/focal_point.module +++ b/web/modules/focal_point/focal_point.module @@ -14,6 +14,7 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\file\FileInterface; +use Drupal\crop\CropInterface; /** * Implements hook_help(). @@ -87,11 +88,13 @@ function focal_point_entity_update(EntityInterface $entity) { if (!$crop->get('x')->isEmpty() && !$crop->get('y')->isEmpty()) { $x = $crop->get('x')->value; $y = $crop->get('y')->value; - $focal_point_original = $focal_point_manager->absoluteToRelative($x, $y, $item->width, $item->height); + $width = $item->width ?? 0; + $height = $item->height ?? 0; + $focal_point_original = $focal_point_manager->absoluteToRelative($x, $y, $width, $height); $entity->{$field->getName()}->focal_point_original = join(',', $focal_point_original); } } - if ($focal_point) { + if ($focal_point && $item->width && $item->height) { list($x, $y) = explode(',', $focal_point); $focal_point_manager->saveCropEntity($x, $y, $item->width, $item->height, $crop); } diff --git a/web/modules/focal_point/js/focal_point.js b/web/modules/focal_point/js/focal_point.js index 3ca457d9dd9d50da766d7164c8d664200eea7bab..37c5e45b78428a98eae0313df916dd6fb4ff1065 100644 --- a/web/modules/focal_point/js/focal_point.js +++ b/web/modules/focal_point/js/focal_point.js @@ -11,16 +11,16 @@ */ Drupal.behaviors.focalPointIndicator = { attach: function (context) { - $(".focal-point", context).once('focal-point-hide-field').each(function () { - var $wrapper = $(this).closest('.focal-point-wrapper'); + once('focal-point-hide-field', '.focal-point', context).forEach(function(el) { + var $wrapper = $(el).closest('.focal-point-wrapper'); // Add the "visually-hidden" class unless the focal point offset field // has an error. This will show the field for everyone when there is an // error and for non-sighted users no matter what. We add it the // form item to make sure the field is focusable while // the entire form item is hidden for sighted users. - if (!$(this).hasClass('error')) { + if (!$(el).hasClass('error')) { $wrapper.addClass('visually-hidden'); - $(this).on('focus', function () { + $(el).on('focus', function () { $wrapper.removeClass('visually-hidden'); }).on('blur', function () { $wrapper.addClass('visually-hidden'); @@ -28,12 +28,12 @@ } }); - $(".focal-point-indicator", context).once('focal-point-indicator').each(function () { + once('focal-point-hide-field', '.focal-point-indicator', context).forEach(function(el) { // Set some variables for the different pieces at play. - var $indicator = $(this); - var $img = $(this).siblings('img'); - var $previewLink = $(this).siblings('.focal-point-preview-link'); - var $field = $("." + $(this).attr('data-selector')); + var $indicator = $(el); + var $img = $(el).siblings('img'); + var $previewLink = $(el).siblings('.focal-point-preview-link'); + var $field = $("." + $(el).attr('data-selector')); var fp = new Drupal.FocalPoint($indicator, $img, $field, $previewLink); // Set the position of the indicator on image load and any time the diff --git a/web/modules/focal_point/src/FocalPointEffectBase.php b/web/modules/focal_point/src/FocalPointEffectBase.php index fb929fcd5823d0af94bf6e5c134c7dab913184b0..d9b002fa1cccb83d305c8fc04e7bb61129b4f985 100644 --- a/web/modules/focal_point/src/FocalPointEffectBase.php +++ b/web/modules/focal_point/src/FocalPointEffectBase.php @@ -95,7 +95,7 @@ public static function create(ContainerInterface $container, array $configuratio $container->get('focal_point.manager'), $container->get('entity_type.manager')->getStorage('crop'), $container->get('config.factory')->get('focal_point.settings'), - \Drupal::request() + $container->get('request_stack')->getCurrentRequest() ); } @@ -195,10 +195,9 @@ public function applyCrop(ImageInterface $image, CropInterface $crop) { * @return \Drupal\crop\CropInterface * The crop. */ - public function getCrop(ImageInterface $image) { + public function getCrop(ImageInterface $image): CropInterface { $crop_type = $this->focalPointConfig->get('crop_type'); - /** @var \Drupal\crop\CropInterface $crop */ if ($crop = Crop::findCrop($image->getSource(), $crop_type)) { // An existing crop has been found; set the size. $crop->setSize($this->configuration['width'], $this->configuration['height']); @@ -367,7 +366,7 @@ protected function constrainCropArea(array $anchor, ImageInterface $image, CropI * @return array * An array with the keys 'x' and 'y'. Values are in pixels. */ - protected function getOriginalFocalPoint(CropInterface $crop, FocalPointManager $focal_point_manager) { + protected function getOriginalFocalPoint(CropInterface $crop, FocalPointManager $focal_point_manager): array { $focal_point = $crop->position(); // Check if we are generating a preview image. If so get the focal point @@ -376,7 +375,7 @@ protected function getOriginalFocalPoint(CropInterface $crop, FocalPointManager if (!is_null($preview_value)) { // @todo: should we check that preview_value is valid here? If it's invalid it gets converted to 0,0. $original_image_size = $this->getOriginalImageSize(); - list($x, $y) = explode('x', $preview_value); + [$x, $y] = explode('x', $preview_value); $focal_point = $focal_point_manager->relativeToAbsolute($x, $y, $original_image_size['width'], $original_image_size['height']); } diff --git a/web/modules/focal_point/src/FocalPointManager.php b/web/modules/focal_point/src/FocalPointManager.php index 84ec7d3b098e8615c6016c034ca1602393f3bd54..aa3b8c5b3ada7b76533f01163817f3a0aab634b3 100644 --- a/web/modules/focal_point/src/FocalPointManager.php +++ b/web/modules/focal_point/src/FocalPointManager.php @@ -91,7 +91,7 @@ public function getCropEntity(FileInterface $file, $crop_type) { /** * {@inheritdoc} */ - public function saveCropEntity($x, $y, $width, $height, CropInterface $crop) { + public function saveCropEntity(float $x, float $y, int $width, int $height, CropInterface $crop): CropInterface { $absolute = $this->relativeToAbsolute($x, $y, $width, $height); $anchor = $crop->anchor(); diff --git a/web/modules/focal_point/src/FocalPointManagerInterface.php b/web/modules/focal_point/src/FocalPointManagerInterface.php index 86a4a1d5f91be3cb8cdb381d9a362db1f24f4269..32cf67a8da0206be3812a24f704e1b66d6a31a3b 100644 --- a/web/modules/focal_point/src/FocalPointManagerInterface.php +++ b/web/modules/focal_point/src/FocalPointManagerInterface.php @@ -2,8 +2,8 @@ namespace Drupal\focal_point; -use Drupal\file\FileInterface; use Drupal\crop\CropInterface; +use Drupal\file\FileInterface; /** * Defines an interface for focal point manager. @@ -104,6 +104,6 @@ public function getCropEntity(FileInterface $file, $crop_type); * @return \Drupal\crop\CropInterface * Saved crop entity. */ - public function saveCropEntity($x, $y, $width, $height, CropInterface $crop); + public function saveCropEntity(float $x, float $y, int $width, int $height, CropInterface $crop): CropInterface; } diff --git a/web/modules/focal_point/tests/src/Functional/FocalPointWidgetTest.php b/web/modules/focal_point/tests/src/Functional/FocalPointWidgetTest.php index 64e5eb74b1acc79fa3404338d93d69135211347b..cbfc8a05ea0563db61cce746f89b45867ef68599 100644 --- a/web/modules/focal_point/tests/src/Functional/FocalPointWidgetTest.php +++ b/web/modules/focal_point/tests/src/Functional/FocalPointWidgetTest.php @@ -30,7 +30,7 @@ class FocalPointWidgetTest extends BrowserTestBase { /** * {@inheritdoc} */ - public function setUp() { + public function setUp(): void { parent::setUp(); // Create an article content type that we will use for testing. @@ -60,18 +60,20 @@ public function testResave() { // Find images that match our field settings. $images = $this->getTestFiles('image'); + /** @var \Drupal\file\Entity\File $image */ + $image = $images[0]; // Create a File entity for the initial image. $file = File::create([ - 'uri' => $images[0]->uri, + 'uri' => $image->uri, 'uid' => 0, - 'status' => FILE_STATUS_PERMANENT, ]); + $file->setPermanent(); $file->save(); // Use the first valid image to create a new Node. $image_factory = $this->container->get('image.factory'); - $image = $image_factory->get($images[0]->uri); + $image = $image_factory->get($image->uri); /** @var \Drupal\focal_point\FocalPointManagerInterface $focalPointManager */ $focalPointManager = \Drupal::service('focal_point.manager'); diff --git a/web/modules/focal_point/tests/src/FunctionalJavascript/MediaLibraryIntegrationTest.php b/web/modules/focal_point/tests/src/FunctionalJavascript/MediaLibraryIntegrationTest.php index 9ba048ef023601d8b85f87f92264e5fef3c96da5..c9a61477ef89b97b265112229cfacf963ccb5c11 100644 --- a/web/modules/focal_point/tests/src/FunctionalJavascript/MediaLibraryIntegrationTest.php +++ b/web/modules/focal_point/tests/src/FunctionalJavascript/MediaLibraryIntegrationTest.php @@ -36,7 +36,7 @@ class MediaLibraryIntegrationTest extends WebDriverTestBase { /** * {@inheritdoc} */ - protected function setUp() { + protected function setUp(): void { parent::setUp(); $this->drupalCreateContentType([ @@ -102,10 +102,13 @@ protected function setUp() { */ public function testFocalPointMediaField() { $page = $this->getSession()->getPage(); + /** @var \Drupal\FunctionalJavascriptTests\JSWebAssert $assert_session */ $assert_session = $this->assertSession(); $files = $this->getTestFiles('image'); - $path = $this->container->get('file_system')->realpath($files[0]->uri); + /** @var \Drupal\file\Entity\File $file */ + $file = $files[0]; + $path = $this->container->get('file_system')->realpath($file->uri); $this->assertNotEmpty($path); // Upload an image and ensure that a single Focal Point widget shows up. diff --git a/web/modules/focal_point/tests/src/Unit/Effects/FocalPointEffectsTest.php b/web/modules/focal_point/tests/src/Unit/Effects/FocalPointEffectsTest.php index ae73e8911bb0b6cede5fdb3fcf6d2201a5a4a849..f5198e8dc0439b07986c3beee0a9ad1ae23834e8 100644 --- a/web/modules/focal_point/tests/src/Unit/Effects/FocalPointEffectsTest.php +++ b/web/modules/focal_point/tests/src/Unit/Effects/FocalPointEffectsTest.php @@ -23,7 +23,7 @@ class FocalPointEffectsTest extends FocalPointUnitTestCase { /** * {@inheritdoc} */ - protected function setUp() { + protected function setUp(): void { parent::setUp(); } @@ -87,7 +87,7 @@ public function testSetGetOriginalImageSize() { $effect = $this->getTestEffect($original_image); - $this->assertArrayEquals($original_image_dimensions, $effect->getOriginalImageSize()); + $this->assertEquals($original_image_dimensions, $effect->getOriginalImageSize()); } /** diff --git a/web/modules/focal_point/tests/src/Unit/FieldWidgets/FocalPointFieldWidgetTest.php b/web/modules/focal_point/tests/src/Unit/FieldWidgets/FocalPointFieldWidgetTest.php index 0fc763f9be71626c3e386837294ad2afd76cfcb9..7cf228bf23cb3f18cf011cd21ce8bc9afe06196a 100644 --- a/web/modules/focal_point/tests/src/Unit/FieldWidgets/FocalPointFieldWidgetTest.php +++ b/web/modules/focal_point/tests/src/Unit/FieldWidgets/FocalPointFieldWidgetTest.php @@ -22,21 +22,21 @@ class FocalPointFieldWidgetTest extends UnitTestCase { /** * A simple form element for testing. * - * @var testElement + * @var array */ protected $testElement; /** * A mock FormState object for testing. * - * @var \Drupal\Core\Form\FormStateInterface + * @var \PHPUnit\Framework\MockObject\MockObject */ protected $testFormState; /** * {@inheritdoc} */ - protected function setUp() { + protected function setUp(): void { parent::setUp(); // Create some mock objects. diff --git a/web/modules/focal_point/tests/src/Unit/FocalPointManagerTest.php b/web/modules/focal_point/tests/src/Unit/FocalPointManagerTest.php index 9691a84c8b56ac8e309b25fd7f6cd5e448915afc..8adf5efb8f78c94e5312761b78398908b8114ed7 100644 --- a/web/modules/focal_point/tests/src/Unit/FocalPointManagerTest.php +++ b/web/modules/focal_point/tests/src/Unit/FocalPointManagerTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\focal_point\Unit; use Drupal\crop\CropInterface; +use Drupal\crop\CropStorageInterface; use Drupal\focal_point\FocalPointManager; use Drupal\Core\Entity\EntityTypeManager; diff --git a/web/modules/focal_point/tests/src/Unit/FocalPointUnitTestCase.php b/web/modules/focal_point/tests/src/Unit/FocalPointUnitTestCase.php index 5bc88bc87bad84e0b3612ff7f9c2c0d3002dfdb9..f69a46cf10a4c98c9476573fcfcdbba91185b07d 100644 --- a/web/modules/focal_point/tests/src/Unit/FocalPointUnitTestCase.php +++ b/web/modules/focal_point/tests/src/Unit/FocalPointUnitTestCase.php @@ -37,7 +37,7 @@ abstract class FocalPointUnitTestCase extends UnitTestCase { /** * {@inheritdoc} */ - protected function setUp() { + protected function setUp(): void { parent::setUp(); $crop_storage = $this->prophesize(CropStorageInterface::class); diff --git a/web/modules/jquery_ui_draggable/LICENSE.txt b/web/modules/jquery_ui_draggable/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..d159169d1050894d3ea3b98e1c965c4058208fe1 --- /dev/null +++ b/web/modules/jquery_ui_draggable/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/web/modules/jquery_ui_draggable/composer.json b/web/modules/jquery_ui_draggable/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..41bf69c5bb3eaa90b839b122958970f8ea39e98c --- /dev/null +++ b/web/modules/jquery_ui_draggable/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "drupal/jquery_ui": "^1.6" + } +} diff --git a/web/modules/jquery_ui_draggable/jquery_ui_draggable.info.yml b/web/modules/jquery_ui_draggable/jquery_ui_draggable.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..4b8652f27e4de1ffc17ffb862fa4fb08fb9a3442 --- /dev/null +++ b/web/modules/jquery_ui_draggable/jquery_ui_draggable.info.yml @@ -0,0 +1,12 @@ +name: jQuery UI Draggable +type: module +description: 'Provides jQuery UI Draggable library.' +package: jQuery UI +core_version_requirement: ^9.2 || ^10 +dependencies: + - jquery_ui:jquery_ui + +# Information added by Drupal.org packaging script on 2022-12-12 +version: '2.0.0' +project: 'jquery_ui_draggable' +datestamp: 1670871520