<!--
/**
 * 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.
 */
-->
<div class="messagesArrow"></div>
<div class="messages">
  <div ng-repeat="message in server.responses.queue | limitTo: -1" class="message"
       ng-class="{ 'color-warning' : message.type === 'warning' || message.type === 'cancel',
                    'color-success' : message.type === 'success',
                     'color-danger' : message.type === 'error' }">

    <span class="glyphicon icon-notif"
          ng-class="{ 'glyphicon-warning-sign' : message.type === 'warning' || message.type === 'cancel',
          'glyphicon-ok' : message.type === 'success' }"></span>

    {{ message.message }}
    <a class="color-warning" ng-if="message.type === 'cancel'" ng-click="restore(message.state)">UNDO</a>

  </div>
</div>
