PageSourceSearch

https://www.battlefields.org/modules/contrib/quicklink/js/quicklink_init.js?tltzxl

js battlefields.org collected 2026-09-24 08:37:40 UTC 7,011 bytes, 200 lines download raw bytes

1(function () {
2
3  'use strict';
4
5  Drupal.behaviors.quicklink = {
6    attach: function attachQuicklink(context, settings) {
7      var debug = settings.quicklink.debug;
8
9      function hydrateQuicklinkConfig() {
10        settings.quicklink.quicklinkConfig = settings.quicklink.quicklinkConfig || {};
11        settings.quicklink.ignoredLinks = settings.quicklink.ignoredLinks || [];
12
13        var quicklinkConfig = settings.quicklink.quicklinkConfig;
14
15        quicklinkConfig.ignores = [];
16
17        // Loop through all the patterns to ignore, and generate rules to ignore URL patterns.
18        for (var i = 0; i < settings.quicklink.url_patterns_to_ignore.length; i++) {
19          var pattern = settings.quicklink.url_patterns_to_ignore[i];
20
21          (function (i, pattern) {
22            if (pattern.length) {
23              quicklinkConfig.ignores.push(function (uri, elem) {
24                var ruleName = 'Pattern found in href. See ignored URL patterns log.';
25                var ruleFunc = uri.includes(pattern);
26
27                outputDebugInfo(ruleFunc, ruleName, uri, elem, pattern);
28
29                return ruleFunc;
30              });
31            }
32          })(i, pattern);
33        }
34
35        // Loop through all the "ignore selectors", and generate rules.
36        if (settings.quicklink.ignore_selectors) {
37          for (var i = 0; i < settings.quicklink.ignore_selectors.length; i++) {
38            var pattern = settings.quicklink.ignore_selectors[i];
39
40            (function (i, pattern) {
41              if (pattern.length) {
42                quicklinkConfig.ignores.push(function (uri, elem) {
43                  var ruleName = 'Element matches custom selectors within "ignore selectors" array. See log.';
44                  var ruleFunc = elem.matches(pattern);
45
46                  outputDebugInfo(ruleFunc, ruleName, uri, elem, pattern);
47
48                  return ruleFunc;
49                });
50              }
51            })(i, pattern);
52          }
53        }
54
55        if (settings.quicklink.ignore_admin_paths) {
56          var adminLinkContainerPatterns = settings.quicklink.admin_link_container_patterns.join();
57
58          quicklinkConfig.ignores.push(function (uri, elem) {
59            var ruleName = 'Exists in admin element container.';
60            var ruleFunc = elem.matches(adminLinkContainerPatterns);
61
62            outputDebugInfo(ruleFunc, ruleName, uri, elem);
63
64            return ruleFunc;
65          });
66        }
67
68        if (settings.quicklink.ignore_ajax_links) {
69          quicklinkConfig.ignores.push(function (uri, elem) {
70            var ruleName = 'Link has "use-ajax" CSS class.';
71            var ruleFunc = elem.classList.contains('use-ajax');
72
73            outputDebugInfo(ruleFunc, ruleName, uri, elem);
74
75            return ruleFunc;
76          });
77
78          quicklinkConfig.ignores.push(function (uri, elem) {
79            var ruleName = 'Link has "/ajax" in url.';
80            var ruleFunc = uri.includes('/ajax');
81
82            outputDebugInfo(ruleFunc, ruleName, uri, elem);
83
84            return ruleFunc;
85          });
86        }
87
88        if (settings.quicklink.ignore_file_ext) {
89          quicklinkConfig.ignores.push(function (uri, elem) {
90            var ruleName = 'Contains file extension at end of href.';
91            var ruleFunc = uri.match(/(\.[^\/]{1,5}\?)|(\.[^\/]{1,5}$)/);
92
93            outputDebugInfo(ruleFunc, ruleName, uri, elem);
94
95            return ruleFunc;
96          });
97        }
98
99        if (settings.quicklink.total_request_limit) {
100          quicklinkConfig.limit = parseInt(settings.quicklink.total_request_limit);
101        }
102
103        if (settings.quicklink.concurrency_throttle_limit) {
104          quicklinkConfig.throttle = parseInt(settings.quicklink.concurrency_throttle_limit);
105        }
106
107        if (settings.quicklink.idle_wait_timeout) {
108          quicklinkConfig.timeout = parseInt(settings.quicklink.idle_wait_timeout);
109        }
110
111        if (settings.quicklink.viewport_delay) {
112          quicklinkConfig.delay = parseInt(settings.quicklink.viewport_delay);
113        }
114
115        quicklinkConfig.ignores.push(function (uri, elem) {
116          var ruleName = 'Contains noprefetch attribute.';
117          var ruleFunc = elem.hasAttribute('noprefetch');
118
119          outputDebugInfo(ruleFunc, ruleName, uri, elem);
120
121          return ruleFunc;
122        });
123
124        quicklinkConfig.ignores.push(function (uri, elem) {
125          var ruleName = 'Contains download attribute.';
126          var ruleFunc = elem.hasAttribute('download');
127
128          outputDebugInfo(ruleFunc, ruleName, uri, elem);
129
130          return ruleFunc;
131        });
132
133        quicklinkConfig.origins = (settings.quicklink.allowed_domains) ? settings.quicklink.allowed_domains : false;
134      }
135
136      function outputDebugInfo(ruleFunc, ruleName, uri, elem, pattern) {
137        if (debug && ruleFunc) {
138          var debugMessage = ruleName + ' Link ignored.';
139          var thisLog = {};
140          var urlPattern = pattern || false;
141
142          elem.classList.add('quicklink-ignore');
143          elem.textContent += '🚫';
144          elem.dataset.quicklinkMatch = debugMessage;
145
146          thisLog.ruleName = ruleName;
147          thisLog.uri = uri;
148          thisLog.elem = elem;
149          thisLog.message = debugMessage;
150
151          if (urlPattern) {
152            thisLog.urlPattern = urlPattern;
153          }
154
155          (function (thisLog) {
156            settings.quicklink.ignoredLinks.push(thisLog);
157          })(thisLog);
158        }
159      }
160
161      function loadQuicklink() {
162        var urlParams = new URLSearchParams(window.location.search);
163        var noprefetch = urlParams.get('noprefetch') !== null || window.location.hash === '#noprefetch' ;
164
165        if (noprefetch && debug) {
166          // eslint-disable-next-line no-console
167          console.info('The "noprefetch" parameter or hash exists in the URL. Quicklink library not loaded.');
168        }
169
170        return window.quicklink && !noprefetch;
171      }
172
173      if (!settings.quicklink.quicklinkConfig) {
174        hydrateQuicklinkConfig();
175      }
176
177      settings.quicklink.quicklinkConfig.el = (settings.quicklink.selector) ? context.querySelector(settings.quicklink.selector) : context;
178
179      if (loadQuicklink()) {
180        if (settings.quicklink.prefetch_only_paths) {
181          quicklink.prefetch(settings.quicklink.prefetch_only_paths);
182        }
183        else {
184          try {
185            quicklink.listen(settings.quicklink.quicklinkConfig);
186          }
187          catch(err) {
188            console.error('quicklink.listen is not found. Please verify you are running version 2 of the Quicklink library.', err);
189          }
190        }
191      }
192
193      if (debug) {
194        console.info('Quicklink config object', settings.quicklink.quicklinkConfig); // eslint-disable-line no-console
195        console.info('Quicklink module debug log', settings.quicklink.debug_log); // eslint-disable-line no-console
196        console.info('Quicklink ignored links', settings.quicklink.ignoredLinks); // eslint-disable-line no-console
197      }
198    }
199  };
200})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.