| '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 | 
| }; |