<!--
  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.
-->
<loading-state error="error" ng-if="stream === undefined"></loading-state>

<div ng-show="stream.length >= 0">
  <pre ng-show="stream.length > 0">{{stream}}</pre>
  <pre ng-show="stream.length == 0" class="text-center"><i>(no content)</i></pre>

  <div class="log-actions">
    <span class="log-autoupdate log-action" ng-click="autoUpdate = !autoUpdate" ng-class="{'active': autoUpdate}" 
            uib-tooltip="{{ autoUpdate ? 'Disable' : 'Enable' }} auto-update" tooltip-placement="top" tooltip-popup-delay="500" tooltip-append-to-body="true">
        <i class="fa fa-refresh"></i></span>
    <span class="log-tail log-action" ng-click="tail = !tail" ng-class="{'active': tail}" 
            uib-tooltip="{{ tail ? 'Disable' : 'Enable' }} auto-scroll" tooltip-placement="top" tooltip-popup-delay="500" tooltip-append-to-body="true">
        <i class="fa fa-arrow-circle-o-down "></i></span>
  </div>
</div>
