<!--
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 ng-controller="QDR.ListController">
    <hawtio-pane class="qdr-attributes" position="left" width="200">
        <div class="treeContainer">
            <div class="tree-header"><select ng-options="node as node.name for node in nodes" ng-model="currentNode" ng-change="selectNode(currentNode)"></select></div>
            <div id="entityTree" onSelect="onTreeSelected" onRoot="onRootReady" hideRoot="true"></div>
            <div ng-init="treeReady()"></div>
        </div>
    </hawtio-pane>
    <div class="row-fluid qdrListActions">
        <ul class="nav nav-tabs">
            <li ng-repeat="mode in modes" ng-show="isValid(mode)" ng-click="selectMode(mode)" ng-class="{active : isModeSelected(mode)}" title="{{mode.title}}" ng-bind-html-unsafe="mode.content"> </li>
        </ul>
        <h4>{{selectedRecordName}}</h4>
        <div ng-show="currentMode.id === 'attributes'" class="selectedItems">
            <div ng-show="selectedRecordName === selectedEntity" class="no-content">There are no {{selectedEntity | safePlural}}</div>
            <div ng-hide="selectedRecordName === selectedEntity" ng-grid="details"></div>
        </div>
        <div ng-show="currentMode.id === 'delete'">
            <div class="delete" ng-show="selectedRecordName !== selectedEntity">
                <button class="btn btn-primary" ng-click="remove()">Delete</button> {{selectedRecordName}}
            </div>
            <div ng-hide="selectedRecordName !== selectedEntity">
                There are no {{selectedEntity}}s
            </div>
        </div>
        <div class="operations" ng-show="currentMode.id === 'operations'">
            <fieldset ng-show="operation != ''">
                <table>
                    <tr>
                        <th>Attribute</th>
                        <th>Value</th>
                    </tr>
                <tr title="{{attribute.title}}" ng-repeat="attribute in detailFields">
                    <td><label for="{{attribute.name}}">{{attribute.name | humanify}}</label></td>
                    <!-- we can't do <input type="{angular expression}"> because... jquery throws an exception because... -->
                    <td>
                    <div ng-if="attribute.input == 'input'">
                        <!-- ng-pattern="testPattern(attribute)" -->
                        <input ng-if="attribute.type == 'number'" type="number" name="{{attribute.name}}" id="{{attribute.name}}" ng-model="attribute.rawValue" ng-required="attribute.required" class="ui-widget-content ui-corner-all"/>
                        <input ng-if="attribute.type == 'text'" type="text" name="{{attribute.name}}" id="{{attribute.name}}" ng-model="attribute.attributeValue" ng-required="attribute.required" class="ui-widget-content ui-corner-all"/>
                        <textarea ng-if="attribute.type == 'textarea'" name="{{attribute.name}}" id="{{attribute.name}}" ng-model="attribute.attributeValue" ng-required="attribute.required" class="ui-widget-content ui-corner-all"></textarea>
                        <span ng-if="attribute.type == 'disabled'" >{{getAttributeValue(attribute)}}</span>
                    </div>
                    <div ng-if="attribute.input == 'select'">
                        <select id="{{attribute.name}}" ng-model="attribute.selected" ng-options="item for item in attribute.rawtype track by item"></select>
                    </div>
                    <div ng-if="attribute.input == 'boolean'" class="boolean">
                        <label><input type="radio" ng-model="attribute.rawValue" ng-value="true"> True</label>
                        <label><input type="radio" ng-model="attribute.rawValue" ng-value="false"> False</label>
                    </div>
                    </td>
                </tr>
                <tr><td></td><td><button class="btn btn-primary" type="button" ng-click="ok()">{{operation | Pascalcase}}</button></td></tr>
                </table>
            </fieldset>
        </div>
        <div ng-show="currentMode.id === 'log'">
            <table class="log-entry" ng-repeat="entry in logResults track by $index">
                <tr>
                    <td align="left" colspan="2">{{entry.time}}</td>
                </tr>
                <tr>
                    <td>Type</td><td>{{entry.type}}</td>
                </tr>
                <tr>
                    <td>Source</td><td>{{entry.source}}:{{entry.line}}</td>
                </tr>
                <tr>
                    <td valign="middle">Message</td><td valign="middle"><pre>{{entry.message}}</pre></td>
                </tr>
            </table>
        </div>
    </div>
</div>

<!--
    This is the template for the graph dialog that is displayed.
-->
<script type="text/ng-template" id="template-from-script.html">
    <div class="modal-header">
        <h3 class="modal-title">Chart {{chart.attr() | humanify}}</h3>
    </div>
    <div class="modal-body">
            <div id="{{svgDivId}}" class="d3Chart"></div>
    </div>
    <div class="modal-footer">
        <span>
            <div class="btn btn-success hdash-button" ng-click="addHChart()" title="Add this chart to a dashboard"><a ng-href="{{addToDashboardLink()}}"><i class="icon-share"></i> Add this chart to a dashboard</a></div>
        </span>
        <button class="btn btn-primary" type="button" ng-click="ok()">Close</button>
    </div>
</script>
