clientside_validation_jquery.module in Clientside Validation 8
Hook implementations for the Clientside Validation jQuery module.
File
clientside_validation_jquery/clientside_validation_jquery.moduleView source
<?php
/**
* @file
* Hook implementations for the Clientside Validation jQuery module.
*/
use Drupal\Core\Asset\AttachedAssetsInterface;
use Drupal\Core\Cache\Cache;
/**
* Implements hook_js_alter().
*/
function clientside_validation_jquery_js_alter(&$javascript, AttachedAssetsInterface $assets) {
if (\Drupal::moduleHandler()
->moduleExists('ckeditor')) {
$library_discovery = \Drupal::service('library.discovery');
$ckeditor = $library_discovery
->getLibraryByName('ckeditor', 'drupal.ckeditor');
foreach ($ckeditor['js'] as $ckeditor_file) {
if (strpos($ckeditor_file['data'], 'ckeditor.js') !== FALSE) {
break;
}
}
$cv_jquery = $library_discovery
->getLibraryByName('clientside_validation_jquery', 'cv.jquery.ckeditor');
foreach ($cv_jquery['js'] as $cv_jquery_file) {
if (strpos($cv_jquery_file['data'], 'cv.jquery.ckeditor.js') !== FALSE) {
break;
}
}
// Add our scripts after ckeditor.
if (isset($javascript[$ckeditor_file['data']]) && isset($javascript[$cv_jquery_file['data']])) {
$javascript[$cv_jquery_file['data']]['weight'] = $javascript[$ckeditor_file['data']]['weight'] + 0.001;
}
}
}
/**
* Implements hook_clientside_validation_validator_info_alter().
*/
function clientside_validation_jquery_clientside_validation_validator_info_alter(&$validators) {
foreach ($validators as &$validator) {
$validator['attachments']['library'][] = 'clientside_validation_jquery/cv.jquery.validate';
if (\Drupal::moduleHandler()
->moduleExists('ckeditor')) {
$validator['attachments']['library'][] = 'clientside_validation_jquery/cv.jquery.ckeditor';
}
if (\Drupal::moduleHandler()
->moduleExists('inline_form_errors')) {
$validator['attachments']['library'][] = 'clientside_validation_jquery/cv.jquery.ife';
}
}
}
/**
* Implements hook_library_info_alter().
*/
function clientside_validation_jquery_library_info_alter(&$libraries, $extension) {
if ($extension == 'clientside_validation_jquery' && isset($libraries['jquery.validate'])) {
$module_path = drupal_get_path('module', 'clientside_validation_jquery');
$path_in_yml = '/libraries/jqueryvalidate/dist/';
// Load settings from config.
$config = \Drupal::config('clientside_validation_jquery.settings');
// Check for library or js in module only if use_cdn flag is set to false.
if (empty($config
->get('use_cdn'))) {
// Based on updated readme instructions, check in libraries.
if (file_exists('libraries/jqueryvalidate/dist/jquery.validate.js')) {
// We do nothing here if it is available in libraries.
return;
}
// Previously we told users to extract the /dist folder.
// Make sure we still support this.
// Check direct extraction and extraction of just dist dir both.
$paths_to_check = [
'/js/lib/',
'/js/lib/dist/',
];
foreach ($paths_to_check as $path) {
if (file_exists($module_path . $path . 'jquery.validate.js')) {
unset($libraries['jquery.validate']['js'][$path_in_yml . 'jquery.validate.js']);
$libraries['jquery.validate']['js']['js/lib/jquery.validate.js'] = [];
// Add additional methods js only if required.
if (isset($libraries['jquery.validate.additional']['js'][$path_in_yml . 'additional-methods.js'])) {
unset($libraries['jquery.validate.additional']['js'][$path_in_yml . 'additional-methods.js']);
$libraries['jquery.validate']['js'][$path . 'additional-methods.js'] = [];
}
// Nothing left to be processed now, we simply return.
return;
}
}
}
// Use JS from CDN.
// Fallback to CDN if not available in libraries or module.
// Also use this by default if config says use CDN.
$cdn_url = $config
->get('cdn_base_url');
// For CDN we use the min versions as Drupal is not going to compress them.
unset($libraries['jquery.validate']['js'][$path_in_yml . 'jquery.validate.js']);
$libraries['jquery.validate']['js'][$cdn_url . 'jquery.validate.min.js'] = [
'type' => 'external',
];
// Add additional methods js only if required.
if (isset($libraries['jquery.validate.additional']['js'][$path_in_yml . 'additional-methods.js'])) {
unset($libraries['jquery.validate.additional']['js'][$path_in_yml . 'additional-methods.js']);
$libraries['jquery.validate.additional']['js'][$cdn_url . 'additional-methods.min.js'] = [
'type' => 'external',
];
}
}
}
/**
* Implements hook_page_attachments().
*
* Adds clientside_validation_jquery config to settings.
*
* @see contextual_preprocess()
*/
function clientside_validation_jquery_page_attachments(array &$page) {
$config = \Drupal::config('clientside_validation_jquery.settings');
$page['#attached']['drupalSettings']['clientside_validation_jquery']['validate_all_ajax_forms'] = (int) $config
->get('validate_all_ajax_forms');
$page['#attached']['drupalSettings']['clientside_validation_jquery']['force_validate_on_blur'] = (bool) $config
->get('force_validate_on_blur');
if (empty($page['#cache']['#tags'])) {
$page['#cache']['#tags'] = [];
}
$page['#cache']['#tags'] = Cache::mergeTags($page['#cache']['#tags'], $config
->getCacheTags());
}