123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
- /*
- * Helper functions extract values from manifest members
- * and reports conformance violations.
- */
- /*globals Components*/
- 'use strict';
- const {
- classes: Cc,
- interfaces: Ci
- } = Components;
- function ValueExtractor(aConsole, aBundle) {
- this.console = aConsole;
- this.domBundle = aBundle;
- }
- ValueExtractor.prototype = {
- // This function takes a 'spec' object and destructures
- // it to extract a value. If the value is of th wrong type, it
- // warns the developer and returns undefined.
- // expectType: is the type of a JS primitive (string, number, etc.)
- // object: is the object from which to extract the value.
- // objectName: string used to construct the developer warning.
- // property: the name of the property being extracted.
- // trim: boolean, if the value should be trimmed (used by string type).
- extractValue({expectedType, object, objectName, property, trim}) {
- const value = object[property];
- const isArray = Array.isArray(value);
- // We need to special-case "array", as it's not a JS primitive.
- const type = (isArray) ? 'array' : typeof value;
- if (type !== expectedType) {
- if (type !== 'undefined') {
- this.console.warn(this.domBundle.formatStringFromName("ManifestInvalidType",
- [objectName, property, expectedType],
- 3));
- }
- return undefined;
- }
- // Trim string and returned undefined if the empty string.
- const shouldTrim = expectedType === 'string' && value && trim;
- if (shouldTrim) {
- return value.trim() || undefined;
- }
- return value;
- },
- extractColorValue(spec) {
- const value = this.extractValue(spec);
- const DOMUtils = Cc['@mozilla.org/inspector/dom-utils;1']
- .getService(Ci.inIDOMUtils);
- let color;
- if (DOMUtils.isValidCSSColor(value)) {
- color = value;
- } else if (value) {
- this.console.warn(this.domBundle.formatStringFromName("ManifestInvalidCSSColor",
- [spec.property, value],
- 2));
- }
- return color;
- }
- };
- this.ValueExtractor = ValueExtractor; // jshint ignore:line
- this.EXPORTED_SYMBOLS = ['ValueExtractor']; // jshint ignore:line
|