blob: 7d2280bcc8ceb9f5cd5f32ed70733ea9f74d3f95 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/base/extension_registry.html">
<script>
'use strict';
/**
* @fileoverview Provides the EventRegistry class.
*/
tr.exportTo('tr.model', function() {
// Create the type registry.
function EventRegistry() {
}
var options = new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);
tr.b.decorateExtensionRegistry(EventRegistry, options);
// Enforce all options objects have the right fields.
EventRegistry.addEventListener('will-register', function(e) {
var metadata = e.typeInfo.metadata;
if (metadata.name === undefined)
throw new Error('Registered events must provide name metadata');
var i = tr.b.findFirstInArray(
EventRegistry.getAllRegisteredTypeInfos(),
function(x) { return x.metadata.name === metadata.name; });
if (i !== undefined)
throw new Error('Event type with that name already registered');
if (metadata.pluralName === undefined)
throw new Error('Registered events must provide pluralName metadata');
if (metadata.singleViewElementName === undefined) {
throw new Error('Registered events must provide ' +
'singleViewElementName metadata');
}
if (metadata.multiViewElementName === undefined) {
throw new Error('Registered events must provide ' +
'multiViewElementName metadata');
}
});
// Helper: lookup Events indexed by type name.
var eventsByTypeName = undefined;
EventRegistry.getEventTypeInfoByTypeName = function(typeName) {
if (eventsByTypeName === undefined) {
eventsByTypeName = {};
EventRegistry.getAllRegisteredTypeInfos().forEach(function(typeInfo) {
eventsByTypeName[typeInfo.metadata.name] = typeInfo;
});
}
return eventsByTypeName[typeName];
}
// Ensure eventsByTypeName stays current.
EventRegistry.addEventListener('registry-changed', function() {
eventsByTypeName = undefined;
});
function convertCamelCaseToTitleCase(name) {
var result = name.replace(/[A-Z]/g, ' $&');
result = result.charAt(0).toUpperCase() + result.slice(1);
return result;
}
EventRegistry.getUserFriendlySingularName = function(typeName) {
var typeInfo = EventRegistry.getEventTypeInfoByTypeName(typeName);
var str = typeInfo.metadata.name;
return convertCamelCaseToTitleCase(str);
};
EventRegistry.getUserFriendlyPluralName = function(typeName) {
var typeInfo = EventRegistry.getEventTypeInfoByTypeName(typeName);
var str = typeInfo.metadata.pluralName;
return convertCamelCaseToTitleCase(str);
};
return {
EventRegistry: EventRegistry
};
});
</script>