zhangjian
2023-05-30 dabbcc356af21f9f2f88ac69ff07994e6e32e4fc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'use strict';
 
const CONSTANTS = require('./constants.js');
 
const common = require('./common.js');
const debug = common.debug;
const getScriptName = common.getScriptName;
const isResourceLink = common.isResourceLink;
const isScript = common.isScript;
const matches = common.matches;
 
const shouldAdd = options => {
  return options.custom.length > 0;
};
 
const add = (options, tags) => {
  const update = updateElement.bind(null, options);
  return tags.map(update);
};
 
const updateElement = (options, tag) => {
  return (isScript(tag) || isResourceLink(tag))
    ? updateScriptElement(options, tag)
    : tag;
};
 
const updateScriptElement = (options, tag) => {
  const scriptName = getScriptName(options, tag);
  let updated = false;
  options.custom.forEach(customOption => {
    if (matches(scriptName, customOption.test)) {
      tag.attributes = tag.attributes || {};
      tag.attributes[customOption.attribute] = customOption.value;
      updated = true;
    }
  });
  if (updated) {
    debug(`${CONSTANTS.PLUGIN}: updated to: ${JSON.stringify(tag)}`);
  }
  return tag;
};
 
module.exports = {
  shouldAdd,
  add
};