{{!
 * 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.
}}

{{#if isWaiting}}
  Waiting...
{{else}}
  {{#if columnDefinition.cellComponentName}}
    {{component columnDefinition.cellComponentName content=_cellContent definition=columnDefinition.cellDefinition}}
  {{else}}
    {{#unless columnDefinition.cellDefinition}}
      {{txt _cellContent}}
    {{else}}
      {{txt _cellContent
        type=columnDefinition.cellDefinition.type
        format=columnDefinition.cellDefinition.format
        timeZone=columnDefinition.cellDefinition.timeZone
        valueFormat=columnDefinition.cellDefinition.valueFormat
        valueTimeZone=columnDefinition.cellDefinition.valueTimeZone
        valueUnit=columnDefinition.cellDefinition.valueUnit
      }}
    {{/unless}}
  {{/if}}
  {{#if _comment}}
    <div title="{{_comment}}" class="comment-indicator"></div>
  {{/if}}
{{/if}}
