Video Player Community Code Review - Jan. 27, 2012

Video Player Community Code Review - Jan. 27, 2012

General

  • make as much public as possible: anything that an integrator might want to tinker with; keep stateful things as methods

  • if possible, don't pass the full model around from the parent component to its subcomponents: only the part it needs

  • each component should be responsible for rendering its own sources and responding to its own inputs and events

    • controllers responsible for keybindings

    • media element responsible for rendering sources and responding to the html5 video element events, and anything else specific to the html 5 media element

  • in general, add code comments to areas that seem to need improvement but aren't going to be addressed immediately

  • try latest Infusion in master (now that the subcomponent refactoring branch is merged)

  • move the feature detection (media element) into the Framework's ProgressiveEnhancement code; check whether or not mediaelement.js passes the test.

Specific

Video Player

  • move all strings into a single bundle in the top-level component's options

  • in VideoPlayer.js bindKeyboardControl():

    • there's redundency with the defaultKeys list: Use fluid.each() to simplify this

  • in bindVideoPlayerModel() in VideoPlayer.js: inconsistency: one handler is direct, one is wrapped in an anonymous function

  • rename fullscreen() to toggleFullScreen() or something else more appropriate

  • VideoPlayer's preInit() function needs reworking

    • methods are peculiar

    • validation should happen in changeApplier guards, not in top-level functions

    • don't need two guards for increasing and decreasing, only one

    • reexamine some of the math used for validation

Adapters and Timers

  • rename the adapters to "conductors" (consider including 'interval' in the name?)

  • one conductor per interval list (e.g. caption, transcript...)

  • each conductor will have its own timer subcomponent

  • times injected through demands blocks

  • the conductors will process the interval list and fire start/end events for each interval

Controllers

  • in bindScrubberModel() (in VideoPlayer_controllers.js), listeners could be added declaratively (once cindy's branch is merged and we update the framework)

  • bindCaptionModel() in VideoPlayer_controllers.js: try restructuring the model to avoid the need for code logic: perhaps an array of booleans

  • toggleButton's toggleState() method in VideoPlayer_controllers.js

    • rename rename to something more indicative of the fact that it only requests a change of state

    • it shouldn't take an event

  • double-check whether or not we need to add ARIA to sliders ourselves

  • use the keyboard-a11y plugin for keyboard control of the volume slider and scrub-bar. If the plugin doesn't do what's necessary, update the plugin

  • use the keyboard-a11y plugin for the various hot-keys, if possible. At least comment the hard-coded keyCodes if there are no jQuery code available

  • bind keyboard controls in the controllers subcomponent, not the main VideoPlayer component

Media

  • rename media to html5media