Version 1
[yaffs-website] / web / modules / contrib / advagg / advagg.api.php
diff --git a/web/modules/contrib/advagg/advagg.api.php b/web/modules/contrib/advagg/advagg.api.php
new file mode 100644 (file)
index 0000000..97b78b9
--- /dev/null
@@ -0,0 +1,198 @@
+<?php
+
+/**
+ * @file
+ * Hooks provided by the AdvAgg module.
+ */
+
+/**
+ * @defgroup advagg_hooks Advanced Aggregates Hooks
+ *
+ * @{
+ * Hooks for modules to implement to extend or modify Advanced Aggregates.
+ *
+ * @see https://api.drupal.org/api/drupal/includes%21module.inc/group/hooks/7.x
+ */
+
+/**
+ * Allow other modules to modify the aggregate groups.
+ *
+ * Called once per page at aggregation time (if not cached).
+ * Should be in MODULENAME.advagg.inc file.
+ *
+ * @param array $groups
+ *   The generated groups.
+ * @param string $type
+ *   The asset type ('css' or 'js').
+ *
+ * @see \Drupal\advagg\Asset\CssCollectionGrouper::group()
+ * @see \Drupal\advagg\Asset\JsCollectionGrouper::group()
+ * @see advagg_bundler_advagg_aggregate_grouping_alter()
+ */
+function hook_advagg_aggregate_grouping_alter(array &$groups, $type) {
+  $max = 4;
+  $modifiable = [];
+  $files = 0;
+  foreach ($groups as $key => $group) {
+    if (isset($group['type'], $group['preprocess']) && $group['type'] == 'file' && $group['preprocess']) {
+      $modifiable[$key] = $group;
+      $modifiable[$key]['order'] = $key;
+      $modifiable[$key]['file_count'] = count($group['items']);
+      $files += count($group['items']);
+    }
+  }
+
+  // If more bundles than $max return. $groups is already set to least
+  // possible number of groups with current sort. Enabling sort external first
+  // may help decrease number of bundles.
+  if (count($modifiable) > $max || !$modifiable) {
+    return;
+  }
+
+  $target_files = ceil($files / $max);
+  $final_groups = [];
+  $bundles = 0;
+  foreach ($groups as $key => $group) {
+    if (!isset($modifiable[$key]) || $bundles == $max) {
+      $final_groups[] = $group;
+      continue;
+    }
+    $splits = round($modifiable[$key]['file_count'] / $target_files);
+    if ($splits < 2) {
+      $final_groups[] = $group;
+      $bundles++;
+      continue;
+    }
+    $chunks = array_chunk($group['items'], $target_files);
+    foreach ($chunks as $chunk) {
+      $group['items'] = $chunk;
+      $final_groups[] = $group;
+      $bundles++;
+    }
+  }
+
+  $groups = $final_groups;
+}
+
+/**
+ * Allow other modules to add in their own settings and hooks.
+ *
+ * @param array $aggregate_settings
+ *   An associative array of hooks and settings used.
+ *
+ * @see advagg_current_hooks_hash_array()
+ * @see advagg_js_minify_advagg_current_hooks_hash_array_alter()
+ */
+function hook_advagg_current_hooks_hash_array_alter(array &$aggregate_settings) {
+  $aggregate_settings['variables']['advagg_js_minify'] = \Drupal::config('advagg_js_minify.settings')->get();
+}
+
+/**
+ * Allow other modules to modify the contents of individual CSS files.
+ *
+ * Called once per file at aggregation time.
+ *
+ * @param string $data
+ *   File contents. Depending on settings/modules these may be minified.
+ * @param array $css_asset
+ *   Asset array.
+ *
+ * @see \Drupal\advagg\Asset\CssCollectionOptimizer::optimize()
+ */
+function hook_advagg_css_contents_alter(&$data, array $css_asset) {
+  // Remove all font-style rules applying italics.
+  preg_replace("/(.*)(font-style\s*:.*italic)(.*)/m", "$0 --> $1 $3", $data);
+}
+
+/**
+ * Allow other modules to modify the contents of individual JavaScript files.
+ *
+ * Called once per file at aggregation time.
+ *
+ * @param string $contents
+ *   Raw file data.
+ * @param array $js_asset
+ *   Asset array.
+ *
+ * @see \Drupal\advagg\Asset\JsCollectionOptimizer::optimize()
+ */
+function hook_advagg_js_contents_alter(&$contents, array $js_asset) {
+  if ($js_asset['data'] == 'modules/advagg/advagg.admin.js') {
+    $contents = str_replace('AdvAgg Bypass Cookie Removed', 'Advanced Aggregates Cookie Removed', $contents);
+  }
+}
+
+/**
+ * Let other modules add/alter additional information about file passed in.
+ *
+ * @param string $file
+ *   The file path/name.
+ * @param array $data
+ *   An associative array of metadata on the file.
+ * @param array $cached
+ *   What data was found in the database (if any).
+ *
+ * @see Drupal\advagg\State\Files::scanFiles()
+ */
+function hook_advagg_scan_file_alter($file, array $data, array $cached) {
+  $data['chars'] = strlen($data['content']);
+}
+
+/**
+ * Tell advagg about other hooks related to advagg.
+ *
+ * @param array $hooks
+ *   Array of hooks related to advagg.
+ * @param bool $all
+ *   If FALSE get only the subset of hooks that alter the filename/contents.
+ *
+ * @see advagg_hooks_implemented()
+ * @see advagg_bundler_advagg_hooks_implemented_alter()
+ */
+function hook_advagg_hooks_implemented_alter(array &$hooks, $all) {
+  if ($all) {
+    $hooks['advagg_bundler_analysis_alter'] = [];
+  }
+}
+
+/**
+ * Allow other modules to modify the path to save aggregates to.
+ *
+ * @param string $path
+ *   The currently set folder to save the aggregated assets to.
+ *
+ * @see Drupal\advagg\Asset\AssetDumper::preparePath()
+ * @see advagg_mod_advagg_asset_path_alter()
+ */
+function hook_advagg_asset_path_alter(&$path, $extension) {
+  if ($extension == 'js') {
+    $path = 'public://javascript/';
+  }
+}
+
+/**
+ * Let other modules modify the analysis array before it is used.
+ *
+ * @param array $analysis
+ *   An associative array; filename -> data.
+ *
+ * @see advagg_bundler_analysis()
+ */
+function hook_advagg_bundler_analysis_alter(array &$analysis) {
+  foreach ($analysis as $filename => &$data) {
+    if ($filename) {
+      // This is the filename.
+    }
+
+    // This changes often; 604800 is 1 week.
+    if ($data['changes'] > 10 && $data['mtime'] >= REQUEST_TIME - 604800) {
+      // Modify the group hash so this doesn't end up in a big aggregate.
+      $data['group_hash'];
+    }
+  }
+  unset($data);
+}
+
+/**
+ * @} End of "defgroup advagg_hooks".
+ */