Skip to content

Commit

Permalink
Components are now accessible via camelCase and UpperCamelCase me…
Browse files Browse the repository at this point in the history
…ans.

- addChild
- getChild
- getComponent
- registerComponent
  • Loading branch information
chemoish committed Sep 26, 2016
1 parent 3a859f9 commit f94c3d9
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
22 changes: 21 additions & 1 deletion src/js/component.js
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,12 @@ class Component {
* @method getChild
*/
getChild(name) {
if (!name) {
return;
}

name = toTitleCase(name);

return this.childNameIndex_[name];
}

Expand Down Expand Up @@ -343,7 +349,7 @@ class Component {

// If child is a string, create nt with options
if (typeof child === 'string') {
componentName = child;
componentName = toTitleCase(child);

// Options can also be specified as a boolean, so convert to an empty object if false.
if (!options) {
Expand Down Expand Up @@ -1386,11 +1392,18 @@ class Component {
* @method registerComponent
*/
static registerComponent(name, comp) {
if (!name) {
return;
}

name = toTitleCase(name);

if (!Component.components_) {
Component.components_ = {};
}

Component.components_[name] = comp;

return comp;
}

Expand All @@ -1403,12 +1416,19 @@ class Component {
* @method getComponent
*/
static getComponent(name) {
if (!name) {
return;
}

name = toTitleCase(name);

if (Component.components_ && Component.components_[name]) {
return Component.components_[name];
}

if (window && window.videojs && window.videojs[name]) {
log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);

return window.videojs[name];
}
}
Expand Down
4 changes: 4 additions & 0 deletions src/js/utils/to-title-case.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
* @method toTitleCase
*/
function toTitleCase(string) {
if (typeof string !== 'string') {
return string;
}

return string.charAt(0).toUpperCase() + string.slice(1);
}

Expand Down
12 changes: 12 additions & 0 deletions test/unit/component.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,18 @@ QUnit.test('addChild should throw if the child does not exist', function(assert)

});

QUnit.test('should add a child component with title case name', function(assert) {
const comp = new Component(getFakePlayer());

const child = comp.addChild('Component');

assert.ok(comp.children().length === 1);
assert.ok(comp.children()[0] === child);
assert.ok(comp.el().childNodes[0] === child.el());
assert.ok(comp.getChild('Component') === child);
assert.ok(comp.getChildById(child.id()) === child);
});

QUnit.test('should init child components from options', function(assert) {
const comp = new Component(getFakePlayer(), {
children: {
Expand Down

0 comments on commit f94c3d9

Please sign in to comment.