12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// Use of this source code is governed by a BSD-style license that can be
32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis// found in the LICENSE file.
42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis/**
72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * @fileoverview Renders an array of slices into the provided div,
82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * using a child canvas element. Uses a FastRectRenderer to draw only
92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * the visible slices.
102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */
112da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.requireStylesheet('tracks.timeline_track');
122da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.require('ui');
132da489cd246702bee5938545b18a6f710ed214bcJamie Gennisbase.exportTo('tracks', function() {
142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  /**
162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis   * The base class for all tracks.
172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis   * @constructor
182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis   */
192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  var TimelineTrack = base.ui.define('div');
202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  TimelineTrack.prototype = {
212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    __proto__: HTMLDivElement.prototype,
222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    decorate: function() {
242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    get visible() {
272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return this.style.display !== 'none';
282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    set visible(v) {
312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.style.display = (v ? '' : 'none');
322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    get numVisibleTracks() {
352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      return (this.visible ? 1 : 0);
362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    },
372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    addControlButtonElements_: function(canCollapse) {
392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      var closeEl = document.createElement('div');
402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      closeEl.classList.add('timeline-track-button');
412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      closeEl.classList.add('timeline-track-close-button');
422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      closeEl.textContent = String.fromCharCode(215); // ×
432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      var that = this;
442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      closeEl.addEventListener('click', function() {
452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        that.style.display = 'None';
462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      });
472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.appendChild(closeEl);
482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      var collapseEl = document.createElement('div');
502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      collapseEl.classList.add('timeline-track-button');
512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      collapseEl.classList.add('timeline-track-collapse-button');
522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      var minus = '\u2212'; // minus sign;
532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      var plus = '\u002b'; // plus sign;
542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      collapseEl.textContent = minus;
552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      var collapsed = false;
562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      collapseEl.addEventListener('click', function() {
572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        collapsed = !collapsed;
582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        this.collapsedDidChange(collapsed);
592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        collapseEl.textContent = collapsed ? plus : minus;
602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      });
612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      this.appendChild(collapseEl);
622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      if (!canCollapse)
632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        collapseEl.style.display = 'None';
642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    }
652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  };
662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  return {
682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    TimelineTrack: TimelineTrack
692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  };
702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis});
71