docpad
Version:
DocPad is a dynamic static site generator. Write your content as files, or import your content from other external sources. Render the content with plugins. And deploy your static or dynamic website to your favourite hosting provider.
79 lines (72 loc) • 2.01 kB
JavaScript
// Generated by CoffeeScript 2.5.1
// =====================================
// Requires
// External
var ElementsCollection, ScriptsCollection, typeChecker;
typeChecker = require('typechecker');
// Local
ElementsCollection = require('./elements');
// =====================================
// Classes
/**
* Scripts collection class. A DocPad
* project's script file paths
* @class ScriptCollection
* @constructor
* @extends ElementsCollection
*/
ScriptsCollection = class ScriptsCollection extends ElementsCollection {
/**
* Add an element to the collection
* Right now we just support strings
* @method add
* @param {Array} values string array of file paths
* @param {Object} opts
*/
add(values, opts) {
var i, key, len, value;
// Prepare
opts || (opts = {});
if (opts.defer == null) {
opts.defer = true;
}
if (opts.async == null) {
opts.async = false;
}
opts.attrs || (opts.attrs = '');
if (typeChecker.isArray(values)) {
values = values.slice();
} else if (values) {
values = [values];
} else {
values = [];
}
if (opts.defer) {
// Build attrs
opts.attrs += `defer="defer" `;
}
if (opts.async) {
opts.attrs += `async="async" `;
}
// Convert urls into script element html
for (key = i = 0, len = values.length; i < len; key = ++i) {
value = values[key];
if (typeChecker.isString(value)) {
if (value[0] === '<') {
continue; // we are an element already, don't bother doing anything
} else if (value.indexOf(' ') === -1) {
// we are a url
values[key] = `<script ${opts.attrs} src="${value}"></script>`;
} else {
// we are inline
values[key] = `<script ${opts.attrs}>${value}</script>`;
}
}
}
// Call the super with our values
return super.add(values, opts);
}
};
// =====================================
// Export
module.exports = ScriptsCollection;