           isWarning: @warnForTime(next, fromTime)
     return events
 
-  # Private: Reattaches view element to status bar after toggling it back on.
-  reattach: ->
+  # Private: Destroies the widget elements.
+  destroyWidget: ->
+    @stopTimer()
+    @clickSubscription?.dispose()
+    @tooltip?.dispose()
+    while @firstChild
+      @removeChild(@firstChild)
+    @tile?.destroy()
+    @tile = null
+
+  # Private: Builds and attaches view element to status bar.
+  buildWidget: ->
     @tile = @statusBar?.addLeftTile(item: this, priority: 200)
     @setupLink()
     @startTimer()

  # Public: Attach view element to status bar and do initial setup.
  attach: ->
    @updateConfig()
    @reattach()
    @handleEvents()

  # Public: Destroys and removes this element.
  destroy: ->
    @stopTimer()
    @clickSubscription?.dispose()
    @tooltip?.dispose()
    while @firstChild
      @removeChild(@firstChild)
    @tile?.destroy()
    @tile = null

  # Public: Returns humanized remaining time string.
  formatTminus: (dt, fromTime) ->

  toggle: ->
    @visible = !@visible
    if @visible
      @buildWidget()
    else
      @destroyWidget()

  # Private: Removes all elements in main link widget.
  removeEvents: ->
