{{!
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
}}

<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" rel="tooltip" {{bindAttr data-original-title="view.parentView.tooltipMessage"}}>
  {{view.parentView.currentTimeRange.name}}{{#if view.parentView.isCustomTimeRange}}: {{view.parentView.customStartTimeFormatted}}{{/if}} &nbsp;<span class="caret"></span>
</button>
<ul class="dropdown-menu">
  {{#each option in view.parentView.timeRangeOptions}}
    <li><a href="#" {{action setTimeRange option target="view.parentView"}}>{{option.name}}</a></li>
  {{/each}}
</ul>
