Skip to content
This repository has been archived by the owner on Mar 1, 2019. It is now read-only.

Commit

Permalink
abstract error messages to one file, with an extension method (#246)
Browse files Browse the repository at this point in the history
* abstract error messages to one file, with an extension method

* Get rid of default params (because of support and because they're unnecessary)
  • Loading branch information
hmorgancode authored and andrewrota committed Jul 12, 2016
1 parent ef9fa51 commit 370fe00
Show file tree
Hide file tree
Showing 17 changed files with 147 additions and 41 deletions.
3 changes: 2 additions & 1 deletion adaptors/backbone/backbone_view_widget.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
'use strict';

var logger = require('../../src/utils/logger');
var errors = require('../../src/utils/errors');

/**
* Wrapper Widget for child views
Expand Down Expand Up @@ -46,7 +47,7 @@ function BackboneViewWidget(template, childView, context, parentView) {
// Any other value is treated as a parent model lookup
this.model = parentView.model.getDeep(scope);
} else {
logger.warn('ChildView was passed as object without a scope property');
logger.warn(errors.childViewWasPassedAsObjectWithoutAScopeProperty());
}
}
}
Expand Down
11 changes: 6 additions & 5 deletions adaptors/backbone/base_collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ var _ = require('underscore');
var Backbone = require('backbone');
var tungsten = require('../../src/tungsten');
var logger = require('../../src/utils/logger');
var errors = require('../../src/utils/errors');

var eventTrigger = require('./event_trigger');
var ComponentWidget = require('./component_widget');
Expand Down Expand Up @@ -106,12 +107,12 @@ var BaseCollection = Backbone.Collection.extend({

for (let i = 0; i < methods.length; i++) {
if (protoProps[methods[i]]) {
var msg = 'Collection.' + methods[i] + ' may not be overridden';
if (staticProps && staticProps.debugName) {
msg += ' for collection "' + staticProps.debugName + '"';
logger.warn(errors.collectionMethodMayNotBeOverridden(methods[i], staticProps.debugName));
} else {
logger.warn(errors.collectionMethodMayNotBeOverridden(methods[i]));
}
logger.warn(msg);
// Replace attempted override with base version
// Replace attempted override with base version
protoProps[methods[i]] = wrapOverride(BaseCollection.prototype[methods[i]], protoProps[methods[i]]);
}
}
Expand Down Expand Up @@ -247,7 +248,7 @@ BaseCollection.prototype.reset = function(models, options = {}) {
}
}
if (!allObjects || !_.isArray(this.initialData)) {
logger.warn('Collection expected array of objects but got: ' + initialStr);
logger.warn(errors.collectionExpectedArrayOfObjectsButGot(initialStr));
}
}
}
Expand Down
11 changes: 6 additions & 5 deletions adaptors/backbone/base_model.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ var _ = require('underscore');
var Backbone = require('backbone');
var tungsten = require('../../src/tungsten');
var logger = require('../../src/utils/logger');
var errors = require('../../src/utils/errors');
var ComponentWidget = require('./component_widget');
var eventTrigger = require('./event_trigger');
/**
Expand Down Expand Up @@ -65,12 +66,12 @@ var BaseModel = Backbone.Model.extend({

for (let i = 0; i < methods.length; i++) {
if (protoProps[methods[i]]) {
var msg = 'Model.' + methods[i] + ' may not be overridden';
if (staticProps && staticProps.debugName) {
msg += ' for model "' + staticProps.debugName + '"';
logger.warn(errors.modelMethodMayNotBeOverridden(methods[i], staticProps.debugName));
} else {
logger.warn(errors.modelMethodMayNotBeOverridden(methods[i]));
}
logger.warn(msg);
// Replace attempted override with base version
// Replace attempted override with base version
protoProps[methods[i]] = wrapOverride(BaseModel.prototype[methods[i]], protoProps[methods[i]]);
}
}
Expand Down Expand Up @@ -563,7 +564,7 @@ BaseModel.prototype.set = function(key, val, options) {
delete options.initialData;
this.initialData = JSON.parse(initialStr || '{}');
if (!_.isObject(this.initialData) || _.isArray(this.initialData)) {
logger.warn('Model expected object of attributes but got: ' + initialStr);
logger.warn(errors.modelExpectedObjectOfAttributesButGot(initialStr));
}
}

Expand Down
9 changes: 5 additions & 4 deletions adaptors/backbone/base_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ var _ = require('underscore');
var Backbone = require('backbone');
var tungsten = require('../../src/tungsten');
var logger = require('../../src/utils/logger');
var errors = require('../../src/utils/errors');
var ViewWidget = require('./backbone_view_widget');
var ComponentWidget = require('./component_widget');

Expand Down Expand Up @@ -181,7 +182,7 @@ var BaseView = Backbone.View.extend({
// Compare full template against full DOM
var diff = this.getTemplateDiff();
if (diff.indexOf('<ins>') + diff.indexOf('<del>') > -2) {
logger.warn('DOM does not match VDOM for view "' + this.getDebugName() + '". Use debug panel to see differences');
logger.warn(errors.domDoesNotMatchVDOMForView(this.getDebugName()));
}
}
},
Expand Down Expand Up @@ -419,11 +420,11 @@ var BaseView = Backbone.View.extend({

for (var i = 0; i < methods.length; i++) {
if (protoProps[methods[i]]) {
var msg = 'View.' + methods[i] + ' may not be overridden';
if (staticProps && staticProps.debugName) {
msg += ' for view "' + staticProps.debugName + '"';
logger.warn(errors.viewMethodMayNotBeOverridden(methods[i], staticProps.debugName));
} else {
logger.warn(errors.viewMethodMayNotBeOverridden(methods[i]));
}
logger.warn(msg);
// Replace attempted override with base version
protoProps[methods[i]] = wrapOverride(BaseView.prototype[methods[i]], protoProps[methods[i]]);
}
Expand Down
5 changes: 3 additions & 2 deletions adaptors/backbone/component_widget.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

var _ = require('underscore');
var logger = require('../../src/utils/logger');
var errors = require('../../src/utils/errors');

var modelFunctionsToMap = ['trigger', 'set', 'get', 'has', 'doSerialize', 'save', 'fetch', 'sync', 'validate', 'isValid'];
var modelFunctionsToDummy = ['on', 'off', 'listenTo'];

var getDummyFunction = function(fn) {
return function() {
logger.warn('Component.' + fn + ' may not be called directly.');
logger.warn(errors.componentFunctionMayNotBeCalledDirectly(fn));
};
};

Expand Down Expand Up @@ -57,7 +58,7 @@ function ComponentWidget(ViewConstructor, model, template, options, key) {
if (typeof this[fn] === 'undefined') {
this[fn] = _.bind(model[fn], model);
} else {
logger.warn('Cannot overwrite component method: ' + fn);
logger.warn(errors.cannotOverwriteComponentMethod(fn));
}
}
}
Expand Down
5 changes: 2 additions & 3 deletions src/debug/panel_js/model_panel_events.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
var window = require('global/window');
var _ = require('underscore');
var logger = require('../../utils/logger');
var errors = require('../../utils/errors');
var utils = require('./utils');
var appData = require('./app_data');

Expand Down Expand Up @@ -81,9 +82,7 @@ module.exports = function() {
appData.selectedModel.obj.set(key, value);
appData.updateSelectedModel();
} catch (ex) {
var message = 'Unable to parse "' + e.currentTarget.value + '" to a valid value. Input must match JSON format';
utils.alert(message);
logger.warn(message);
utils.alert(errors.unableToParseToAValidValueMustMatchJSONFormat(e.currentTarget.value));
utils.selectElements('js-model-property-value')[0].focus();
}
});
Expand Down
3 changes: 2 additions & 1 deletion src/debug/vtree_to_string.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

var _ = require('underscore');
var logger = require('../utils/logger');
var errors = require('../utils/errors');
var syntaxHighlight = require('./syntax_highlight');

var virtualDomImplementation = require('../vdom/virtual_dom_implementation');
Expand Down Expand Up @@ -54,7 +55,7 @@ function toString(vtree, escaped) {
if (typeof vtree.templateToString === 'function') {
output += vtree.templateToString(toString);
} else {
logger.warn('Widget type: ' + vtree.constructor.name + ' has no templateToString function, falling back to DOM');
logger.warn(errors.widgetTypeHasNoTemplateToStringFunctionFallingBackToDOM(vtree.constructor.name));
var elem = vdom.create(virtualHyperscript('div', {}, vtree));
output += elem.innerHTML;
}
Expand Down
3 changes: 2 additions & 1 deletion src/debug/window_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ var _ = require('underscore');
var utils = require('./panel_js/utils');
var appData = require('./panel_js/app_data');
var logger = require('../utils/logger');
var errors = require('../utils/errors');
var highlighter = require('./highlighter');

var isNode = require('./is_node');
Expand All @@ -26,7 +27,7 @@ function getWindow() {
// Launch panel
debugWindow = window.open('', 'TungstenDebugger', 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,width=800,height=640');
if (!debugWindow) {
logger.error('Unable to launch debug panel. You may need to allow the popup or run "window.launchDebugger()" from your console');
logger.error(errors.unableToLaunchDebugPanel());
} else {
debugWindow.document.title = 'DEBUG: ' + window.document.title;
debugWindow.onerror = collectError;
Expand Down
5 changes: 3 additions & 2 deletions src/event/events_core.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var dataset = require('data-set');
var eventWrapper = require('./tungsten_event');
var _ = require('underscore');
var logger = require('../utils/logger');
var errors = require('../utils/errors');

module.exports = {};

Expand Down Expand Up @@ -136,10 +137,10 @@ module.exports.removeEvent = function(evt) {
} else if (evt.length === 4) {
removeElementEvents(evt[0], evt[1], evt[2], evt[3]);
} else {
logger.warn('Object does not meet expected event spec', evt);
logger.warn(errors.objectDoesNotMeetExpectedEventSpec(), evt);
}
} else {
logger.warn('Object does not meet expected event spec', evt);
logger.warn(errors.objectDoesNotMeetExpectedEventSpec(), evt);
}
};

Expand Down
5 changes: 3 additions & 2 deletions src/template/adaptor.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var _ = require('underscore');
var ToString = require('./stacks/string');
var Context = require('./template_context');
var logger = require('./../utils/logger');
var errors = require('./../utils/errors');
var types = require('./types');
var virtualDomImplementation = require('../vdom/virtual_dom_implementation');
var isWidget = virtualDomImplementation.isWidget;
Expand Down Expand Up @@ -161,7 +162,7 @@ function render(stack, template, context, partials, parentView) {
}
} else {
// @TODO, perhaps return this string as the partial result so it renders to the page?
logger.warn('Warning: no partial registered with the name ' + partialName);
logger.warn(errors.warningNoPartialRegisteredWithTheName(partialName));
}
break;

Expand Down Expand Up @@ -346,7 +347,7 @@ var attachView = function(view, template, createWidget, partials, childClasses)
if (template.t === types.PARTIAL) {
var partialName = template.r;
if (!partials[partialName]) {
logger.warn('Warning: no partial registered with the name ' + partialName);
logger.warn(errors.warningNoPartialRegisteredWithTheName(partialName));
return null;
} else {
var partialTemplate = partials[partialName];
Expand Down
3 changes: 2 additions & 1 deletion src/template/compiler/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const _ = require('underscore');
const parser = require('./parser');
const stack = require('./stack');
const logger = require('./compiler_logger');
const errors = require('../../utils/errors');
const processTemplate = require('./languages/mustache');

/**
Expand Down Expand Up @@ -43,7 +44,7 @@ function getTemplate(template, options) {
let output = {};

if (stack.stack.length > 0) {
logger.exception('Not all tags were closed properly', stack.stack);
logger.exception(errors.notAllTagsWereClosedProperly(), stack.stack);
}

parser.end();
Expand Down
7 changes: 4 additions & 3 deletions src/template/compiler/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const Parser = require('htmlparser2/lib/Parser');
const types = require('../types');
const stack = require('./stack');
const logger = require('./compiler_logger');
const errors = require('../../utils/errors');
const decoder = require('./decoder');

// Taken from https://github.com/fb55/htmlparser2/blob/master/lib/Parser.js#L59
Expand Down Expand Up @@ -147,7 +148,7 @@ MustacheParser.prototype.onclosetag = function(name) {
}

if (name in voidElements) {
logger.warn(name + ' is a void element so does not need a closing tag');
logger.warn(errors.elementIsAVoidElementSoDoesNotNeedAClosingTag(name));
return;
}

Expand All @@ -160,10 +161,10 @@ MustacheParser.prototype.onclosetag = function(name) {
}
} else {
let current = this._stack[this._stack.length - 1];
logger.exception('</' + name + '> where a </' + current + '> should be.');
logger.exception(errors.wrongClosingElementType(name, current));
}
} else {
logger.exception('</' + name + '> with no paired <' + name + '>');
logger.exception(errors.closingHTMLElementWithNoPair(name));
}
};

Expand Down
17 changes: 9 additions & 8 deletions src/template/compiler/stack.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const _ = require('underscore');
const types = require('../types');
const htmlHelpers = require('../html_helpers');
const logger = require('./compiler_logger');
const errors = require('../../utils/errors');

// Keys to use for the outputted array
const templateKeys = {
Expand Down Expand Up @@ -104,7 +105,7 @@ templateStack.openElement = function(type, value) {
if (prev && this.htmlValidationMode) {
let isValid = htmlHelpers.validation.isValidChild(prev, value, this.htmlValidationMode === 'strict');
if (isValid !== true) {
logger.warn('Cannot place this ' + value + ' tag within a ' + prev.tagName + ' tag. ' + isValid);
logger.warn(errors.cannotPlaceThisTagWithinAPreviousTag(value, prev.tagName, isValid));
}
}
elem.childTags = {};
Expand Down Expand Up @@ -216,7 +217,7 @@ templateStack._closeElem = function(obj) {
let i;

if (obj.isOpen) {
logger.exception('Tag is closed before open tag is completed. Check for unpaired quotes.');
logger.exception(errors.tagIsClosedBeforeOpenTagIsCompletedCheckForUnpairedQuotes());
// Close the element off to avoid other errors
obj.close();
}
Expand Down Expand Up @@ -308,25 +309,25 @@ templateStack.closeElement = function(closingElem) {
} else {
actualTag = '{{/' + closingElem.value + '}}';
}
logger.exception(actualTag + ' where a ' + expectedTag + ' should be.');
logger.exception(errors.differentTagThanExpected(actualTag, expectedTag));
} else {
// If they match, everything lines up
this._closeElem(this.stack.pop());
}
} else {
if (closingElem.tagName) {
// Something has gone terribly wrong
logger.exception('</' + closingElem.tagName + '> with no paired <' + closingElem.tagName + '>');
logger.exception(errors.closingHTMLElementWithNoPair(closingElem.tagName));
} else {
logger.exception('{{/' + closingElem.value + '}} with no paired {{#' + closingElem.value + '}}');
logger.exception(errors.closingMustacheElementWithNoPair(closingElem.value));
}
}
};

templateStack.getOutput = function() {
// If any items are left on the stack, they weren't closed by the template
if (this.stack.length) {
logger.warn('Template contains unclosed items', this.stack);
logger.warn(errors.templateContainsUnclosedItems(), this.stack);
}
// Always return the array
return this.result;
Expand Down Expand Up @@ -387,7 +388,7 @@ function processAttributeArray(attrArray) {
// Ensure there are no tokens in a non-dynamic attribute name
for (let j = 0; j < name.length; j++) {
if (typeof name[j] !== 'string') {
logger.warn('Mustache token cannot be in attribute names', name[j]);
logger.warn(errors.mustacheTokenCannotBeInAttributeNames(), name[j]);
}
}

Expand Down Expand Up @@ -416,7 +417,7 @@ function processAttributeArray(attrArray) {
} else if (pushingTo === name) {
if (name.length === 0) {
if (item.type === types.INTERPOLATOR) {
logger.warn('Double curly interpolators cannot be in attributes', item.value);
logger.warn(errors.doubleCurlyInterpolatorsCannotBeInAttributes(), item.value);
} else if (item.type === types.SECTION) {
attrs.dynamic.push(templateStack.processObject(item));
continue;
Expand Down
5 changes: 3 additions & 2 deletions src/template/stacks/default.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
var document = require('global/document');
var processProperties = require('../process_properties');
var logger = require('../../utils/logger');
var errors = require('../../utils/errors');

// IE8 and back don't create whitespace-only nodes from the DOM
// This sets a flag so that templates don't create them either
Expand Down Expand Up @@ -154,7 +155,7 @@ DefaultStack.prototype.closeElement = function(closingElem) {
if (openElem) {
var openID = openElem.id;
if (openID !== id) {
logger.warn(tagName + ' tags improperly paired, closing ' + openID + ' with close tag from ' + id);
logger.warn(errors.tagsImproperlyPairedClosing(tagName, openID, id));
do {
openElem = this.stack.pop();
this._closeElem(openElem);
Expand All @@ -169,7 +170,7 @@ DefaultStack.prototype.closeElement = function(closingElem) {
this.closeElement(this.openElement('p', {}));
} else {
// Something has gone terribly wrong
logger.warn('Closing element ' + id + ' when the stack was empty');
logger.warn(errors.closingElementWhenTheStackWasEmpty(id));
}
};

Expand Down

0 comments on commit 370fe00

Please sign in to comment.