blob: 8efff27a382079dbca5d15d036f2d37a35593218 [file] [edit]
// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
/**
* Storage for canned resources.
*
* These are usually non-JavaScript things that are collected during a build
* step and converted into a series of 'lib.resource.add(...)' calls. See
* the "@resource" directive from libdot/bin/concat for the canonical use
* case.
*
* This is global storage, so you should prefix your resource names to avoid
* collisions.
*/
lib.resource = {
resources_: {},
};
/** @typedef {{type: string, name: string, data: *}} */
lib.resource.ResourceRecord;
/**
* Add a resource.
*
* @param {string} name A name for the resource. You should prefix this to
* avoid collisions with resources from a shared library.
* @param {string} type A mime type for the resource, or "raw" if not
* applicable.
* @param {*} data The value of the resource.
*/
lib.resource.add = function(name, type, data) {
lib.resource.resources_[name] = {
type: type,
name: name,
data: data,
};
};
/**
* Retrieve a resource record.
*
* The resource data is stored on the "data" property of the returned object.
*
* @param {string} name The name of the resource to get.
* @param {!lib.resource.ResourceRecord=} defaultValue The value to return if
* the resource is not defined.
* @return {!lib.resource.ResourceRecord} The matching resource if it exists.
*/
lib.resource.get = function(name, defaultValue) {
if (!(name in lib.resource.resources_)) {
lib.assert(defaultValue !== undefined);
return defaultValue;
}
return lib.resource.resources_[name];
};
/**
* Retrieve resource data.
*
* @param {string} name The name of the resource to get.
* @param {*=} defaultValue The value to return if the resource is not defined.
* @return {*} The resource data.
*/
lib.resource.getData = function(name, defaultValue) {
if (!(name in lib.resource.resources_)) {
return defaultValue;
}
return lib.resource.resources_[name].data;
};
/**
* Retrieve resource as a data: url.
*
* @param {string} name The name of the resource to get.
* @param {!lib.resource.ResourceRecord=} defaultValue The value to return if
* the resource is not defined.
* @return {string} A data: url encoded version of the resource.
*/
lib.resource.getDataUrl = function(name, defaultValue) {
const resource = lib.resource.get(name, defaultValue);
return 'data:' + resource.type + ',' + resource.data;
};