     @property 'shellid'
     @shellid @module.id
 
-  # disable Backbone's sync functionality
-  sync: => NotSupportedError 'Backbone::sync'
+    @properties [
+      'title',          # title of the piece of media
+      'description',    # description of the piece of media
+      'sources'         # contributing sources to the piece of media;
+                        # expected to be of type Array
+    ]
+
+
+  # -- model interface --
+  # To be overriden and implemented by inheriting classes
+
+  # Returns a URL that points to the thumbnail
+  # to be used for this piece of media.
+  thumbnail: =>
+
 
   # -- factory constructors --
 

    new shellClass.Model _.clone data


# register convenience construction functions globally.
acorn.shellWithAcorn = Shell.Model.withAcorn
acorn.shellWithData = Shell.Model.withData


class Shell.MediaView extends athena.lib.View

  className: @classNameExtend 'shell-content-view'

  controls: []

  initialize: =>
    super

    unless @options.model
      acorn.errors.MissingParameterError 'Shell.MediaView', 'model'

  controls: []

  # -- media interface --
  # To be overriden and implemented by inheriting classes

  # Transition between play and pause states.
  play: =>
  pause: =>

  # Returns true if the media view is in 'play' state, false otherwise
  isPlaying: => false

  # Seek to the provided playback offset.
  seek: (offset) =>

  # Returns the current seek offset.
  seekOffset: => 0

  # Returns the view's total duration in seconds
  duration: => 0

  # Sets the media view's volume.
  volume: => 0
  setVolume: (volume) =>

  # Dimensions
  # The functions below expect and return dimensions in the same
  # format used to specify dimensions in CSS3. (e.g. 100%, 100px, etc.)
  width: => '100%'
  height: => '100%'
  setWidth: (width) =>
  setHeight: (height) =>

  # Object Fit
  # * contain: if you have set an explicit height and width on a replaced
  #            element, object-fit:contain will cause the content to be resized
  #            so that it is fully displayed with its intrinsic aspec ratio
  #            preserved, but still fits inside the dimensions set for the
  #            element.
  #
  # * fill:    causes the element's content to expand to completely fill the
  #            dimensions set for it, even if this does change its intrinsic
  #            aspect ratio.
  #
  # * cover:   preserves the content's intrinsic aspect ratio but alters its
  #            width and height to completely cover the element. The smaller
  #            of the two is made to fit the elemnt exactly, and the larger of
  #            the two overflows the element
  #
  # * none:    the content's intrinsic dimensions are used.
  objectFit: => 'contain'
  setObjectFit: (objectFit) =>



# Shell.RemixView -- uniform view to edit shell data.
# ---------------------------------------------------

class Shell.RemixView extends athena.lib.View

