aboutsummaryrefslogtreecommitdiff
path: root/solr-8.1.1/server/solr-webapp/webapp/partials
diff options
context:
space:
mode:
Diffstat (limited to 'solr-8.1.1/server/solr-webapp/webapp/partials')
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html128
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html302
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html49
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html85
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/collections.html366
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html206
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/cores.html224
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html209
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/documents.html111
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/files.html47
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/index.html261
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html27
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html56
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/logging.html57
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/login.html160
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html72
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/query.html357
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/replication.html239
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/schema.html455
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/segments.html99
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/stream.html64
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/threads.html65
-rw-r--r--solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html23
23 files changed, 3662 insertions, 0 deletions
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html b/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html
new file mode 100644
index 000000000..23527f735
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/analysis.html
@@ -0,0 +1,128 @@
+<!--
+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 id="analysis">
+
+ <div class="block analysis-error" id="analysis-handler-missing" ng-show="isHandlerMissing">
+ <div class="head">This Functionality requires the <code>/analysis/field</code> Handler to be registered and active!</div>
+ </div>
+
+ <div class="block analysis-error" id="analysis-error" ng-show="analysisError">
+ <div class="body">{{analysisError}}</div>
+ </div>
+
+ <div id="analysis-holder">
+
+ <div id="field-analysis">
+
+ <form method="get">
+
+ <ul class="clearfix">
+
+ <li class="index">
+
+ <label for="analysis_fieldvalue_index">Field Value (Index)</label>
+ <textarea name="analysis.fieldvalue" id="analysis_fieldvalue_index" ng-model="indexText"></textarea>
+
+ </li>
+
+ <li class="query">
+
+ <label for="analysis_fieldvalue_query">Field Value (Query)</label>
+ <textarea name="analysis.query" id="analysis_fieldvalue_query" ng-model="queryText"></textarea>
+
+ </li>
+
+ <li class="settings-holder clearfix">
+ <div class="settings clearfix">
+ <label for="type_or_name">Analyse Fieldname / FieldType:</label>
+ <select style="width:130px" chosen ng-change="changeFieldOrType()" id="type_or_name" ng-model="fieldOrType" ng-options="f.value as f.label group by f.group for f in fieldsAndTypes"></select>
+
+ <a id="tor_schema" ng-href="#/{{core}}/schema?{{schemaBrowserUrl}}"><span>Schema Browser</span>&nbsp;</a>
+
+ <div class="buttons clearfix">
+
+ <button type="submit" ng-click="updateQueryString()"><span>Analyse Values</span></button>
+
+ <div class="verbose_output" ng-class="{active:verbose}">
+ <a ng-click="toggleVerbose()">Verbose Output</a>
+ </div>
+
+ </div>
+
+ </div>
+ </li>
+
+ </ul>
+
+ </form>
+
+ </div>
+
+ <div id="analysis-result" class="clearfix verbose_output">
+ <div ng-class="key" ng-repeat="(key, type) in result">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tbody ng-repeat="component in type">
+ <tr class="step">
+ <td class="part analyzer">
+ <div>
+ <abbr title="{{component.name}}">{{component.short}}</abbr>
+ </div>
+ </td>
+
+ <td class="part legend" ng-show="verbose">
+ <div class="holder">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr ng-repeat="caption in component.captions" class="{{generate_class_name( short_key )}}">
+ <td>{{ caption }}</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ <td class="part data" ng-class="{spacer:token.blank}" colspan="1" ng-repeat="token in component.tokens track by token.index">
+ <div class="holder" ng-hide="token.blank">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr class="details">
+ <td class="details">
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr class="{{value.name}} {{value.extraclass}}" ng-repeat="value in token.keys" ng-show="verbose || value.name=='text'">
+ <td>{{value.value}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="holder" ng-show="token.blank">&nbsp;</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html
new file mode 100644
index 000000000..1e64d2976
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cloud.html
@@ -0,0 +1,302 @@
+<!--
+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 id="cloud" class="clearfix">
+
+ <div id="frame">
+
+ <div id="zk-status-content" class="content clearfix" ng-show="showZkStatus">
+ <div id="zk-controls">
+ <a class="reload" ng-click="initZookeeper()"><span>Refresh</span></a>
+ <a class="details-button" ng-click="toggleDetails()" ng-class="{on:showDetails}">
+ <span>Toggle details</span>
+ </a>
+ </div>
+
+ <div class="zookeeper-status">Status: <span class="zkstatus-{{zkState.status}}">{{zkState.status}}</span></div>
+ <div class="zookeeper-errors" ng-show="zkState.errors">
+ Errors:
+ <ul>
+ <li ng-repeat="error in zkState.errors">{{error}}</li>
+ </ul>
+ </div>
+ <div>ZK connection string: {{zkState.zkHost}}</div>
+ <div>Ensemble size: {{zkState.ensembleSize}}</div>
+ <div>Ensemble mode: {{zkState.mode}}</div>
+
+ <table id="zk-table">
+ <thead>
+ <tr>
+ <th></th>
+ <th ng-repeat="host in zkState.details">{{host.host}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr ng-repeat="key in mainKeys">
+ <td>{{key}}</td>
+ <td ng-repeat="host in zkState.details" ng-style="key === 'zk_server_state' && host[key] === 'leader' ? {'font-weight': 'bold'} : {'font-weight': 'normal'}">
+ {{key === 'zk_version' ? host[key].split("-")[0] : host[key]}}
+ </td>
+ </tr>
+ <tr ng-repeat="key in ensembleMainKeys" ng-show="zkState.mode === 'ensemble'">
+ <td>{{key}}</td>
+ <td ng-repeat="host in zkState.details">
+ {{host[key]}}
+ </td>
+ </tr>
+ <tr id="detail-divider" ng-show="showDetails" >
+ <td ng-class="details"></td>
+ <td ng-repeat="host in zkState.details" ng-class="details"></td>
+ </tr>
+ <tr ng-repeat="key in detailKeys" ng-show="showDetails">
+ <td>{{key}}</td>
+ <td ng-repeat="host in zkState.details">
+ {{host[key]}}
+ </td>
+ </tr>
+ <tr ng-repeat="key in ensembleDetailKeys" ng-show="showDetails && zkState.mode === 'ensemble'">
+ <td>{{key}}</td>
+ <td ng-repeat="host in zkState.details">
+ {{host[key]}}
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div id="tree-content" class="content clearfix" ng-show="showTree">
+ <jstree class="tree" on-select="showTreeLink(url)" id="tree" data="tree"></jstree>
+
+ <div id="file-content" class="clearfix">
+
+ <a id="toggle" ng-click="showProps = !showProps" ng-show="showData" ng-class="showProps ? 'minus' : 'plus'">Metadata</a>
+ <div id="prop" ng-show="znode.prop && showData && showProps">
+ <ul>
+ <li ng-class="{odd:$odd}" ng-repeat="(key, prop) in znode.prop">
+ <dl class="clearfix">
+ <dt>{{ key }}</dt>
+ <dd>{{ prop }}</dd>
+ </dl>
+ </li>
+ </ul>
+ </div>
+
+ <div id="data" ng-show="showData">
+ <em ng-show="!znode.data">Node "{{znode.path }}" has no utf8 Content</em>
+ <pre ng-show="znode.data" class="syntax language-{{lang}}"
+ ng-bind-html="znode.data | highlight:lang | unsafe">
+ </pre>
+ <a class="close" ng-click="hideData()"><span>&nbsp;</span></a>
+ </div>
+
+
+ </div>
+
+ </div>
+
+ <div id="nodes-content" class="content clearfix" ng-show="showNodes">
+ <div id="controls">
+ <a class="reload" ng-click="initClusterState()"><span>Refresh</span></a>
+ <a class="details-button" ng-click="toggleAllDetails()" ng-class="{on:showAllDetails}">
+ <span>Show all details</span>
+ </a>
+ </div>
+ <div>
+ <div id="nodesPaging">
+ <button ng-show="prevEnabled" ng-click="previousPage()" id="nodesPagingPrev">&lt; Previous</button>
+ <span ng-show="filteredHosts.length==0">No hosts found.</span>
+ <span ng-hide="filteredHosts.length==0">Hosts {{from+1}} - {{from + hostsToShow.length}} of {{filteredHosts.length}}.</span>&nbsp;
+
+ Filter by:&nbsp;<select ng-model="filterType" ng-change="filterInput()" id="nodesPagingFilterType">
+ <option value="node">Host/node name</option>
+ <option value="collection">Collection name</option>
+ </select>&nbsp;
+
+ <span ng-show="filterType=='node'">
+ <input ng-model="nodeFilter" type="text" size="10" name="nodefilter" ng-change="filterInput()" ng-model-options='{ debounce: 500 }' />&nbsp;
+ </span>
+ <span ng-show="filterType=='collection'">
+ <input ng-model="collectionFilter" type="text" size="10" name="collectionfilter" ng-change="filterInput()" ng-model-options='{ debounce: 500 }'/>&nbsp;
+ </span>
+ Show <input ng-model="pageSize" ng-change="filterInput()" type="text" size="2" name="rows" ng-model-options='{ debounce: 500 }'/> hosts per page.
+ <button ng-show="nextEnabled" ng-click="nextPage()">Next &gt;</button>
+ </div>
+ </div>
+ <table id="nodes-table">
+ <thead>
+ <tr>
+ <th>Host</th>
+ <th>Node</th>
+ <th>CPU</th>
+ <th>Heap</th>
+ <th>Disk usage</th>
+ <th>Requests</th>
+ <th>Collections</th>
+ <th>Replicas</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr ng-repeat="key in nodesToShow | orderBy:'key.order'" ng-init="n = nodes[key]; h = nodes[firstLiveNodeForHost(key)]">
+ <td rowspan="{{hosts[h.host].nodes.length}}" ng-show="isFirstNodeForHost(key)">
+ <div class="host-name">{{h.host}}</div>
+ <span class="host-spec" ng-show="!showDetails[h.host]">
+ <span title="{{h.system.system.uptime}}">{{h.system.system.name}}</span>
+ <span title="free: {{h.memFree}}">{{h.memTotal}}</span>
+ <span title="{{h.system.jvm.name}} {{h.system.jvm.version}}">Java {{h.system.jvm.spec.version}}</span>
+ <br/>Load: {{h.loadAvg}}
+ </span>
+ <div class="host-spec" ng-show="showDetails[h.host]">
+ {{h.system.system.name}} {{h.system.system.version}}, {{h.system.system.availableProcessors}}cpu<br/>
+ Uptime: {{h.uptime}}<br/>
+ <span title="Used: {{h.memUsed}} - includes OS file-cache, and it is normal for it to approach 100%">Memory: {{h.memTotal}}</span><br/>
+ File descriptors: {{h.openFileDescriptorCount}}/{{h.maxFileDescriptorCount}}<br/>
+ Disk: <span class="{{h.diskUsedPctStyle}}" title="Nodes may use other disks too">{{h.diskTotal}} used: {{h.diskUsedPct}}%</span><br/>
+ Load: {{h.loadAvg}}
+ </div>
+ <div class="node-spec" ng-click="toggleHostDetails(h.host)">
+ <a ng-show="showDetails[h.host]">hide details...</a>
+ <a ng-show="!showDetails[h.host]">show details...</a>
+ </div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}"><div class="node-name"><a href="{{n.base_url}}">{{key.replace(n.host+':', '')}}</a></div>
+ <div ng-show="n.dead" class="node-down">(DEAD)</div>
+ <div ng-show="!n.dead">
+ Uptime: {{n.jvmUptime}}<br/>
+ <div class="node-spec" ng-show="showDetails[key]">
+ Java <span title="{{n.system.jvm.jre.vendor}}">{{n.system.jvm.jre.version}}</span><br/>
+ Solr {{n.system.lucene['solr-impl-version'].split(" ")[0]}}<br>
+ </div>
+ <div class="node-spec" ng-click="toggleDetails(key)">
+ <a ng-show="showDetails[key]">hide details...</a>
+ <a ng-show="!showDetails[key]">show details...</a>
+ </div>
+ </div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}">
+ <div class="node-cpu" ng-show="!n.dead">
+ <span class="{{n.cpuPctStyle}}">{{n.cpuPct}}%</span>
+ </div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}">
+ <div class="node-heap" title="total: {{n.heapTotal}} free: {{n.heapFree}} used%: {{n.heapUsedPct}}%" ng-show="!n.dead">
+ <span class="{{n.heapUsedPctStyle}}">{{n.heapUsedPct}}%</span>
+ </div>
+ <div class="node-spec" ng-show="showDetails[key] && !n.dead">
+ Max: {{n.heapTotal}}<br/>
+ Used: {{n.heapUsed}}
+ </div>
+ </td>
+ <td class="scroll-height-250" ng-class="{'dead-node': n.dead}">
+ <div>
+ <div class="node-disk" title="Available disk: {{n.diskTotal}} free: {{n.diskFree}} used by this node: {{n.size}}" ng-show="!n.dead">
+ {{n.size}}
+ </div>
+ <div class="node-spec" ng-show="showDetails[key] && !n.dead">
+ Total #docs: {{n.numDocs}}<br/>
+ Avg size/doc: {{n.sizePerDoc}}
+ </div>
+ <div id="chart{{n.id}}" ng-show="showDetails[key] && !n.dead"></div>
+ </div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}"><div class="node-requests" title="1minRate: {{n.req1minRate}} 5minRate: {{n.req5minRate}} 15minRate: {{n.req15minRate}} p75: {{n.reqp75_ms}} p99: {{n.reqp99_ms}}" ng-show="!n.dead">
+ RPM: {{n.req15minRate}}<br/>p95: {{n.reqp95_ms}}ms</div>
+ </td>
+ <td ng-class="{'dead-node': n.dead}">
+ <div ng-show="!n.collections">(none)</div>
+ <div ng-repeat="c in n.collections | limitTo:showDetails[key]?999:2 track by $index">
+ <a href="{{h.base_url + '/#/~collections/' + c}}">{{ c }}</a>
+ </div>
+ <div class="more" ng-show="n.collections.length > 2 && !showDetails[key]">
+ <a ng-click="toggleDetails(key)">({{n.collections.length - 2}} more...)</a>
+ </div>
+ </td>
+ <td class="scroll-height-250" ng-class="{'dead-node': n.dead}">
+ <div ng-show="!n.cores">(none)</div>
+ <div ng-repeat="core in n.cores | limitTo:showDetails[key]?999:2 track by $index">
+ <div ng-show="!n.dead"><a class="{{core.leader ? 'leader' : 'replica'}}" href="{{core.base_url + '/#/' + core.core + '/core-overview'}}">{{ core.label }}</a> ({{core.numDocsHuman}} docs)</div>
+ <div ng-show="n.dead">{{ core.label }}</div>
+ <ul class="core-details" ng-show="showDetails[key] && !n.dead" >
+ <li>deleted: {{core.deletedDocsHuman}}</li>
+ <li>warmupTime: {{core.warmupTime}}</li>
+ <li ng-show="core.numDocs > 0">avg size/doc: {{core.avgSizePerDoc}}</li>
+ </ul>
+ </div>
+ <div class="more" ng-show="n.cores.length > 2 && !showDetails[key] && !n.dead">
+ <a ng-click="toggleDetails(key)">({{n.cores.length - 2}} more...)</a>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div graph data="graphData" leaf-count="leafCount" helper-data="helperData" id="graph-content" class="content clearfix" ng-show="showGraph">
+
+ <div id="canvas"></div>
+
+ <div id="legend">
+ <ul>
+ <li class="leader"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Leader</li>
+ <li class="active"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Active</li>
+ <li class="recovering"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Recovering</li>
+ <li class="down"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Down</li>
+ <li class="recovery_failed"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Recovery Failed</li>
+ <li class="shard-inactive"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Inactive</li>
+ <li class="gone"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Gone</li>
+ <li class="replicatype"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><rect width="8" height="8"></rect></g></g></svg>Replica Type:<br/>N(NRT),T(TLOG),<br/>P(PULL) </li>
+ </ul>
+ </div>
+ <div style="width: 100%; text-align: center;" ng-show="showPaging">
+ <div id="cloudGraphPaging">
+ <button ng-show="prevEnabled" ng-click="previous()" id="cloudGraphPagingPrev">&lt; Previous</button>
+ <span ng-show="total==0">No collections found.</span>
+ <span ng-hide="total==0">Collections {{start}} - {{last}} of {{total}}.</span>&nbsp;
+
+ Filter by:&nbsp;<select ng-model="filterType" ng-change="initGraph()" id="cloudGraphPagingFilterType">
+ <option value="status">Status</option>
+ <option value="name">Name</option>
+ </select>&nbsp;T:{{filterType}}
+
+ <span ng-show="filterType=='status'">
+ <select ng-model="pagingStatusFilter" id="cloudGraphPagingStatusFilter" ng-change="resetGraph()">
+ <option value=""> - Any - </option>
+ <option value="healthy">Healthy</option>
+ <option value="degraded">Degraded</option>
+ <option value="downed_shard">Downed Shard</option>
+ <option value="recovering">Replica in Recovery</option>
+ </select>
+ </span>
+ <span ng-show="filterType=='name'">
+ <input ng-model="pagingFilter" type="text" size="10" name="filter" ng-change="resetGraph()"/>&nbsp;
+ </span>
+ Show <input ng-model="rows" ng-change="resetGraph()" type="text" size="2" name="rows" /> per page.
+ <button ng-show="nextEnabled" ng-click="next()">Next &gt;</button>
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="debug" ng-show="showDebug">
+ <ul class="clearfix">
+ <li class="clipboard"><a href="#" data-copied="Copied to Clipboard!">Copy to Clipboard (BUGGY!)</a></li>
+ <li class="close"><a ng-click="closeDebug()">Close</a></li>
+ </ul>
+ <pre class="debug"></pre>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html
new file mode 100644
index 000000000..892b0bbc9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cluster_suggestions.html
@@ -0,0 +1,49 @@
+<!--
+ 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 id="cluster-suggestions">
+ <h1>Cluster Suggestions</h1>
+ <br/>
+ <table id="s-table">
+ <tr>
+ <td>Type</td>
+ <td>Reason</td>
+ <td>Details</td>
+ <td>Action</td>
+ </tr>
+ <tr ng-if="parsedData.length==0">
+ <td align="center" colspan="4">NA</td>
+ </tr>
+ <tr ng-repeat="x in parsedData">
+ <td>{{ x.type }}</td>
+ <td>{{ x.violation.clause }}</td>
+ <td>node: {{ x.violation.node }}, collection : {{ x.violation.collection }}, shard : {{ x.violation.shard }} &nbsp; </td>
+ <td>
+ <div class="s-container">
+ <input class="s-box1" ng-hide="x.run || x.type =='unresolved-violation'" type="button"
+ title="{{ x.operation }}" ng-click="postdata(x)" ng-mouseover="showPopover()"
+ ng-mouseleave="hidePopover()"/>
+ <div class="s-box2" ng-show="x.loading"><img src="img/loader.gif"></div>
+ <div class="s-box3" ng-show="x.done"><img src="img/ico/tick.png"></div>
+ <div class="s-box4" ng-show="x.failed || x.type == 'unresolved-violation'"><img src="img/ico/cross.png"></div>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+</div>
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html b/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html
new file mode 100644
index 000000000..ba09bd95f
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/collection_overview.html
@@ -0,0 +1,85 @@
+<!--
+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 id="dashboard">
+
+ <div class="clearfix">
+
+ <div id="collection" class="block fieldlist">
+
+ <h2><span>Collection: {{selectedCollection.name}}</span></h2>
+
+ <div class="content">
+
+ <dl>
+
+ <dt>Config name:</dt>
+ <dd class="value">{{selectedCollection.configName}}</dd>
+
+ <dt>Max shards per node:</dt>
+ <dd class="value">{{selectedCollection.maxShardsPerNode}}</dd>
+
+ <dt>Replication factor:</dt>
+ <dd class="value">{{selectedCollection.replicationFactor}}</dd>
+
+ <dt>Auto-add replicas:</dt>
+ <dd class="ico value" ng-class="selectedCollection.autoAddReplicas=='true' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+
+ <dt>Router name:</dt>
+ <dd class="value">{{selectedCollection.router.name}}</dd>
+
+ </dl>
+
+ </div>
+ </div>
+
+ <div id="shards" class="block fieldlist">
+
+ <h2><span>Shards</span></h2>
+
+ <div>
+
+ <div class="shard" ng-repeat="(name, shard) in selectedCollection.shards">
+ <a ng-click="hideShard(shard)"><h3 class="shard-title">{{name}}</h3></a>
+ <dl class="shard-detail clearfix" ng-hide="shard.hide">
+ <dt>Range:</dt>
+ <dd class="value">{{ shard.range }}</dd>
+
+ <dt>Active:</dt>
+ <dd class="ico value" ng-class="shard.state='active' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+
+ <dt>Replicas:</dt>
+ <dd>
+ <div class="replica clearfix {{$odd?'odd':''}}" ng-repeat="(name, replica) in shard.replicas">
+ <a ng-click="showReplica(replica)"><h3>{{replica.core}}</h3></a>
+ <dl ng-show="replica.show">
+ <dt>Base URL: </dt><dd>{{replica.base_url}}</dd>
+ <dt>Core: </dt><dd><a href="{{replica.base_url}}{{rootUrl}}#/{{replica.core}}">{{replica.core}}</a></dd>
+ <dt>Active: </dt>
+ <dd class="ico value" ng-class="replica.state == 'active' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+ <dt>Leader: </dt>
+ <dd class="ico value" ng-class="replica.leader == 'true' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+ </dl>
+ </div>
+
+ </dd>
+ </dl>
+ </div>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html b/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html
new file mode 100644
index 000000000..60ef47ad0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/collections.html
@@ -0,0 +1,366 @@
+<!--
+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 id="collections" class="clearfix empty">
+
+ <div id="ui-block" style="display:none">&nbsp;</div><!-- @todo what is this for? -->
+
+ <div id="frame">
+
+ <div id="actions" class="actions clearfix">
+
+ <button id="add" class="action" ng-click="showAddCollection()"><span>Add Collection</span></button>
+
+ <button id="delete" class="warn requires-core" ng-click="showDeleteCollection()" ng-show="collection"><span>Delete</span></button>
+ <button id="reload" class="requires-core" ng-click="reloadCollection()" ng-show="collection"
+ ng-class="{success: reloadSuccess, warn: reloadFailure}"><span>Reload</span></button>
+ <button id="create-alias" class="action requires-core" ng-click="toggleCreateAlias()"><span>Create Alias</span></button>
+ <button id="delete-alias" class="action requires-core" ng-click="toggleDeleteAlias()"><span>Delete Alias</span></button>
+
+ <div class="action add" data-rel="add" ng-show="showAdd" style="left:0px">
+
+ <form>
+
+ <p class="clearfix"><label for="add_name">name:</label>
+ <input type="text" name="name" id="add_name" ng-model="newCollection.name" placeholder="new collection"></p>
+
+ <p class="clearfix"><label for="add_config">config set:</label>&nbsp;
+ <select chosen ng-options="config.name as config.name for config in configs" name="config_name" id="add_config" ng-model="newCollection.configName">
+ </select>
+ </p>
+
+ <p class="clearfix"><label for="add_numShards">numShards:</label>
+ <input type="text" name="numShards" id="add_numShards" ng-model="newCollection.numShards"></p>
+
+ <p class="clearfix"><label for="add_replicationFactor">replicationFactor:</label>
+ <input type="text" name="replicationFactor" id="add_replicationFactor" ng-model="newCollection.replicationFactor"></p>
+
+ <p class="clearfix"><a ng-click="showAdvanced=!showAdvanced">
+ <span id="add_advanced" ng-class="{open: showAdvanced}">Show advanced</span></a></p>
+ <div ng-show="showAdvanced">
+
+ <p>Advanced options: </p>
+ <p class="clearfix"><label for="add_router_name">router:</label>
+ <select name="routerName" id="add_router_name" ng-model="newCollection.routerName">
+ <option value="compositeId">Composite ID</option>
+ <option value="implicit">Implicit</option>
+ </select>
+ </p>
+
+ <p class="clearfix"><label for="add_maxShardsPerNode">maxShardsPerNode:</label>
+ <input type="text" name="replicationFactor" id="add_maxShardsPerNode" ng-model="newCollection.maxShardsPerNode"></p>
+
+ <p class="clearfix"><label for="add_shards">shards:</label>
+ <input type="text" name="shards" id="add_shards" ng-model="newCollection.shards"></p>
+
+ <p class="clearfix"><label for="add_routerField">router.field:</label>
+ <input type="text" name="routerField" id="add_routerField" ng-model="newCollection.routerField"></p>
+
+ <p class="clearfix"><label for="add_autoAddReplicas">autoAddReplicas:</label>
+ <select name="autoAddReplicas" id="add_autoAddReplicas" ng-model="newCollection.autoAddReplicas">
+ <option value="true">true</option>
+ <option value="false">false</option>
+ </select>
+ </p>
+
+ </div>
+ <p class="clearfix note error" ng-show="addMessage">
+ <span>{{addMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-click="addCollection()"><span>Add Collection</span></button>
+ <button type="reset" class="reset" ng-click="cancelAddCollection()"><span>Cancel</span></button>
+ </p>
+
+ </form>
+
+ </div>
+
+ <div class="action delete" ng-show="showDelete">
+
+ <form>
+
+ <p>Please type collection name to confirm deletion:</p>
+ <p class="clearfix"><label for="collectiondeleteConfirm">Collection</label>
+ <input type="text" ng-model="collectionDeleteConfirm" id="collectionDeleteConfirm"></p>
+
+ <p class="clearfix note error" ng-show="deleteMessage">
+ <span>{{deleteMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-click="deleteCollection()"><span>Delete</span></button>
+ <button type="reset" class="reset" ng-click="showDelete=false"><span>Cancel</span></button>
+ </p>
+ </form>
+
+ </div>
+
+ <div class="action create-alias" ng-show="showCreateAlias">
+
+ <form>
+
+ <input type="hidden" name="core" data-core="current">
+
+ <p class="clearfix"><label for="alias">Alias Name:</label>
+ <input type="text" name="alias" ng-model="aliasToCreate" id="alias"></p>
+
+ <p class="clearfix"><label for="aliasCollections">Collections:</label>
+ <select multiple id="aliasCollections" ng-model="aliasCollections" ng-options="collection.name for collection in collections" class="other">
+ </select></p>
+
+
+ <p class="clearfix note error" ng-show="renameMessage">
+ <span>{{renameMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-click="createAlias()"><span>Create Alias</span></button>
+ <button type="reset" class="reset" ng-click="cancelCreateAlias()"><span>Cancel</span></button>
+ </p>
+ </form>
+
+ </div>
+
+ <div class="action delete-alias" ng-show="showDeleteAlias">
+
+ <form>
+ <span ng-show="aliases">
+ <p class="clearfix"><label for="deleteAlias">Alias:</label>
+ <select id="deleteAlias" ng-model="aliasToDelete" ng-options="alias as alias for (alias, collections) in aliases" class="other">
+ </select></p>
+
+ <p class="clearfix note error" ng-show="swapMessage">
+ <span>{{swapMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-click="deleteAlias()"><span>Delete Alias</span></button>
+ <button type="reset" class="reset" ng-click="cancelDeleteAlias()"><span>Cancel</span></button>
+ </p>
+ </span>
+ <span ng-hide="aliases">
+ <p>No aliases to delete.</p>
+ <p class="clearfix buttons">
+ <button type="reset" class="reset" ng-click="cancelDeleteAlias()"><span>Cancel</span></button>
+ </p>
+ </span>
+
+ </form>
+
+ </div>
+
+ </div>
+
+
+ <div class="requires-core" ng-hide="collection">
+ <h2>Please select a collection</h2>
+ </div>
+
+ <div id="data" class="requires-core clearfix" ng-show="collection">
+
+ <div class="block" id="collection-data">
+
+ <h2>Collection: {{collection.name}}</h2>
+
+ <div class="message-container">
+ <div class="message"></div>
+ </div>
+
+ <div class="content">
+
+ <ul>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>Shard count:</span></dt>
+ <dd>{{collection.shards.length}}</dd>
+ </dl>
+ </li>
+ <li><dl class="clearfix">
+ <dt><span>configName:</span></dt>
+ <dd>{{collection.configName}}</dd>
+ </dl></li>
+
+ <li><dl class="clearfix">
+ <dt><span>replicationFactor:</span></dt>
+ <dd>{{collection.replicationFactor}}</dd>
+ </dl></li>
+
+ <li><dl class="clearfix">
+ <dt><span>maxShardsPerNode:</span></dt>
+ <dd>{{collection.maxShardsPerNode}}</dd>
+ </dl></li>
+
+ <li><dl class="clearfix">
+ <dt><span>router:</span></dt>
+ <dd>{{collection.router.name}}</dd>
+ </dl></li>
+
+ <li><dl class="clearfix">
+ <dt><span>autoAddReplicas:</span></dt>
+ <dd>{{collection.autoAddReplicas}}</dd>
+ </dl></li>
+ </ul>
+
+ </div>
+ </div>
+
+ <div class="block" id="shard-data">
+ <div class="content shard" ng-repeat="shard in collection.shards">
+ <a ng-click="toggleShard(shard)">
+ <h2>
+ <span ng-class="{open:shard.show}"><b>Shard: {{shard.name}}</b></span>
+ <div style="float:right" ng-show="!shard.range || shard.state == 'inactive'"><a ng-click="toggleRemoveShard(shard)"><span class="rem"></span></a></div>
+ </h2>
+ </a>
+ <ul ng-show="shard.showRemove">
+ <li>
+ <form class="delete-shard">
+ <p class="clearfix"><em>Are you sure you want to delete this shard?</em></p>
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: shard.deleted}" ng-click="deleteShard(shard)"><span>Delete Shard</span></button>
+ <button type="reset" class="reset" ng-click="toggleRemoveShard(shard)"><span>Cancel</span></button>
+ </p>
+ </form>
+ </li>
+ </ul>
+ <ul ng-show="shard.show">
+ <li>
+ <ul>
+ <li>
+ <dl class="clearfix">
+ <dt><span>state:</span></dt>
+ <dd>{{shard.state}}</dd>
+ </dl>
+ </li>
+ <li>
+ <dl class="clearfix">
+ <dt><span>range:</span></dt>
+ <dd>{{shard.range}}</dd>
+ </dl>
+ <br/>
+ </li>
+ <li>
+ <ul class="replica" ng-repeat="replica in shard.replicas">
+ <li>
+ <h2>
+ <a ng-click="toggleReplica(replica)">
+ <span class="openReplica" ng-class="{open:replica.show}">Replica: {{replica.name}}</span>
+ </a>
+ <div style="float:right"><a ng-click="toggleRemoveReplica(replica)"><span class="rem"></span></a></div>
+ </h2>
+ </li>
+ <li>
+ <ul ng-show="replica.showRemove">
+ <li>
+ <form class="delete-replica">
+
+ <p class="clearfix"><em>Are you sure you want to delete this replica?</em></p>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: replica.deleted}" ng-click="deleteReplica(replica)"><span>Delete Replica</span></button>
+ <button type="reset" class="reset" ng-click="toggleRemoveReplica(replica)"><span>Cancel</span></button>
+ </p>
+ </form>
+ </li>
+ </ul>
+ <ul ng-show="replica.show">
+ <li>
+ <dl class="clearfix">
+ <dt><span>core:</span></dt>
+ <dd>{{replica.core}}</dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>base URL:</span></dt>
+ <dd><a ng-href="{{replica.base_url}}{{rootUrl}}">{{replica.base_url}}</a></dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>node name:</span></dt>
+ <dd>{{replica.node_name}}</dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>state:</span></dt>
+ <dd>{{replica.state}}</dd>
+ </dl>
+ </li>
+
+ <li>
+ <dl class="clearfix">
+ <dt><span>leader:</span></dt>
+ <dd class="ico" ng-class="replica.leader ?'ico-1' : 'ico-0'"><span></span></dd>
+ </dl>
+ </li>
+ </ul>
+ </li>
+
+ </ul>
+ </li>
+ <li ng-hide="shard.showAdd">
+ <span class="actions replica">
+ <button class="action" id="add-replica" ng-click="toggleAddReplica(shard)"><span>add replica</span></button>
+ </span>
+ </li>
+ </ul>
+ <div class="action add-replica" ng-show="shard.showAdd">
+
+ <form>
+
+ <p id="node-name" class="clearfix"><label for="node-name">Node:</label>
+ <select chosen ng-model="shard.replicaNodeName" ng-options="node for node in nodes" class="other">
+ <option value="">No specified node</option>
+ </select>
+ node: {{shard.replicaNodeName}}
+ </p>
+
+ <p class="clearfix note error" ng-show="createReplicaMessage">
+ <span>{{createReplicaMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button class="submit delete" ng-class="{success: shard.replicaAdded}" ng-click="addReplica(shard)"><span>Create Replica</span></button>
+ <button type="reset" class="reset" ng-click="toggleAddReplica(shard)"><span>Cancel</span></button>
+ </p>
+ <p clas="clearfix">&nbsp;</p>
+ </form>
+
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="navigation" class="requires-core clearfix">
+ <ul>
+ <li ng-repeat="c in collections" ng-class="{current: collection.name == c.name}"><a href="#~collections/{{c.name}}">{{c.name}}</a></li>
+ </ul>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html b/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html
new file mode 100644
index 000000000..f1826f65c
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/core_overview.html
@@ -0,0 +1,206 @@
+<!--
+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 id="dashboard">
+
+ <div class="clearfix">
+
+ <div class="block fieldlist" id="statistics" ng-class="{disabled: statisticsDisabled}">
+
+ <h2><span>Statistics</span></h2>
+
+ <div class="message-container" ng-show="statsMessage">
+ <div class="message">{{statsMessage}}</div>
+ </div>
+
+ <div class="content">
+
+ <dl>
+
+ <dt>Last Modified:</dt>
+ <dd class="value">{{index.lastModified | timeago}}</dd>
+
+ <dt class="index_num-docs">Num Docs:</dt>
+ <dd class="value">{{index.numDocs}}</dd>
+
+ <dt class="index_max-doc">Max Doc:</dt>
+ <dd class="index_max-doc value">{{index.maxDoc}}</dd>
+
+ <dt class="index_heap-usage-bytes">Heap Memory Usage:</dt>
+ <dd class="index_heap-usage-bytes value">{{index.indexHeapUsageBytes}}</dd>
+
+ <dt class="index_deleted-docs">Deleted Docs:</dt>
+ <dd class="index_deleted-docs value">{{index.deletedDocs}}</dd>
+
+ <dt class="index_version">Version:</dt>
+ <dd class="index_version value">{{index.version}}</dd>
+
+ <dt class="index_segmentCount">Segment Count:</dt>
+ <dd class="index_segmentCount value">{{index.segmentCount}}</dd>
+
+ <dt class="index_current">Current:</dt>
+ <dd class="ico" ng-class="index.current ?'ico-1' : 'ico-0'"><span></span></dd>
+
+ </dl>
+
+ </div>
+ </div>
+
+ <div class="block fieldlist" id="instance">
+
+ <h2><span>Instance</span></h2>
+
+ <div class="message-container" ng-show="indexMessage">
+ <div class="message">{{indexMessage}}</div>
+ </div>
+
+ <div class="content">
+
+ <dl>
+
+ <dt><abbr title="Current Working Directory">CWD</abbr>:</dt>
+ <dd class="value">{{ core.directory.cwd }}</dd>
+
+ <dt>Instance:</dt>
+ <dd class="value">{{ core.directory.instance }}</dd>
+
+ <dt>Data:</dt>
+ <dd class="value">{{ core.directory.data }}</dd>
+
+ <dt>Index:</dt>
+ <dd class="value">{{ core.directory.index }}</dd>
+
+ <dt>Impl:</dt>
+ <dd class="value">{{ core.directory.dirimpl }}</dd>
+
+ </dl>
+
+ </div>
+ </div>
+
+ </div>
+ <div class="clearfix">
+
+ <div class="block" id="replication">
+
+ <h2>
+ <span class="is-replicating">
+ Replication
+ <span ng-show="isSlave"> (Slave)</span>
+ <span ng-show="isMaster"> (Master)</span>
+ </span>
+ </h2>
+
+ <div class="message-container" ng-show="replicationMessage">
+ <div class="message">{{replicationMessage}}</div>
+ </div>
+
+ <div class="content clearfix" id="details">
+
+ <table border="0" cellspacing="0" cellpadding="0">
+
+ <thead>
+
+ <tr>
+
+ <td><span>Index</span></td>
+ <th>Version</th>
+ <th><abbr title="Generation">Gen</abbr></th>
+ <th>Size</th>
+
+ </tr>
+
+ </thead>
+ <tbody>
+
+ <tr class="masterSearch" ng-show="isMaster">
+
+ <th>Master (Searching)</th>
+ <td class="version"><div>{{replication.indexVersion}}</div></td>
+ <td class="generation"><div>{{replication.generation}}</div></td>
+ <td class="size"><div>{{replication.indexSize || '-'}}</div></td>
+
+ </tr>
+
+ <tr class="master" ng-show="isMaster">
+
+ <th>Master (Replicable)</th>
+ <td class="version"><div>{{replication.master.replicableVersion || '-'}}</div></td>
+ <td class="generation"><div>{{replication.master.replicableGeneration || '-'}}</div></td>
+ <td class="size"><div>-</div></td>
+
+ </tr>
+
+ <tr class="master" ng-show="isSlave">
+
+ <th>Master (Replicable)</th>
+ <td class="version"><div>{{replication.master.replicableVersion || '-'}}</div></td>
+ <td class="generation"><div>{{replication.master.replicableGeneration || '-'}}</div></td>
+ <td class="size"><div>-</div></td>
+
+ </tr>
+
+ <tr class="masterSearch" ng-show="isSlave">
+
+ <th>Master (Searching)</th>
+ <td class="version"><div>{{replication.slave.masterDetails.indexVersion}}</div></td>
+ <td class="generation"><div>{{replication.slave.masterDetails.generation}}</div></td>
+ <td class="size"><div>{{replication.slave.masterDetails.indexSize || '-'}}</div></td>
+
+ </tr>
+
+ <tr class="slave slaveOnly" ng-show="isSlave">
+
+ <th>Slave (Searching)</th>
+ <td class="version"><div>{{replication.indexVersion}}</div></td>
+ <td class="generation"><div>{{replication.generation}}</div></td>
+ <td class="size"><div>{{replication.indexSize || '-'}}</div></td>
+
+ </tr>
+ </tbody>
+
+ </table>
+
+ </div>
+ </div>
+
+ <div class="block fieldlist" id="healthcheck" ng-class="{disabled: healthcheckMessage}">
+
+ <h2><span>Healthcheck</span></h2>
+
+ <div class="message-container" ng-show="healthcheckMessage">
+ <div class="message">{{healthcheckMessage}}</div>
+ </div>
+
+ <div class="content" ng-show="!healthcheckMessage">
+ <dl>
+
+ <dt class="status">Status:</dt>
+ <dd class="status value ico ico-1" ng-show="healthcheckStatus">
+ <button class="healthcheck-status enabled">Healthcheck Status</button>
+ </dd>
+ <dd class="status value ico ico-0" ng-show="!healthcheckStatus">
+ <button class="healthcheck-status">enable ping</button>
+ </dd>
+ </dl>
+ </div>
+
+ </div>
+
+ </div>
+
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html b/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html
new file mode 100644
index 000000000..161576956
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/cores.html
@@ -0,0 +1,224 @@
+<!--
+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 id="cores" class="clearfix empty">
+
+ <div id="ui-block" style="display:none">&nbsp;</div><!-- @todo what is this for? -->
+
+ <div id="frame">
+
+ <div id="actions" class="actions clearfix">
+
+ <button id="add" class="action" ng-click="showAddCore()"><span>Add Core</span></button>
+ <span ng-show="hasCores">
+ <button id="unload" class="warn requires-core" ng-click="unloadCore()"><span>Unload</span></button>
+ <button id="rename" class="action requires-core" ng-click="showRenameCore()"><span>Rename</span></button>
+ <button id="swap" class="action requires-core" ng-click="showSwapCores()"><span>Swap</span></button>
+ <button id="reload" class="requires-core" ng-click="reloadCore()"
+ ng-class="{success: reloadSuccess, warn: reloadFailure}"><span>Reload</span></button>
+ </span>
+ <div class="action add" data-rel="add" ng-show="showAdd" style="display:block;left:0px;">
+
+ <form>
+
+ <p class="clearfix"><label for="add_name">name:</label>
+ <input type="text" name="name" id="add_name" ng-model="newCore.name"></p>
+
+ <p class="clearfix"><label for="add_instanceDir">instanceDir:</label>
+ <input type="text" name="instanceDir" id="add_instanceDir" ng-model="newCore.instanceDir"></p>
+
+ <p class="clearfix"><label for="add_dataDir">dataDir:</label>
+ <input type="text" name="dataDir" id="add_dataDir" ng-model="newCore.dataDir"></p>
+
+ <p class="clearfix"><label for="add_config">config:</label>
+ <input type="text" name="config" id="add_config" ng-model="newCore.config"></p>
+
+ <p class="clearfix"><label for="add_schema">schema:</label>
+ <input type="text" name="schema" id="add_schema" ng-model="newCore.schema"></p>
+
+ <div class="cloud" ng-show="isCloud">
+
+ <p class="clearfix"><label for="add_collection">collection:</label>
+ <input type="text" name="collection" id="add_collection" ng-model="newCore.collection"></p>
+
+ <p class="clearfix"><label for="add_shard">shard:</label>
+ <input type="text" name="add_shard" id="add_shard" ng-model="newCore.shard"></p>
+
+ </div>
+
+ <p class="clearfix note directory-note">
+
+ <span><code>instanceDir</code> and <code>dataDir</code> need to exist before you can create the core</span>
+
+ </p>
+
+ <p class="clearfix note error" ng-show="addMessage">
+ <span>{{addMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-click="addCore()"><span>Add Core</span></button>
+ <button type="reset" class="reset" ng-click="cancelAddCore()"><span>Cancel</span></button>
+ </p>
+
+ </form>
+
+ </div>
+
+ <div class="action rename" ng-show="showRename">
+
+ <form>
+
+ <input type="hidden" name="core" data-core="current">
+
+ <p class="clearfix"><label for="rename_other">New Name:</label>
+ <input type="text" name="other" ng-model="other" id="rename_other"></p>
+
+ <p class="clearfix note error" ng-show="renameMessage">
+ <span>{{renameMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-click="renameCore()"><span>Rename Core</span></button>
+ <button type="reset" class="reset" ng-click="cancelRenameCore()"><span>Cancel</span></button>
+ </p>
+ </form>
+
+ </div>
+
+ <div class="action swap" ng-show="showSwap">
+
+ <form>
+
+ <p class="clearfix"><label for="swap_core">this:</label>
+ <input type="text" id="swap_core" name="core" ng-model="selectedCore" readonly="readonly"></p>
+
+ <p class="clearfix"><label for="swap_other">and:</label>
+ <select id="swap_other" ng-model="swapOther" ng-options="core.name as core.name for core in swapCorelist" class="other">
+ </select></p>
+
+ <p class="clearfix note error" ng-show="swapMessage">
+ <span>{{swapMessage}}</span>
+ </p>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-click="swapCores()"><span>Swap Cores</span></button>
+ <button type="reset" class="reset" ng-click="cancelSwapCores()"><span>Cancel</span></button>
+ </p>
+
+ </form>
+
+ </div>
+
+ </div>
+
+ <div id="data" class="requires-core" ng-show="hasCores">
+
+ <div class="block" id="core-data">
+
+ <h2><span>Core</span></h2>
+
+ <div class="message-container">
+ <div class="message"></div>
+ </div>
+
+ <div class="content">
+
+ <ul>
+
+ <li class="startTime"><dl class="clearfix">
+ <dt><span>startTime:</span></dt>
+ <dd class="timeago">{{core.startTime | timeago}}</dd>
+ </dl></li>
+
+ <li class="instanceDir"><dl class="clearfix">
+ <dt><span>instanceDir:</span></dt>
+ <dd>{{core.instanceDir}}</dd>
+ </dl></li>
+
+ <li class="dataDir"><dl class="clearfix">
+ <dt><span>dataDir:</span></dt>
+ <dd>{{core.dataDir}}</dd>
+ </dl></li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ <div class="block" id="index-data" ng-show="hasCores">
+
+ <h2><span>Index</span></h2>
+
+ <div class="message-container">
+ <div class="message">{{core.message}}</div>
+ </div>
+
+ <div class="content">
+
+ <ul>
+
+ <li class="lastModified"><dl class="clearfix">
+ <dt><span>lastModified:</span></dt>
+ <dd class="timeago">{{core.index.lastModified | timeago}}</dd>
+ </dl></li>
+
+ <li class="version"><dl class="clearfix">
+ <dt><span>version:</span></dt>
+ <dd>{{core.index.version}}</dd>
+ </dl></li>
+
+ <li class="numDocs"><dl class="clearfix">
+ <dt><span>numDocs:</span></dt>
+ <dd>{{core.index.numDocs}}</dd>
+ </dl></li>
+
+ <li class="maxDoc"><dl class="clearfix">
+ <dt><span>maxDoc:</span></dt>
+ <dd>{{core.index.maxDoc}}</dd>
+ </dl></li>
+
+ <li class="deletedDocs"><dl class="clearfix">
+ <dt><span>deletedDocs:</span></dt>
+ <dd>{{core.index.deletedDocs}}</dd>
+ </dl></li>
+
+ <li class="current"><dl class="clearfix">
+ <dt><span>current:</span></dt>
+ <dd class="ico" ng-class="core.index.current ?'ico-1' : 'ico-0'"><span></span></dd>
+ </dl></li>
+
+ <li class="directory"><dl class="clearfix">
+ <dt><span>directory:</span></dt>
+ <dd>{{core.index.directory}}</dd>
+ </dl></li>
+
+ </ul>
+
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="navigation" class="requires-core clearfix" ng-show="hasCores">
+ <ul>
+ <li ng-repeat="c in cores" ng-class="{current: core.name == c.name}"><a href="#~cores/{{c.name}}">{{c.name}}</a></li>
+ </ul>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html b/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html
new file mode 100644
index 000000000..dd11f5471
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/dataimport.html
@@ -0,0 +1,209 @@
+<!--
+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 id="dataimport" class="clearfix">
+
+ <div ng-show="!hasHandlers">The solrconfig.xml file for this index does not have an operational DataImportHandler defined!</div>
+ <div id="frame" ng-show="hasHandlers">
+
+ <div id="error" ng-show="error"></div>
+
+ <div id="current_state" class="{{status}}">
+
+ <p class="last_update">Last Update: <abbr title="{{lastUpdateUTC}}">{{lastUpdate}}</abbr></p>
+ <div class="info">
+
+ <strong>{{info.text}}<span ng-show="info.timeTaken"> (Duration: {{info.timeTaken | readableSeconds }})</span>
+ </strong>
+ <div class="details" ng-show="info.showDetails">
+ <div class="docs">
+ <span ng-repeat="doc in info.docs">
+ <abbr style="display:inline" title="{{ doc.desc }}">{{ doc.name }}</abbr>: {{doc.value | number}}<!-- remove whitespace!
+ -->&nbsp;<span style="display:inline" ng-show="doc.speed">{{ doc.speed | number}}/s</span><!-- remove whitespace!
+ --><span style="display:inline" ng-show="!$last">, </span>
+ </span>
+ </div>
+ <div class="dates">
+ <span ng-repeat="date in info.dates">
+ <abbr title="{{ date.desc }}">{{ date.name }}</abbr>:
+ <abbr class="time">{{ date.value | timeago }}</abbr>
+ </span>
+ </div>
+ </div>
+
+ <button class="abort-import" ng-class="{warn:!isAborting, success: isAborting}" ng-click="abort()" ng-show="isRunning">
+ <span ng-show="isAborting">Aborting Import</span>
+ <span ng-show="!isAborting">Abort Import</span>
+ </button>
+
+ </div>
+
+ </div>
+
+ <div class="block" id="raw_output" >
+
+ <h2>
+ <a class="toggle" ng-click="toggleRawStatus()"><span>Raw Status-Output</span></a>
+ </h2>
+
+ <div class="message-container" ng-show="showRawStatus">
+ <div class="message"></div>
+ </div>
+
+ <div class="content" ng-show="showRawStatus">
+
+ <div id="raw_output_container"><pre class="syntax language-json"><code ng-bind-html="rawStatus | highlight:'json' | unsafe"></code></pre></div>
+
+ </div>
+
+ </div>
+
+ <div class="block" id="config" ng-class="{debug_mode:isDebugMode}">
+
+ <h2 class="clearfix">
+ <a class="toggle" ng-click="toggleConfiguration()"><span>Configuration</span></a>
+ <a class="r reload_config" ng-class="{success:reloaded}" ng-click="reload()" title="Reload Configuration">Reload</a>
+ <a class="r debug_mode" ng-click="toggleDebug()">Debug-Mode</a>
+ </h2>
+
+ <div class="message-container" ng-show="showConfiguration">
+ <div class="message"></div>
+ </div>
+
+ <div class="content" ng-show="showConfiguration">
+ <div id="dataimport_config">
+
+ <div class="formatted" ng-show="!isDebugMode">
+
+ <pre class="syntax language-xml"><code ng-bind-html="config | highlight:'xml'| unsafe"></code></pre>
+
+ </div>
+
+ <div class="editable" ng-show="isDebugMode">
+
+ <textarea ng-model="config"></textarea>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div class="block" id="debug_response" ng-show="form.showDebug">
+
+ <h2>
+ <a class="toggle" ng-click="toggleRawDebug()"><span>Raw Debug-Response</span></a>
+ </h2>
+
+ <div class="message-container" ng-show="showRawDebug">
+ <div class="message"></div>
+ </div>
+
+ <div class="content" ng-show="showRawDebug">
+ <span ng-hide="rawResponse">
+ <em>No Request executed</em>
+ </span>
+ <span ng-show="rawResponse">
+ <pre class="syntax language-json"><code ng-bind-html="rawResponse | highlight:'json' | unsafe"></code></pre>
+ </span>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="form" ng-show="hasHandlers">
+
+ <div id="navigation">
+
+ <ul>
+ <li ng-class="{current: currentHandler == handler}" ng-repeat="handler in handlers">
+ <a href="#/{{form.core}}/dataimport/{{handler}}">{{handler}}</a>
+ </li>
+ </ul>
+
+ </div>
+
+ <form action="#" method="get">
+
+ <label for="command">
+ <a rel="help">Command</a>
+ </label>
+ <select name="command" id="command" ng-model="form.command">
+ <option>full-import</option>
+ <option>delta-import</option>
+ </select>
+
+ <label for="verbose" class="checkbox">
+ <input type="checkbox" name="verbose" id="verbose" ng-model="form.verbose">
+ Verbose
+ </label>
+
+ <label for="clean" class="checkbox">
+ <input type="checkbox" name="clean" id="clean" ng-model="form.clean">
+ Clean
+ </label>
+
+ <label for="commit" class="checkbox">
+ <input type="checkbox" name="commit" id="commit" ng-model="form.commit">
+ Commit
+ </label>
+
+ <label for="optimize" class="checkbox">
+ <input type="checkbox" name="optimize" id="optimize" ng-model="form.optimize">
+ Optimize
+ </label>
+
+ <label for="debug" class="checkbox">
+ <input type="checkbox" name="debug" id="debug" ng-model="form.showDebug">
+ Debug
+ </label>
+
+ <label for="entity">
+ <a rel="help">Entity</a>
+ </label>
+ <select ng-model="form.entity" id="entity">
+ <option value=""></option>
+ <option ng-repeat="entity in entities">{{entity}}</option>
+ </select>
+
+ <label for="start">
+ <a rel="help">Start</a>,
+ <a rel="help">Rows</a>
+ </label>
+ <div class="clearfix">
+ <input type="text" id="start" placeholder="0" ng-model="form.start">
+ <input type="text" id="rows" placeholder="10" ng-model="form.rows">
+ </div>
+
+ <label for="custom_parameters">
+ <a rel="help">Custom Parameters</a>
+ </label>
+ <input type="text" id="custom_parameters" ng-model="form.custom" placeholder="key1=val1&amp;key2=val2">
+ </form>
+ <button class="execute" type="submit" ng-click="submit()">
+ <span ng-show="isDebugMode">Execute with this Configuration →</span>
+ <span ng-show="!isDebugMode">Execute</span>
+ </button>
+ <button class="refresh-status" ng-click="refreshStatus()" ng-class="{loader: isStatusLoading, success: statusUpdated}"><span>Refresh Status</span></button>
+
+ <p id="auto-refresh-status"><a ng-click="updateAutoRefresh()" ng-class="{on:autorefresh}">Auto-Refresh Status</a></p>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html b/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html
new file mode 100644
index 000000000..2bf3f1298
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/documents.html
@@ -0,0 +1,111 @@
+<!--
+/*
+* 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 id="documents" class="clearfix">
+ <div id="form">
+ <form>
+ <label for="qt">
+ <a rel="help">Request-Handler (qt)</a>
+ </label>
+ <input ng-model="handler" type="text" id="qt" value="/update" title="Request handler in solrconfig.xml.">
+ <label for="document-type">
+ <a rel="help">Document Type</a>
+ </label>
+
+ <div><select ng-model="type" id="document-type" ng-change="changeDocumentType()" placeholder="The type of the document field">
+ <!-- TODO: support the Builder -->
+ <option value="csv">CSV</option>
+ <option value="wizard">Document Builder</option>
+ <option value="upload">File Upload</option>
+ <option value="json">JSON</option>
+ <option value="solr">Solr Command (raw XML or JSON)</option>
+ <option value="xml">XML</option>
+ </select>
+ </div>
+ <div id="document-container">
+ <div id="wizard" ng-show="type=='wizard'">
+ <div id="wizard-fields">
+ <div><span class="description">Field</span>: <select ng-model="fieldName" id="wiz-field-select" name="wiz-field-select"
+ ng-options="field for field in fields"></select>
+ </div>
+ <div><span id="wiz-field-data"><span class="description">Field Data</span>:</span>
+ <textarea ng-model="fieldData"
+ id="wizard-doc"
+ name="wizard-doc"
+ rows="10"
+ cols="40"
+ placeholder="Enter your field text here and then click 'Add Field' to add the field to the document.">
+ </textarea>
+ </div>
+ </div>
+ <div id="wizard-add"><a ng-click="addWizardField()" id="add-field-href"><img border="0" src="./img/ico/plus-button.png"/>Add
+ Field</a></div>
+ </div>
+ <label for="document">
+ <a rel="help">Document(s)</a>
+ </label>
+ <textarea ng-show="type!='upload'" ng-model="document" name="document" id="document" title="The Document" rows="10"
+ cols="70" placeholder="{{placeholder}}"></textarea>
+
+ <div id="file-upload" ng-show="type=='upload'">
+ <input type="file" id="the-file" name="the-file" file-model="fileUpload"/>
+ </div>
+ </div>
+
+ <div id="advanced">
+ <!-- TODO: only show for JSON/XML-->
+ <div id="attribs">
+ <div id="upload-only" ng-show="type=='upload'">
+ <label for="erh-params"><!-- TODO: cleaner way to do this? -->
+ <a rel="help">Extracting Req. Handler Params</a>
+ </label>
+ <input ng-model="literalParams" type="text" id="erh-params" value="&literal.id=change.me"
+ title="Extracting Request Handler Parameters" size="50">
+ </div>
+ <div id="general-attribs">
+ <label for="commitWithin">
+ <a rel="help">Commit Within</a>
+ </label>
+ <input type="text" ng-model="commitWithin" id="commitWithin" value="1000" title="Commit Within (ms)">
+ <label for="overwrite">
+ <a rel="help">Overwrite</a>
+ </label>
+ <input ng-model="overwrite" type="text" id="overwrite" value="true" title="Overwrite">
+ </div>
+ </div>
+ </div>
+
+ <button type="submit" ng-click="submit()" id="submit">Submit Document</button>
+ </form>
+ </div>
+ <div id="result">
+ <div id="response" ng-show="response">
+ <div>
+ <span class="description">Status: </span>{{ responseStatus }}
+ </div>
+ <div>
+ <span class="description">Response:</span>
+ <pre class="syntax language-json"><code ng-bind-html="response | highlight:'json' | unsafe"></code></pre>
+ </div>
+ </div>
+
+ </div>
+</div>
+
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/files.html b/solr-8.1.1/server/solr-webapp/webapp/partials/files.html
new file mode 100644
index 000000000..6a31096f0
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/files.html
@@ -0,0 +1,47 @@
+<!--
+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 id="files" class="clearfix">
+
+ <div id="frame">
+
+ <div id="tree-holder">
+
+ <jstree class="tree" on-select="showTreeLink(data)" data="tree" id="tree"></jstree>
+
+ </div>
+ <div id="file-content" class="clearfix">
+
+ <div class="top clearfix">
+
+ <a id="url" class="address-bar" href="{{url}}" ng-show="url">{{baseurl}}{{url}}</a>
+
+ </div>
+
+ <div class="view-file">
+
+ <div class="response" ng-show="content">
+ <pre class="syntax language-{{lang}}"><code ng-bind-html="content | highlight:lang | unsafe"></code></pre>
+ </div>
+
+
+ </div>
+
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/index.html b/solr-8.1.1/server/solr-webapp/webapp/partials/index.html
new file mode 100644
index 000000000..b9e6a90f4
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/index.html
@@ -0,0 +1,261 @@
+<!--
+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 id="index" class="clearfix">
+
+ <div class="clearfix">
+
+ <div class="index-left">
+
+ <div class="block" id="instance">
+
+ <h2><span>Instance</span></h2>
+
+ <div class="content">
+
+ <ul class="data" ngShow="system">
+
+ <li class="start_time"><dl class="clearfix">
+ <dt><span>Start</span></dt>
+ <dd class="timeago">{{system.jvm.jmx.startTime | timeago}}</dd>
+ </dl></li>
+
+<!--
+ <li class="host"><dl class="clearfix">
+ <dt><span>Host</span></dt>
+ <dd></dd>
+ </dl></li>
+
+ <li class="dir dir_cwd"><dl class="clearfix">
+ <dt><span>CWD</span></dt>
+ <dd></dd>
+ </dl></li>
+
+ <li class="dir dir_instance"><dl class="clearfix">
+ <dt><span>Instance</span></dt>
+ <dd></dd>
+ </dl></li>
+
+ <li class="dir dir_data"><dl class="clearfix">
+ <dt><span>Data</span></dt>
+ <dd></dd>
+ </dl></li>
+
+ <li class="dir dir_index"><dl class="clearfix">
+ <dt><span>Index</span></dt>
+ <dd></dd>
+ </dl></li>
+-->
+ </ul>
+
+ </div>
+
+ </div>
+
+ <div class="block" id="versions">
+
+ <h2><span>Versions</span></h2>
+
+ <div class="content">
+
+ <ul class="data">
+
+ <li class="solr solr_spec_version"><dl class="clearfix">
+ <dt><span>solr-spec</span></dt>
+ <dd>{{system.lucene["solr-spec-version"]}}</dd>
+ </dl></li>
+
+ <li class="solr_impl_version"><dl class="clearfix">
+ <dt class=""><span>solr-impl</span></dt>
+ <dd>{{system.lucene["solr-impl-version"]}}</dd>
+ </dl></li>
+
+ <li class="lucene lucene_spec_version"><dl class="clearfix">
+ <dt><span>lucene-spec</span></dt>
+ <dd>{{system.lucene["lucene-spec-version"]}}</dd>
+ </dl></li>
+
+ <li class="lucene_impl_version"><dl class="clearfix">
+ <dt><span>lucene-impl</span></dt>
+ <dd>{{system.lucene["lucene-impl-version"]}}</dd>
+ </dl></li>
+
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div class="index-right">
+
+ <div class="block" id="system">
+
+ <h2><span>System</span>
+ <small class="bar-desc">{{load_average[0]}} {{load_average[1]}} {{load_average[2]}}</small>
+ </h2>
+ <a class="reload" ng-click="reload()"><span>reload</span></a>
+
+ <div class="content">
+
+ <div id="physical-memory-bar" ng-show="system.system.totalPhysicalMemorySize && system.system.freePhysicalMemorySize">
+
+ <p data-desc="physical-memory-bar">Physical Memory
+ <small class="bar-desc">{{memoryPercentage}}</small>
+ </p>
+ <div class="bar-holder bar-lvl-2">
+
+ <div class="bar-max bar">
+ <span class="bar-max val">{{memoryMax}}</span>
+
+ <div class="bar-total bar" ng-style="{width:memoryPercentage}">
+ <span class="bar-total val" title="raw: {{memoryTotal}}B">{{memoryTotalDisplay}}</span>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="swap-space-bar" ng-show="system.system.totalSwapSpaceSize && system.system.freeSwapSpaceSize">
+
+ <p data-desc="swap-space-bar">Swap Space
+ <small class="bar-desc">{{swapPercentage}}</small>
+ </p>
+ <div class="bar-holder bar-lvl-2">
+
+ <div class="bar-max bar">
+ <span class="bar-max val">{{swapMax}}</span>
+
+ <div class="bar-total bar" ng-style="{width:swapPercentage}">
+ <span class="bar-total val" title="raw:{{swapTotal}}B">{{swapTotalDisplay}}</span>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="file-descriptor-bar" ng-show="system.system.maxFileDescriptorCount && system.system.openFileDescriptorCount">
+
+ <p data-desc="file-descriptor-bar">File Descriptor Count
+ <small class="bar-desc">{{fileDescriptorPercentage}}</small>
+ </p>
+ <div class="bar-holder bar-lvl-2">
+
+ <div class="bar-max bar">
+ <span class="bar-max val">{{system.system.maxFileDescriptorCount}}</span>
+
+ <div class="bar-total bar" ng-style="{width:fileDescriptorPercentage}">
+ <span class="bar-total val">{{system.system.openFileDescriptorCount}}</span>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <p class="no-info" ng-show="noInfo">Sorry, no information available</p>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div class="clearfix">
+
+ <div class="index-left">
+
+ <div class="block" id="jvm">
+
+ <h2><span>JVM</span></h2>
+
+ <div class="content clearfix">
+
+ <ul class="data">
+
+ <li class="jvm_version"><dl class="clearfix">
+ <dt><span>Runtime</span></dt>
+ <dd>{{system.jvm.name}} {{system.jvm.version}}</dd>
+ </dl></li>
+
+ <li class="processors"><dl class="clearfix">
+ <dt><span>Processors</span></dt>
+ <dd>{{system.jvm.processors}}</dd>
+ </dl></li>
+
+ <li class="command_line_args"><dl class="clearfix">
+ <dt><span>Args</span></dt>
+ <dd ng-repeat="arg in commandLineArgs track by $index" ng-class="{'odd':$odd}">{{arg}}</dd>
+ </dl></li>
+
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+ <div class="index-right">
+
+ <div class="block" id="jvm-memory">
+
+ <h2><span data-desc="jvm-memory-bar">JVM-Memory
+ <small class="bar-desc">{{javaMemoryPercentage}}</small>
+ </span></h2>
+
+ <div class="content">
+
+ <div id="jvm-memory-bar">
+ <div class="bar-holder bar-lvl-3">
+
+ <div class="bar-max bar">
+ <span class="bar-max val" title="raw: {{javaMemoryMax}}">{{javaMemoryMax}}</span>
+
+ <div class="bar-total bar" ng-style="{width: javaMemoryTotalPercentage}">
+ <span class="bar-total val" title="raw: {{javaMemoryTotal}}B">{{javaMemoryTotalDisplay}}</span>
+
+ <div class="bar-used bar" ng-style="{width: javaMemoryUsedPercentage}">
+ <span class="bar-used val" title="raw: {{javaMemoryUsed}}B">{{javaMemoryUsedDisplay}}</span>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html b/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html
new file mode 100644
index 000000000..047de48d5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/java-properties.html
@@ -0,0 +1,27 @@
+<!--
+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 id="java-properties">
+ <ul>
+ <li ng-class="{odd:$odd}" ng-repeat="prop in props | orderObjectBy:'name'">
+ <dl class="clearfix">
+ <dt ng-bind-html="prop.name | unsafe"></dt>
+ <dd ng-class="{odd:$odd, multi:props.length&gt;1}" ng-repeat="value in prop.values">{{value.value}}</dd>
+ </dl>
+ </li>
+ </ul>
+ </div>
+
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html b/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html
new file mode 100644
index 000000000..5a4a2d681
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/logging-levels.html
@@ -0,0 +1,56 @@
+<!--
+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 id="logging" class="clearfix">
+
+
+ <div id="frame">
+
+ <div class="block">
+ <h2><span>{{watcher}}</span></h2>
+ <ul class="tree jstree">
+ <li class="jstree-leaf level-{{logger.level.toLowerCase()}}" ng-class="{'jstree-last':$last}" ng-repeat="logger in logging" ng-include="'logger.html'"></li>
+ </ul>
+ </div>
+ </div>
+</div>
+
+ <script type="text/ng-template" id="logger.html">
+ <ins class="trigger jstree-icon">&nbsp;</ins>
+ <a ng-click="toggleOptions(logger)" class="trigger {{logger.level.toLowerCase() }}" ng-class="{null:!logger.level, set: logger.set}" title="{{ logger.name }}" rel="{{logger.level}}">
+ <span class="ns">{{logger.name}}</span>
+ <span class="name" ng-show="logger.short">{{ logger.short }}</span>
+ <span class="name" ng-show="!logger.short"><em>empty</em></span>
+ </a>
+
+ <div class="selector-holder" ng-class="{open:logger.showOptions}">
+ <div class="selector">
+ <a class="trigger" ng-click="toggleOptions(logger)"><span><em>{{logger.level || "null"}}</em></span></a>
+ <div ng-show="logger.showOptions">
+ <ul>
+ <li ng-repeat="level in levels track by level.pos">
+ <a ng-click="setLevel(logger, level.name)">{{level.name}}</a>
+ </li>
+ <li class="unset"><a ng-click="setLevel(logger, 'unset')">UNSET</a></li>
+ </ul>
+ <a class="close" ng-click="toggleOptions(logger)"><span>[x]</span></a>
+ </div>
+ </div>
+ </div>
+ <ul>
+ <li class="jstree-leaf level-{{logger.level.toLowerCase()}}" ng-class="{'jstree-last':$last}" ng-repeat="logger in logger.children" ng-include="'logger.html'"></li>
+ </ul>
+ </script>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html b/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html
new file mode 100644
index 000000000..9952360b3
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/logging.html
@@ -0,0 +1,57 @@
+<!--
+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 id="logging" class="clearfix">
+
+ <div id="viewer">
+ <div class="block">
+ <h2><span>{{watcher}}</span></h2>
+ </div>
+ <table class="has-data" border="0" cellpadding="0" cellspacing="0">
+ <thead>
+ <tr>
+ <th class="time">Time (<span>{{timezone}}</span>)</th>
+ <th class="level">Level</th>
+ <th class="core">Core</th>
+ <th class="logger">Logger</th>
+ <th class="message">Message</th>
+ </tr>
+ </thead>
+ <tbody ng-repeat="event in events">
+ <tr ng-click="toggleRow(event)" class="{{event.trace ? 'has-trace': ''}} {{'level-'+event.level.toLowerCase()}}">
+ <td class="span"><a><span>{{ timezone == "UTC" ? event.utc_time : event.local_time }}</span></a></td>
+ <td class="level span"><a><span>{{ event.level }} {{event.showTrace}}</span></span></a></td>
+ <td class="span"><a><span>{{ event.core }}</span></a></td>
+ <td class="span"><a><span><abbr title="{{event.logger}}">{{event.loggerBase}}</abbr></span></a></td>
+ <td class="message span"><a><span>{{ event.message }}</span></a></td>
+ </tr>
+ <tr class="trace" ng-show="event.showTrace && event.trace">
+ <td colspan="4"><pre>{{event.trace}}</pre></td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr ng-show="events.length==0">
+ <td colspan="4">No Events available</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div id="footer" class="clearfix">
+ <div id="state">Last Check: {{sinceDisplay}}</div>
+ <div id="date-format" ng-click="toggleTimezone()"><a ng-class="{on: timezone=='UTC'}">Show dates in UTC</a></div>
+ <a id="refresh-toggle" ng-class="{'active': !stopped, 'stopped': stopped}" ng-click="toggleRefresh()">Auto-Refresh</a>
+ </div>
+ </div>
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/login.html b/solr-8.1.1/server/solr-webapp/webapp/partials/login.html
new file mode 100644
index 000000000..29c8c7150
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/login.html
@@ -0,0 +1,160 @@
+<!--
+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 id="login" class="clearfix">
+
+ <div ng-show="authScheme === 'Basic'">
+ <h1>Basic Authentication</h1>
+ <div class="login-error" ng-show="statusText !== 'require authentication' || authParamsError !== null">
+ {{statusText}}{{authParamsError}}
+ </div>
+ <div ng-show="!isLoggedIn()">
+ <p>
+ Solr requires authentication for resource {{authLocation === '/' ? 'Dashboard' : authLocation}}.<br/>
+ Please log in with your username and password for realm {{authRealm}}.
+ </p>
+ <br/>
+ <div ng-show="error" class="alert alert-danger">{{error}}</div>
+ <form name="form" ng-submit="login()" role="form">
+ <div class="form-group">
+ <label for="username">Username</label>
+ <input type="text" name="username" id="username" class="form-control" ng-model="username" required />
+ <span ng-show="form.username.$dirty && form.username.$error.required" class="help-block">Username is required</span>
+ </div>
+ <div class="form-group">
+ <label for="password">Password</label>
+ <input type="password" name="password" id="password" class="form-control" ng-model="password" required />
+ <span ng-show="form.password.$dirty && form.password.$error.required" class="help-block">Password is required</span>
+ </div>
+ <br/>
+ <div class="form-actions">
+ <button type="submit" ng-disabled="form.$invalid" class="btn btn-danger">Login</button>
+ </div>
+ </form>
+ </div>
+
+ <div ng-show="isLoggedIn()">
+ <p>
+ Logged in as user {{authLoggedinUser}}. Realm={{authRealm}}.<br/>
+ </p>
+ <br/>
+ <form name="logoutForm" ng-submit="logout()" role="form" ng-show="isLoggedIn()">
+ <div class="form-actions">
+ <button type="submit" class="btn btn-danger">Logout</button>
+ </div>
+ </form>
+ </div>
+
+ </div>
+
+ <div ng-show="authScheme === 'Negotiate'">
+ <h1>Kerberos Authentication</h1>
+ <p>Your browser did not provide the required information to authenticate using Kerberos.
+ Please check that your computer has a valid ticket for communicating with Solr,
+ and that your browser is properly configured to provide that ticket when required.
+ For more information, consult
+ <a href="https://lucene.apache.org/solr/guide/kerberos-authentication-plugin.html">
+ Solr's Kerberos documentation
+ </a>.
+ </p>
+ The response from the server was:
+ <hr/>
+ <pre>HTTP 401 {{statusText}}
+WWW-Authenticate: {{wwwAuthHeader}}</pre>
+ <hr/>
+ </div>
+
+ <div ng-show="authScheme === 'Bearer'">
+ <h1>OpenID Connect (JWT) authentication</h1>
+ <div class="login-error" ng-show="statusText || authParamsError || error">
+ {{statusText}} {{authParamsError}} {{error}} {{errorDescription}}
+ </div>
+ <div ng-show="isCallback">
+ Callback from ID Provider received.
+ <p ng-show="error">
+ There were errors during login with ID Provider. Please try again.<br/>
+ </p>
+ </div>
+ <div ng-show="!isLoggedIn() && !isCallback">
+ <p>
+ Solr requires authentication for resource {{authLocation === '/' ? 'Dashboard' : authLocation}}.
+ </p>
+ <div ng-show="authData !== null && jwtIsLoginNode()">
+ <p>
+ Please log in with your Identity Provider (IdP) for realm {{authRealm}}.
+ </p>
+ <p>
+ Clicking the button below, you will be redirected to the authorization endpoint of the ID provider:<br/>
+ {{authData['authorizationEndpoint']}}
+ </p>
+ <br/>
+ <div ng-show="error" class="alert alert-danger">{{error}}</div>
+ <form name="form" ng-submit="jwtLogin()" role="form">
+ <div class="form-actions">
+ <button type="submit" class="btn btn-danger">Redirect to Identity Provider</button>
+ </div>
+ </form>
+ </div>
+ <div ng-show="authData !== null && !jwtIsLoginNode()">
+ <p>
+ In order to log in to the identity provider, you need to load this page from the Solr node registered as callback node:<br/>
+ {{jwtFindLoginNode()}}<br/>
+ After successful login you will be able to navigate to other nodes.
+ </p>
+ <p>
+ <form name="form" ng-submit="jwtGotoLoginNode()" role="form">
+ <div class="form-actions">
+ <button type="submit" class="btn btn-danger">Redirect to {{jwtFindLoginNode()}}</button>
+ </div>
+ </form>
+ </p>
+ </div>
+ <div class="login-error" ng-show="authData === null">
+ Unable to login. There is a problem with the Solr backend. Please consult Solr logs.
+ </div>
+ </div>
+
+ <div ng-show="isLoggedIn()">
+ <p>
+ Logged in as user {{authLoggedinUser}}. Realm={{authRealm}}.<br/>
+ </p>
+ <br/>
+ <form name="logoutForm" ng-submit="jwtLogout()" role="form" ng-show="isLoggedIn()">
+ <div class="form-actions">
+ <button type="submit" class="btn btn-danger">Logout</button>
+ </div>
+ </form>
+ </div>
+
+ </div>
+
+ <div ng-show="!authSchemeSupported">
+ <h1>Authentication scheme not supported</h1>
+
+ <div class="login-error">
+ {{statusText}}
+ </div>
+
+ <p>Some or all Solr operations are protected by an authentication scheme that is not yet supported by this Admin UI ({{authScheme}}).</p>
+ <p>Solr returned an error response:
+ <hr/>
+ <pre>HTTP 401 {{statusText}}
+WWW-Authenticate: {{wwwAuthHeader}}</pre>
+ <hr/>
+ </p>
+ <p>A possible workaround may be to use another client that supports this scheme.</p>
+ </div>
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html b/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html
new file mode 100644
index 000000000..aaa424d3b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/plugins.html
@@ -0,0 +1,72 @@
+<!--
+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 id="plugins" class="clearfix">
+
+ <div id="frame">
+ <ul>
+ <li class="entry" ng-class="{changed: plugin.changed}" ng-repeat="plugin in type.plugins">
+ <a ng-click="selectPlugin(plugin)">
+ <span>{{ plugin.name }}</span>
+ </a>
+ <ul class="detail" ng-show="plugin.open">
+ <li ng-repeat="(key, value) in plugin.properties" ng-class="{odd: $odd}">
+ <dl class="clearfix">
+ <dt>{{ key }}:</dt>
+ <!--<dd ng-repeat="v in value">{{v}}</dd><!-- is AN ARRAY!!-->
+ <dd>{{value}}</dd>
+ </dl>
+ </li>
+ <li class="stats clearfix" ng-show="plugin.stats">
+ <span>stats:</span>
+ <ul>
+ <li ng-repeat="(key, value) in plugin.stats" ng-class="{odd: $odd}">
+ <dl class="clearfix">
+ <dt>{{key}}:</dt>
+ <dd>{{value}}</dd>
+ </dl>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </ul>
+ </div>
+
+ <div id="navigation" class="clearfix">
+
+ <ul>
+ <li ng-repeat="typeObj in types" class="{{typeObj.lower}}" ng-class="{active:typeObj==type}">
+ <a ng-click="selectPluginType(typeObj)" rel="{{typeObj.name}}">{{typeObj.name}}
+ <span ng-show="typeObj.changes">{{typeObj.changes}}</span>
+ </a>
+ </li>
+ <li class="PLUGINCHANGES"><a ng-click="startRecording()">Watch Changes</a></li>
+ <li class="RELOAD"><a ng-click="refresh()">Refresh Values</a></li>
+ <li class="NOTE"><p>NOTE: Only selected metrics are shown here. Full metrics can be accessed via /admin/metrics handler.</p></li>
+ </ul>
+ </div>
+
+ <div id="recording" ng-show="isRecording">
+ <div class="wrapper clearfix">
+
+ <p class="loader">Watching for Changes</p>
+ <button class="primary" ng-click="stopRecording()">Stop &amp; Show Changes</button>
+
+ </div>
+ <div id="blockUI"></div>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/query.html b/solr-8.1.1/server/solr-webapp/webapp/partials/query.html
new file mode 100644
index 000000000..2a7735505
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/query.html
@@ -0,0 +1,357 @@
+<!--
+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 id="query" class="clearfix">
+
+ <div id="form">
+ <form>
+ <label for="qt" title="Request handler in solrconfig.xml.">
+ <a rel="help">Request-Handler (qt)</a>
+ </label>
+ <input type="text" ng-model="qt" id="qt" value="/select" title="Request handler in solrconfig.xml.">
+
+ <fieldset class="common">
+ <legend>common</legend>
+ <div class="fieldset">
+
+ <label for="q" title="The query string.">
+ q
+ </label>
+ <textarea name="q" ng-model="query.q" id="q" title="The query string.">*:*</textarea>
+
+ <label for="fq" title="Filter query.">
+ <a rel="help">fq</a>
+ </label>
+ <div class="multiple">
+ <div class="row clearfix" ng-repeat="filter in filters">
+ <input type="text" ng-model="filter.fq" id="fq" name="fq" title="Filter query.">
+ <div class="buttons">
+ <a class="rem" ng-click="removeFilter($index)"><span></span></a>
+ <a class="add" ng-click="addFilter($index)"><span></span></a>
+ </div>
+ </div>
+ </div>
+
+ <label for="sort" title="Sort field or function with asc|desc.">
+ <a rel="help">sort</a>
+ </label>
+ <input type="text" ng-model="query.sort" id="sort" name="sort" title="Sort field or function with asc|desc.">
+
+ <label for="start" title="Number of leading documents to skip and number of documents to return after 'start'. (Integers)">
+ <a rel="help">start</a>,
+ <a rel="help">rows</a>
+ </label>
+ <div class="clearfix">
+ <input type="text" name="start" ng-model="query.start" id="start" placeholder="0" pattern="[0-9]+" title="Number of leading documents to skip. (Integer)">
+ <input type="text" name="rows" ng-model="query.rows" id="rows" placeholder="10" pattern="[0-9]+" title="Number of documents to return after 'start'. (Integer)">
+ </div>
+
+ <label for="fl" title="Field list, comma separated.">
+ <a rel="help">fl</a>
+ </label>
+ <input type="text" ng-model="query.fl" name="fl" id="fl" value="" title="Field list, comma separated.">
+
+ <label for="df" title="Default search field">
+ <a rel="help">df</a>
+ </label>
+ <input type="text" ng-model="query.df" name="df" id="df" value="" title="Default search field">
+
+ <label for="custom_parameters">
+ <a rel="help">Raw Query Parameters</a>
+ </label>
+ <input type="text" ng-model="rawParams" id="custom_parameters" value="" placeholder="key1=val1&amp;key2=val2">
+
+ <label for="wt" title="The writer type (response format).">
+ <a rel="help">wt</a>
+ </label>
+ <select name="wt" ng-model="query.wt" id="wt" title="The writer type (response format).">
+ <option ng-selected="selected" value=''>------</option>
+ <option>json</option>
+ <option>xml</option>
+ <option>python</option>
+ <option>ruby</option>
+ <option>php</option>
+ <option>csv</option>
+ </select>
+
+ <label for="indent off" class="checkbox" title="Do not indent results.">
+ <input type="checkbox" ng-model="query.indent" name="indent" id="indent" title="Do not indent results." ng-true-value="'off'" ng-false-value="''">
+ indent off
+ </label>
+
+ <label for="debugQuery" class="checkbox" title="Show timing and diagnostics.">
+ <input type="checkbox" ng-model="query.debugQuery" name="debugQuery" id="debugQuery" title="Show timing and diagnostics." ng-true-value="'on'" ng-false-value="''">
+ debugQuery
+ </label>
+
+ </div>
+ </fieldset>
+
+ <fieldset class="dismax optional">
+ <legend>
+ <label for="dismax" class="checkbox" title="Enable dismax.">
+ <input type="checkbox" ng-model="isDismax" name="defType" id="dismax" value="dismax">
+ dismax
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isDismax">
+
+ <label for="q_alt" title="Alternate query when 'q' is absent.">q.alt</label>
+ <input type="text" ng-model="dismax['q.alt']" name="q.alt" id="q_alt" title="Alternate query when 'q' is absent.">
+
+ <label for="qf" title="Query fields with optional boosts.">qf</label>
+ <input type="text" ng-model="dismax.qf" name="qf" id="qf" title="Query fields with optional boosts.">
+
+ <label for="mm" title="Min-should-match expression">mm</label>
+ <input type="text" ng-model="dismax.mm" name="mm" id="mm" title="Min-should-match expression.">
+
+ <label for="pf" title="Phrase boosted fields.">pf</label>
+ <input type="text" ng-model="dismax.pf" name="pf" id="pf" title="Phrase boosted fields.">
+
+ <label for="ps" title="Phrase boost slop.">ps</label>
+ <input type="text" ng-model="dismax.ps" name="ps" id="ps" title="Phrase boost slop.">
+
+ <label for="qs" title="Query string phrase slop.">qs</label>
+ <input type="text" ng-model="dismax.qs" name="qs" id="qs" title="Query string phrase slop.">
+
+ <label for="tie" title="Score tie-breaker. Try 0.1.">tie</label>
+ <input type="text" ng-model="dismax.tie" name="tie" id="tie" title="Score tie-breaker. Try 0.1.">
+
+ <label for="bq" title="Boost query.">bq</label>
+ <input type="text" ng-model="dismax.bq" name="bq" id="bq" title="Boost query.">
+
+ <label for="bf" title="Boost function (added).">bf</label>
+ <input type="text" ng-model="dismax.bf" name="bf" id="bf" title="Boost function (added).">
+
+ </div>
+ </fieldset>
+
+ <fieldset class="edismax optional">
+ <legend>
+ <label for="edismax" class="checkbox" title="Enable edismax.">
+ <input type="checkbox" ng-model="isEdismax" name="defType" id="edismax" value="edismax">
+ <strong>e</strong>dismax
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isEdismax">
+
+ <label for="edismax_q_alt" title="Alternate query when 'q' is absent.">q.alt</label>
+ <input type="text" ng-model="edismax['q.alt']" name="q.alt" id="edismax_q_alt" title="Alternate query when 'q' is absent.">
+
+ <label for="edismax_qf" title="Query fields with optional boosts.">qf</label>
+ <input type="text" ng-model="edismax.qf" name="qf" id="edismax_qf" title="Query fields with optional boosts.">
+
+ <label for="edismax_mm" title="Min-should-match expression.">mm</label>
+ <input type="text" ng-model="edismax.mm" name="mm" id="edismax_mm" title="Min-should-match expression.">
+
+ <label for="edismax_pf" title="Phrase boosted fields.">pf</label>
+ <input type="text" ng-model="edismax.pf" name="pf" id="edismax_pf" title="Phrase boosted fields.">
+
+ <label for="edismax_ps" title="Phrase boost slop.">ps</label>
+ <input type="text" ng-model="edismax.ps" name="ps" id="edismax_ps" title="Phrase boost slop.">
+
+ <label for="edismax_qs" title="Query string phrase slop.">qs</label>
+ <input type="text" ng-model="edismax.qs" name="qs" id="edismax_qs" title="Query string phrase slop.">
+
+ <label for="edismax_tie" title="Score tie-breaker. Try 0.1.">tie</label>
+ <input type="text" ng-model="edismax.tie" name="tie" id="edismax_tie" title="Score tie-breaker. Try 0.1.">
+
+ <label for="edismax_bq" title="Boost query.">bq</label>
+ <input type="text" ng-model="edismax.bq" name="bq" id="edismax_bq" title="Boost query.">
+
+ <label for="edismax_bf" title="Boost function (added).">bf</label>
+ <input type="text" ng-model="edismax.bf" name="bf" id="edismax_bf" title="Boost function (added).">
+
+ <label for="edismax_uf" title="User Fields">uf</label>
+ <input type="text" ng-model="edismax.uf" name="uf" id="edismax_uf" title="User Fields">
+
+ <label for="edismax_pf2" title="bigram phrase boost fields">pf2</label>
+ <input type="text" ng-model="edismax.pf2" name="pf2" id="edismax_pf2" title="bigram phrase boost fields">
+
+ <label for="edismax_pf3" title="trigram phrase boost fields">pf3</label>
+ <input type="text" ng-model="edismax.pf3" name="pf3" id="edismax_pf3" title="trigram phrase boost fields">
+
+ <label for="edismax_ps2" title="phrase slop for bigram phrases">ps2</label>
+ <input type="text" ng-model="edismax.ps2" name="ps2" id="edismax_ps2" title="phrase slop for bigram phrases">
+
+ <label for="edismax_ps3" title="phrase slop for trigram phrases">ps3</label>
+ <input type="text" ng-model="edismax.ps3" name="ps3" id="edismax_ps3" title="phrase slop for trigram phrases">
+
+ <label for="edismax_boost" title="multiplicative boost function">boost</label>
+ <input type="text" ng-model="edismax.boost" name="boost" id="edismax_boost" title="multiplicative boost function">
+
+ <label for="edismax_stopwords" class="checkbox" title="remove stopwords from mandatory 'matching' component">
+ <input type="checkbox" ng-model="edismax.stopwords" name="stopwords" id="edismax_stopwords">
+ stopwords
+ </label>
+
+ <label for="edismax_lowercaseOperators" class="checkbox" title="Enable lower-case 'and' and 'or' as operators">
+ <input type="checkbox" ng-model="edismax.lowercaseOperators" name="lowercaseOperators" id="edismax_lowercaseOperators">
+ lowercaseOperators
+ </label>
+
+ </div>
+ </fieldset>
+
+ <fieldset class="hl optional">
+ <legend>
+ <label for="hl" class="checkbox" title="Enable highlighting.">
+ <input type="checkbox" ng-model="isHighlight" name="hl" id="hl" value="true">
+ hl
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isHighlight">
+
+ <label for="hl_fl" title="Fields to highlight on.">hl.fl</label>
+ <input type="text" ng-model="hl['hl.fl']" name="hl.fl" id="hl_fl" value="" title="Fields to highlight on.">
+
+ <label for="hl_simple_pre">hl.simple.pre</label>
+ <input type="text" ng-model="hl['hl.simple.pre']" name="hl.simple.pre" id="hl_simple_pre" value="<em>">
+
+ <label for="hl_simple_post">hl.simple.post</label>
+ <input type="text" ng-model="hl['hl.simple.post']" name="hl.simple.post" id="hl_simple_post" value="</em>">
+
+ <label for="hl_requireFieldMatch" class="checkbox">
+ <input type="checkbox" ng-model="hl['hl.requireFieldMatch']" name="hl.requireFieldMatch" id="hl_requireFieldMatch" value="true">
+ hl.requireFieldMatch
+ </label>
+
+ <label for="hl_usePhraseHighlighter" class="checkbox">
+ <input type="checkbox" ng-model="hl['usePhraseHighLighter']" name="hl.usePhraseHighlighter" id="hl_usePhraseHighlighter" value="true">
+ hl.usePhraseHighlighter
+ </label>
+
+ <label for="hl_highlightMultiTerm" class="checkbox">
+ <input type="checkbox" ng-model="hl['hightlightMultiTerm']" name="hl.highlightMultiTerm" id="hl_highlightMultiTerm" value="true">
+ hl.highlightMultiTerm
+ </label>
+
+ </div>
+ </fieldset>
+
+ <fieldset class="facet optional">
+ <legend>
+ <label for="facet" class="checkbox" title="Enable faceting.">
+ <input type="checkbox" ng-model="isFacet" name="facet" id="facet">
+ facet
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isFacet">
+
+ <label for="facet_query">facet.query</label>
+ <textarea ng-model="facet['facet.query']" name="facet.query" id="facet_query"></textarea>
+
+ <label for="facet_field">facet.field</label>
+ <input type="text" ng-model="facet['facet.field']" name="facet.field" id="facet_field">
+
+ <label for="facet_prefix">facet.prefix</label>
+ <input type="text" ng-model="facet['facet.prefix']" name="facet.prefix" id="facet_prefix">
+
+ </div>
+ </fieldset>
+
+ <fieldset class="spatial optional">
+ <legend>
+ <label for="spatial" class="checkbox" title="Show spatial options">
+ <input type="checkbox" ng-model="isSpatial" name="spatial" id="spatial">
+ spatial
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isSpatial">
+
+ <label for="pt">pt</label>
+ <input type="text" ng-model="spatial.pt" name="pt" id="pt">
+
+ <label for="sfield">sfield</label>
+ <input type="text" ng-model="spatial.sfield" name="sfield" id="sfield">
+
+ <label for="d">d</label>
+ <input type="text" ng-model="spatial.d" name="d" id="d">
+
+ </div>
+ </fieldset>
+
+ <fieldset class="spellcheck optional">
+ <legend>
+ <label for="spellcheck" class="checkbox" title="Enable spellchecking.">
+ <input type="checkbox" ng-model="isSpellcheck" name="spellcheck" id="spellcheck">
+ spellcheck
+ </label>
+ </legend>
+ <div class="fieldset" ng-show="isSpellcheck">
+
+ <label for="spellcheck_build" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.build']" name="spellcheck.build" id="spellcheck_build" value="true">
+ spellcheck.build
+ </label>
+
+ <label for="spellcheck_reload" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.reload']" name="spellcheck.reload" id="spellcheck_reload" value="true">
+ spellcheck.reload
+ </label>
+
+ <label for="spellcheck_q">spellcheck.q</label>
+ <input type="text" ng-model="spellcheck['spellcheck.q']" name="spellcheck.q" id="spellcheck_q">
+
+ <label for="spellcheck_dictionary">spellcheck.dictionary</label>
+ <input type="text" ng-model="spellcheck['spellcheck.dictionary']" name="spellcheck.dictionary" id="spellcheck_dictionary">
+
+ <label for="spellcheck_count">spellcheck.count</label>
+ <input type="text" ng-model="spellcheck['spellcheck.count']" name="spellcheck.count" id="spellcheck_count">
+
+ <label for="spellcheck_onlyMorePopular" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.onlyMorePopular']" name="spellcheck.onlyMorePopular" id="spellcheck_onlyMorePopular" value="true">
+ spellcheck.onlyMorePopular
+ </label>
+
+ <label for="spellcheck_extendedResults" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.extendedResults']" name="spellcheck.extendedResults" id="spellcheck_extendedResults" value="true">
+ spellcheck.extendedResults
+ </label>
+
+ <label for="spellcheck_collate" class="checkbox">
+ <input type="checkbox" ng-model="spellcheck['spellcheck.collate']" name="spellcheck.collate" id="spellcheck_collate" value="true">
+ spellcheck.collate
+ </label>
+
+ <label for="spellcheck_maxCollations">spellcheck.maxCollations</label>
+ <input type="text" ng-model="spellcheck['spellcheck.maxCollations']" name="spellcheck.maxCollations" id="spellcheck_maxCollations">
+
+ <label for="spellcheck_maxCollationTries">spellcheck.maxCollationTries</label>
+ <input type="text" ng-model="spellcheck['spellcheck.maxCollationTries']" name="spellcheck.maxCollationTries" id="spellcheck_maxCollationTries">
+
+ <label for="spellcheck_accuracy">spellcheck.accuracy</label>
+ <input type="text" ng-model="spellcheck['spellcheck.accuracy']" name="spellcheck.accuracy" id="spellcheck_accuracy">
+ </div>
+
+ </fieldset>
+
+
+ <button type="submit" ng-click="doQuery()">Execute Query</button>
+ </form>
+ </div>
+
+ <div id="result">
+
+ <a ng-show="response.data" id="url" class="address-bar" ng-href="{{url}}">{{hostPortContext}}{{url}}</a>
+
+ <div id="response">
+ <pre class="syntax language-{{lang}}"><code ng-bind-html="response.data | highlight:lang | unsafe"></code></pre>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html b/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html
new file mode 100644
index 000000000..b3d668422
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/replication.html
@@ -0,0 +1,239 @@
+<!--
+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 id="replication" class="clearfix" ng-class="{replicating:settings.isReplicating}">
+
+ <div id="frame">
+
+ <div id="error" ng-show="progress.ERROR">{{ progress.ERROR }}</div>
+
+ <div class="replicating block" ng-show="settings.isReplicating">
+
+ <div id="progress">
+
+ <div id="start"><div class="info">
+
+ <span>{{progress.replicationStartTime}}</span>
+
+ </div></div>
+
+ <div id="speed"><div class="info">
+
+ <span>5.1 MB</span>/s
+
+ </div></div>
+
+ <div id="bar">
+
+ <div id="bar-info"><div class="info">
+
+ <div class="files"><span>{{progress.numFilesToDownload}}</span> File<span ng-show="progress.numFilesToDownload&gt;1">s</span></div>
+ <div class="size"><span>{{progress.bytesToDownload}}</span></div>
+
+ </div></div>
+
+ <div id="eta"><div class="info">
+
+ ETA: <span>{{progress.timeRemaining | readableSeconds }}</span>
+
+ </div></div>
+
+ <div id="done" style="width: {{progress.totalPercentWidth}}">
+
+ <div class="percent">
+
+ <span>{{progress.totalPercent}}</span>%
+
+ </div>
+
+ <div id="done-info"><div class="info">
+
+ <div class="files"><span>{{progress.numFilesDownloaded}}</span> File<span ng-show="progress.numFilesDownloaded&gt;1">s</span></div>
+ <div class="size"><span>{{progress.bytesDownloaded}}</span></div>
+
+ </div></div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="current-file" class="clearfix">
+
+ <div class="label"><span class="loader">Current File:</span></div>
+ <div class="file">{{progress.currentFile}}</div>
+ <div class="progress">
+ <span class="done">{{progress.currentFileSizeDownloaded}}</span> / <span class="total">{{progress.currentFileSize}}</span> [<span class="percent">{{progress.currentFileSizePercent}}</span>%]
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="iterations" class="slaveOnly block clearfix" ng-show="isSlave">
+
+ <div class="label"><span class="">Iterations:</span></div>
+ <div class="iterations" ng-show="iterations && showIterations">
+ <ul>
+ <li class="{{iteration.status}}" ng-class="{latest:iteration.latest}" ng-repeat="iteration in iterations |limitTo:iterationCount">{{iteration.date}}</li>
+ </ul>
+ <span ng-show="iterations.length&gt;1">
+ <a ng-show="iterationCount==1" ng-click="showIterations()"><span class="expand">Show all Iterations</span></a>
+ <a ng-show="iterationCount&gt;1" ng-click="hideIterations()"><span class="collapse">Hide past Iterations</span></a>
+ </span>
+
+ </div>
+
+ </div>
+
+ <div id="details" class="block clearfix">
+
+ <table border="0" cellspacing="0" cellpadding="0">
+
+ <thead>
+
+ <tr>
+
+ <td><span>Index</span></td>
+ <th>Version</th>
+ <th><abbr title="Generation">Gen</abbr></th>
+ <th>Size</th>
+
+ </tr>
+
+ </thead>
+ <tbody>
+
+ <tr class="masterSearch">
+
+ <th>Master (Searching)</th>
+ <td class="version" ng-class="{diff:versions.changedVersion}">
+ <div>{{versions.masterSearch.version}}</div>
+ </td>
+ <td class="generation" ng-class="{diff:versions.changedGeneration}">
+ <div>{{versions.masterSearch.generation}}</div>
+ </td>
+ <td class="size">
+ <div>{{versions.masterSearch.size}}</div>
+ </td>
+
+ </tr>
+
+ <tr class="master">
+
+ <th>Master (Replicable)</th>
+ <td class="version" ng-class="{diff:versions.changedVersion}">
+ <div>{{versions.master.version}}</div>
+ </td>
+ <td class="generation" ng-class="{diff:versions.changedGeneration}">
+ <div>{{versions.master.generation}}</div>
+ </td>
+ <td class="size">
+ <div>{{versions.master.size}}</div>
+ </td>
+
+ </tr>
+
+ <tr class="slave slaveOnly" ng-show="isSlave">
+
+ <th>Slave (Searching)</th>
+ <td class="version" ng-class="{diff:versions.changedVersion}">
+ <div>{{versions.slave.version}}</div>
+ </td>
+ <td class="generation" ng-class="{diff:versions.changedGeneration}">
+ <div>{{versions.slave.generation}}</div>
+ </td>
+ <td class="size">
+ <div>{{versions.slave.size}}</div>
+ </td>
+
+ </tr>
+
+ </tbody>
+
+ </table>
+
+ </div>
+
+ <div id="settings" class="settings block clearfix slaveOnly" ng-show="isSlave">
+
+ <div class="label"><span>Settings:</span></div>
+ <ul>
+ <li class="masterUrl" ng-show="settings.masterUrl">
+ <dl class="clearfix">
+ <dt>master url:</dt>
+ <dd>{{settings.masterUrl}}</dd>
+ </dl>
+ </li>
+ <li class="isPollingDisabled"><dl class="clearfix">
+ <dt>polling enable:</dt>
+ <dd class="ico" ng-class="{'ico-0':settings.isPollingDisabled, 'ico-1':!settings.isPollingDisabled}">
+ <span ng-show="settings.pollInterval">(interval: {{settings.pollInterval}})</span>&nbsp;
+ </dd>
+ </dl></li>
+ </ul>
+
+ </div>
+
+ <div id="master-settings" class="settings block clearfix">
+
+ <div class="label"><span>Settings (Master):</span></div>
+ <ul>
+ <li class="replicationEnabled"><dl class="clearfix">
+ <dt>replication enable:</dt>
+ <dd class="ico" ng-class="{'ico-0':!master.replicationEnabled, 'ico-1':master.replicationEnabled}">&nbsp;</dd>
+ </dl></li>
+ <li class="replicateAfter"><dl class="clearfix">
+ <dt>replicateAfter:</dt>
+ <dd>{{master.replicateAfter}}</dd>
+ </dl></li>
+ <li class="confFiles" ng-show="master.files"><dl class="clearfix">
+ <dt>confFiles:</dt>
+ <dd><span ng-repeat="file in master.files"><attr title="{{file.title}}">{{file.name}}</attr>{{ $last ? '' :', '}}</span></dd>
+ </dl></li>
+ </ul>
+
+ </div>
+
+ </div>
+
+ <div id="navigation">
+
+ <div class="timer" ng-show="isSlave && !settings.isPollingDisabled &&!settings.isReplicating">
+
+ <p>Next Run: <span class="approx" ng-show="settings.isApprox">~</span><span class="tick">{{settings.tick | readableSeconds}}</span></p>
+ <small ng-show="settings.nextExecutionAt">{{settings.nextExecutionAt}}</small>
+ </div>
+
+ <button class="refresh-status" ng-click="refresh()"><span>Refresh Status</span></button>
+
+ <div class="slaveOnly" ng-show="isSlave">
+ <button class="optional replicate-now primary" ng-click="execute('fetchindex')" ng-show="!settings.isReplicating"><span>Replicate now</span></button>
+ <button class="optional abort-replication warn" ng-click="execute('abortfetch')" ng-show="settings.isReplicating"><span>Abort Replication</span></button>
+
+ <button class="optional disable-polling" ng-click="execute('disablepoll')" ng-show="!settings.isPollingDisabled"><span>Disable Polling</span></button>
+ <button class="optional enable-polling" ng-click="execute('enablepoll')" ng-show="settings.isPollingDisabled"><span>Enable Polling</span></button>
+ </div>
+
+ <div class="masterOnly" ng-show="!isSlave">
+ <button class="optional disable-replication warn" ng-click="execute('disablereplication')" ng-show="master.replicationEnabled"><span>Disable Replication</span></button>
+ <button class="optional enable-replication warn" ng-click="execute('enablereplication')" ng-show="!master.replicationEnabled"><span>Enable Replication</span></button>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html b/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html
new file mode 100644
index 000000000..e94b6dab4
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/schema.html
@@ -0,0 +1,455 @@
+<!--
+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 id="schema" class="loaded">
+
+ <div class="clearfix">
+
+ <div id="frame">
+ <div id="actions" class="actions clearfix" ng-show="isSchemaUpdatable">
+ <button id="addField" class="action" ng-click="toggleAddField()"><span>Add Field</span></button>
+ <button id="addDynamicField" class="action" ng-click="toggleAddDynamicField()"><span>Add Dynamic Field</span></button>
+ <button id="addCopyField" class="action" ng-click="toggleAddCopyField()"><span>Add Copy Field</span></button>
+
+ <div class="action add" data-rel="add" ng-show="showAddField" escape-pressed="hideAll()">
+
+ <p class="clearfix"><label for="add_name">name:</label>
+ <input type="text" id="add_name" ng-model="newField.name" focus-when="showAddField" placeholder="enter a field name"></p>
+
+ <p class="clearfix"><label for="add_type">field type:</label>
+ <select chosen type="text" id="add_type" ng-model="newField.type" ng-options="type for type in types"></select>
+ </p>
+
+ <p class="clearfix" ng-show="adding=='field'"><label for="add_default">default:</label>
+ <input type="text" id="add_default" ng-model="newField.default" placeholder="enter a default value if needed"></p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_stored">
+ <input type="checkbox" ng-model="newField.stored" id="add_stored" title="Full field should be stored in index." ng-true-value="'true'" ng-false-value="'false'">
+ stored
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_indexed">
+ <input type="checkbox" ng-model="newField.indexed" id="add_indexed" title="Field should be indexed." ng-true-value="'true'" ng-false-value="'false'">
+ indexed
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_uninvertible">
+ <input type="checkbox" ng-model="newField.uninvertible" id="add_uninvertible" title="Field should be uninvertible, it is generally recomended to use docValues instead." ng-true-value="'true'" ng-false-value="'false'">
+ uninvertible
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_docValues">
+ <input type="checkbox" ng-model="newField.docValues" id="add_docValues" title="DocValues should be stored for the field." ng-true-value="'true'" ng-false-value="'false'">
+ docValues
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_multiValued">
+ <input type="checkbox" ng-model="newField.multiValued" id="add_multiValued" title="Multiple values are allowed for this field." ng-true-value="'true'" ng-false-value="'false'">
+ multiValued
+ </label>
+ </p>
+
+ <p class="clearfix" ng-show="adding=='field'">
+ <label class="checkbox" for="add_required">
+ <input type="checkbox" ng-model="newField.required" id="add_required" title="Field must be provided for all documents." ng-true-value="'true'" ng-false-value="'false'">
+ required
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <a ng-click="showOmit=!showOmit">
+ <span class="add_showhide" ng-hide="showOmit">Show omit options</span>
+ <span class="add_showhide open" ng-show="showOmit">Hide omit options</span>
+ </a>
+ </p>
+
+ <div ng-show="showOmit">
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_omitNorms">
+ <input type="checkbox" ng-model="newField.omitNorms" id="add_omitNorms" title="Full field should be omitNorms in index." ng-true-value="'true'" ng-false-value="'false'">
+ omitNorms
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_omitTermFreqAndPositions">
+ <input type="checkbox" ng-model="newField.omitTermFreqAndPositions" id="add_omitTermFreqAndPositions" title="Full field should be omitTermFreqAndPositions in index." ng-true-value="'true'" ng-false-value="'false'">
+ omitTermFreqAndPositions
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_omitPositions">
+ <input type="checkbox" ng-model="newField.omitPositions" id="add_omitPositions" title="Full field should be omitPositions in index." ng-true-value="'true'" ng-false-value="'false'">
+ omitPositions
+ </label>
+ </p>
+ </div>
+
+ <p class="clearfix">
+ <a ng-click="showTermVectors=!showTermVectors">
+ <span class="add_showhide" ng-hide="showTermVectors">Show term vector options</span>
+ <span class="add_showhide open" ng-show="showTermVectors">Hide term vector options</span>
+ </a>
+ </p>
+ <div ng-show="showTermVectors">
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_termVectors">
+ <input type="checkbox" ng-model="newField.termVectors" id="add_termVectors" title="Full field should be termVectors in index." ng-true-value="'true'" ng-false-value="'false'">
+ termVectors
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_termPositions">
+ <input type="checkbox" ng-model="newField.termPositions" id="add_termPositions" title="Full field should be termPositions in index." ng-true-value="'true'" ng-false-value="'false'">
+ termPositions
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_termOffsets">
+ <input type="checkbox" ng-model="newField.termOffsets" id="add_termOffsets" title="Full field should be termOffsets in index." ng-true-value="'true'" ng-false-value="'false'">
+ termOffsets
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_termPayloads">
+ <input type="checkbox" ng-model="newField.termPayloads" id="add_termPayloads" title="Full field should be termPayloads in index." ng-true-value="'true'" ng-false-value="'false'">
+ termPayloads
+ </label>
+ </p>
+
+ </div>
+
+ <p class="clearfix">
+ <a ng-click="showSort=!showSort">
+ <span class="add_showhide" ng-hide="showSort">Show sort options</span>
+ <span class="add_showhide open" ng-show="showSort">Show sort options</span>
+ </a>
+ </p>
+ <div ng-show="showSort">
+ <p class="clearfix">
+ <label class="checkbox" for="add_sortMissingFirst">
+ <input type="checkbox" ng-model="newField.sortMissingFirst" id="add_sortMissingFirst" title="Full field should be sortMissingFirst in index." ng-true-value="'true'" ng-false-value="'false'">
+ sortMissingFirst
+ </label>
+ </p>
+
+ <p class="clearfix">
+ <label class="checkbox" for="add_sortMissingLast">
+ <input type="checkbox" ng-model="newField.sortMissingLast" id="add_sortMissingLast" title="Full field should be sortMissingLast in index." ng-true-value="'true'" ng-false-value="'false'">
+ sortMissingLast
+ </label>
+ </p>
+
+ </div>
+
+ <div ng-repeat="error in addErrors" ng-show="addErrors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button ng-show="adding=='field'" type="submit" class="submit" ng-class="{success: added}" ng-click="addField()"><span>Add Field</span></button>
+ <button ng-show="adding=='dynamicField'" type="submit" class="submit" ng-class="{success: added}" ng-click="addDynamicField()"><span>Add Dynamic Field</span></button>
+ <button type="reset" class="reset" ng-click="hideAll()"><span>Cancel</span></button>
+ </p>
+
+
+
+ </div>
+
+ <div class="action add" data-rel="add" ng-show="showAddCopyField" escape-pressed="hideAll()">
+
+ <form>
+
+ <p class="clearfix"><label for="add_source">source:</label>
+ <input type="text" id="add_source" ng-model="copyField.source" focus-when="showAddCopyField" placeholder="specify your source field or pattern"></p>
+
+ <p class="clearfix"><label for="add_dest">destination:</label>
+ <input type="text" id="add_dest" ng-model="copyField.dest" placeholder="specify your destination field or pattern"></p>
+
+ <div ng-repeat="error in addCopyFieldErrors" ng-show="addCopyFieldErrors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button type="submit" class="submit" ng-class="{success: added}" ng-click="addCopyField()"><span>Add CopyField</span></button>
+ <button type="reset" class="reset" ng-click="hideAll()"><span>Cancel</span></button>
+ </p>
+
+ </form>
+
+ </div>
+ </div>
+
+ <div id="data">
+
+ <div id="field">
+
+ <div class="field-options" ng-show="showing">
+
+ <div class="block head">
+ <h2>
+ <span class="type">{{selectedType}}</span>:
+ <span class="name">{{name}}</span>
+ </h2>
+ </div>
+
+ <div class="partial" ng-show="display.partialState">
+
+ <p>Because your Index is empty, we do not have enough Information about this Field</p>
+
+ </div>
+
+ <dl class="options clearfix">
+
+ <dt class="field-type" ng-show="analysis.data.className">Field-Type:</dt>
+ <dd class="field-type" ng-show="analysis.data.className">{{analysis.data.className}}</dd>
+
+ <dt class="similarity" ng-show="display.similarity.className">Similarity:</dt>
+ <dd class="similarity" ng-show="display.similarity.className" data-tip="{{ display.similarity.className }}">{{ display.similarity.details }}</dd>
+
+ <dt class="position-increment-gap" ng-show="display.positionIncrementGap"><abbr title="Position Increment Gap">PI Gap</abbr>:</dt>
+ <dd class="position-increment-gap" ng-show="display.positionIncrementGap">{{ display.positionIncrementGap }}</dd>
+
+ <dt class="docs" ng-show="display.docs">Docs:</dt>
+ <dd class="docs" ng-show="display.docs"><a href="{{display.docsUrl}}">{{display.docs | number}}</a></dd>
+
+ <dt class="distinct" ng-show="display.distinct">Distinct:</dt>
+ <dd class="distinct" ng-show="display.distinct">{{display.distinct}}</dd>
+
+ </dl>
+
+ <table class="flags" cellspacing="0" cellpadding="0" border="0" ng-show="display.columns.length!=0">
+
+ <thead>
+
+ <tr>
+ <td>Flags:</td>
+ <th ng-repeat="key in display.columns">{{key.name}}</th>
+
+ </tr>
+
+ </thead>
+
+ <tbody>
+ <tr ng-repeat="row in display.rows track by row.name">
+ <th>{{row.name}}</th>
+ <td colspan="2" class="text" ng-show="row.comment">{{row.comment}}</td>
+ <td ng-repeat="cell in row.cells"
+ ng-class="{'check':cell.value}">
+ <span ng-show="cell.value">√</span>
+ <span ng-show="!cell.value">&nbsp;</span>
+ </td>
+ </tr>
+ </tbody>
+
+ </table>
+
+ <ul class="analyzer">
+ <li class="clearfix {{analyzer.key}}" ng-class="{open: analyzer.show}" ng-repeat="analyzer in analysis.analyzers">
+
+ <p><a class="analysis" ng-href="#/{{core}}/analysis?{{analysis.query}}"><span>{{analyzer.name}}&nbsp;Analyzer:</span></a></p>
+ <dl>
+ <dt><a ng-click="toggleAnalyzer(analyzer)" class="toggle">{{analyzer.detail.className}}</a></dt>
+ </dl>
+ <ul ng-show="analyzer.show">
+ <li class="clearfix {{componentType.key}} data" ng-repeat="componentType in analyzer.detail.componentTypes" ng-show="componentType.components">
+ <p>{{componentType.label}}:</p>
+ <dl>
+ <dt ng-repeat-start="component in componentType.components">{{component.className}}</dt>
+ <dd ng-repeat-end ng-repeat="arg in component.args"
+ ng-class="{'ico-1': arg.booleanValue, 'ico-0': arg.booleanValue==false}">
+ {{arg.name}}<span ng-show="arg.value">: {{arg.value}}</span>
+ </dd>
+ </dl>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ </div>
+
+ <div class="terminfo-holder loaded clearfix" ng-class="{disabled: noTermData}" ng-show="is.field && !display.partialState">
+
+ <div class="trigger">
+
+ <button class="submit" ng-click="toggleTerms()"><span ng-class="{loader:isLoadingTerms}">Load Term Info</span></button>
+ <br/>
+ <span ng-show="isCloudEnabled">N.B. Loaded from a single core - not from the whole collection.</span>
+
+ <a ng-show="showTerms" ng-click="toggleAutoload()" ng-class="{on:isAutoload}" class="autoload" title="Automatically load Term Info?"><span>Autoload</span></a>
+
+ </div>
+
+ <p ng-show="showTerms && noTerms" class="status">Sorry, no Term Info available :(</p>
+
+ <div ng-show="showTerms && termInfo.topTerms" class="topterms-holder">
+
+ <form>
+ <p class="head">
+ <input type="text" ng-model="topTermsCount" ng-change="loadTermInfo()">
+ <a class="max-holder" ng-click="loadAllTopTerms()" title="Load all Top-Terms">/<span class="max">{{termInfo.maxTerms | number}}</span></a> Top-Terms:
+ <a id="query_link" href="#/{{core}}/query?q={{name}}:[* TO *]"><span>Query</span>&nbsp;</a>
+ </p>
+ </form>
+
+ <ul>
+ <li class="clearfix" ng-repeat="countGroup in termInfo.topTerms">
+ <p><span>{{countGroup.count}}</span></p>
+ <ul>
+ <li ng-repeat="term in countGroup.terms" ng-class="{odd:$odd}"><a ng-href="#/{{core}}/query?q=%7B!term+f%3D{{name | uriencode}}%7D{{term | uriencode}}">{{term}}</a></li>
+ </ul>
+ </li>
+
+ </ul>
+
+ </div>
+
+ <div ng-show="showTerms && termInfo.histogram" class="histogram-holder">
+
+ <p class="head">Histogram:</p>
+ <ul>
+ <li ng-repeat="row in termInfo.histogram" ng-class="{odd:$odd}">
+ <dl class="clearfix" style="width: {{(( row.value / termInfo.histogramMax ) * 100 )}}%;">
+ <dt><span>{{ row.key | number}}</span></dt>
+ <dd><span>{{ row.value | number }}</span></dd>
+ </dl>
+ </li>
+
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="related">
+ <select id="type_or_name"
+ ng-model="fieldOrType"
+ chosen
+ data-placeholder="Please select ..."
+ ng-change="selectFieldOrType()"
+ ng-options="f.value as f.label group by f.group for f in fieldsAndTypes"></select>
+
+ <dl id="f-df-t">
+
+ <dt class="field" ng-class="{active: selectedType=='Field'}" ng-show="leftbar.fields">Field</dt>
+ <dd class="field" ng-class="{active: selectedType=='Field'}" ng-repeat="field in leftbar.fields"><a href="#/{{core}}/schema?field={{field}}">{{field}}</a></dd>
+
+ <dt class="copyfield" ng-show="leftbar.copyFieldSources">Copied from</dt>
+ <dd class="copyfield" ng-repeat="field in leftbar.copyFieldSources">
+ <div class="clearfix" ng-hide="isSchemaUpdatable">
+ <a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
+ </div>
+ <div class="clearfix updatable" ng-show="isSchemaUpdatable">
+ <a style="float:left;width:80%" href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
+ <span ng-click="toggleDeleteCopyField(field)" class="rem">&nbsp;</span>
+ </div>
+ <div class="action delete" ng-show="field.show">
+ <form class="delete">
+
+ <p class="clearfix"><em>Are you sure you want to delete this CopyField?</em></p>
+ <div ng-repeat="error in field.errors" ng-show="field.errors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: field.deleted}" ng-click="deleteCopyField(field, field.name, name)"><span>Delete</span></button>
+ <button type="reset" class="reset" ng-click="toggleDeleteCopyField(field)"><span>Cancel</span></button>
+ </p>
+ </form>
+ </div>
+ </dd>
+
+ <dt class="copyfield" ng-show="leftbar.copyFieldDests">Copied to</dt>
+ <dd class="copyfield" ng-repeat="field in leftbar.copyFieldDests">
+ <div class="clearfix" ng-hide="isSchemaUpdatable">
+ <a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
+ </div>
+ <div class="clearfix updatable" ng-show="isSchemaUpdatable">
+ <a href="#/{{core}}/schema?field={{field.name}}">{{field.name}}</a>
+ <span ng-click="toggleDeleteCopyField(field)" class="rem">&nbsp;</span>
+ </div>
+ <div class="action delete" ng-show="field.show">
+ <form class="delete">
+
+ <p class="clearfix"><em>Are you sure you want to delete this CopyField?</em></p>
+ <div ng-repeat="error in field.errors" ng-show="field.errors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: field.deleted}" ng-click="deleteCopyField(field, name, field.name)"><span>Delete</span></button>
+ <button type="reset" class="reset" ng-click="toggleDeleteCopyField(field)"><span>Cancel</span></button>
+ </p>
+ </form>
+ </div>
+ </dd>
+ <dt class="dynamic-field" ng-class="{active: selectedType=='Dynamic Field'}" ng-show="leftbar.dynamicFields">Dynamic Field {{dynamicFields}} / {{dynamicFields.length()}}</dt>
+ <dd class="dynamic-field" ng-class="{active: selectedType=='Dynamic Field'}" ng-repeat="field in leftbar.dynamicFields"><a href="#/{{core}}/schema?dynamic-field={{field}}">{{field}}</a></dd>
+
+ <dt class="type" ng-class="{active: selectedType=='Type'}" ng-show="leftbar.types">Type</dt>
+ <dd class="type" ng-class="{active: selectedType=='Type'}" ng-repeat="type in leftbar.types"><a href="#/{{core}}/schema?type={{type}}">{{type}}</a></dd>
+
+ <dt></dt>
+ <dd class="active delete-field" ng-show="isSchemaUpdatable &amp;&amp; leftbar.fields &amp;&amp;!showDelete"><button ng-click="toggleDelete()"><span>delete field</span></button></dd>
+ <dd class="active delete-field" ng-show="isSchemaUpdatable &amp;&amp; leftbar.dynamicFields &amp;&amp;!showDelete"><button ng-click="toggleDelete()"><span>delete dynamic field</span></button></dd>
+
+ <div class="action delete" ng-show="showDelete">
+
+ <form class="delete">
+
+ <p class="clearfix"><em>Are you sure you want to delete this {{selectedType}}?</em></p>
+ <div ng-repeat="error in deleteErrors" ng-show="deleteErrors" class="clearfix note error">
+ <span>{{error}}</span></div>
+
+ <p class="clearfix buttons">
+ <button class="submit" ng-class="{success: deleted}" ng-click="delete()"><span>Delete</span></button>
+ <button type="reset" class="reset" ng-click="toggleDelete()"><span>Cancel</span></button>
+ </p>
+ </form>
+ </div>
+ </dl>
+
+ <dl class="ukf-dsf">
+
+ <dt class="unique-key-field" ng-class="{active: isUniqueKeyField}" ng-show="uniqueKeyField">Unique Key Field</dt>
+ <dd class="unique-key-field" ng-class="{active: isUniqueKeyField}"><a ng-href="#/{{core}}/schema?field={{uniqueKeyField}}">{{uniqueKeyField}}</a></dd>
+
+ <dt class="similarity" ng-class="{active: similarity.className}">Global Similarity:</dt>
+ <dd class="similarity" ng-class="{active: similarity.className}" data-tip="{{ similarity.className }}">{{ similarity.details }}</dd>
+
+ </dl>
+
+ </div>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html b/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html
new file mode 100644
index 000000000..e1174aba5
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/segments.html
@@ -0,0 +1,99 @@
+<!--
+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 id="segments">
+ <div class="clearfix">
+
+ <div class="block fieldlist" id="statistics">
+
+ <h2><span>Segments</span></h2>
+ <p id="auto-refresh"><a ng-click="toggleAutoRefresh()" ng-class="{on:autorefresh}">Auto-Refresh</a></p>
+ <a class="reload" ng-click="refresh()"><span>reload</span></a>
+
+ <div class="message-container">
+ <div class="message"></div>
+ </div>
+
+ <div class="content">
+
+ <div id="result">
+
+ <div id="response">
+
+ <div class="segments-holder">
+
+ <ul>
+ <li>
+ <dl class="clearfix" style="width:100%;">
+ <dt>
+ <div>Size</div>
+ </dt>
+ <dd>
+ <div class="start">0</div>
+ <div class="w5" ng-repeat="x in xaxis">
+ <span ng-show="x&gt;0.001">{{x.value}}</span>
+ <span ng-hide="x&gt;0.001">&nbsp;</span>
+ </div>
+ <div class="end">{{segmentMB | number}} MB</div>
+ </dd>
+ </dl>
+ </li>
+ <li ng-repeat="segment in segments">
+ <dl class="clearfix" ng-style="{width: segment.totalSize+'%'}">
+ <dt>
+ <div>{{ segment.name }}</div>
+ </dt>
+ <dd>
+ <div class="live" ng-class="{'merge-candidate':segment.mergeCandidate}"
+ ng-style="{width: segment.aliveDocSize+'%'}">&nbsp;</div>
+ <div class="tooltip">
+ <div>Segment <b>{{segment.name}}</b>:</div>
+ <div class="label">#docs:</div>
+ <div>{{ segment.size | number }}</div>
+ <div class="label">#dels:</div>
+ <div>{{ segment.delCount | number }}</div>
+ <div class="label">size:</div>
+ <div>{{ segment.sizeInBytes | number }} bytes</div>
+ <div class="label">age:</div>
+ <div>{{ segment.age }}</div>
+ <div class="label">source:</div>
+ <div>{{ segment.source }}</div>
+ </div>
+ <div class="deleted" ng-show="segment.deletedDocSize"
+ style="width: {{ segment.deletedDocSize }}%; margin-left:{{ segment.aliveDocSize}}%;">
+ &nbsp;</div>
+ </dd>
+ </dl>
+ </li>
+ <li>
+ <dl>
+ <dt></dt>
+ <dd>Deletions: {{ deletionsPercentage }}%</dd>
+ </dl>
+ </li>
+ </ul>
+
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html b/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html
new file mode 100644
index 000000000..683cf76d9
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/stream.html
@@ -0,0 +1,64 @@
+<!--
+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 id="stream" class="clearfix">
+
+ <div id="form">
+ <form>
+ <label for="expr" title="The expression string">
+ Streaming Expression (expr)
+ </label>
+ <textarea name="expr" ng-model="expr" id="expr" title="The expression string.">search(....)</textarea>
+
+ <button type="submit" ng-click="doStream()">Execute</button>
+ <input type="checkbox" ng-model="doExplanation" name="doExplanation" id="doExplanation" value="true">
+ <label for="explain" class="checkbox" title="Enable Explanation." ng-click="doExplanation = !doExplanation">
+ with explanation
+ </label>
+
+ </form>
+ </div>
+
+ <div id="result">
+
+ <a ng-show="response.data" id="url" class="address-bar" ng-href="{{url}}">{{hostPortContext}}{{url}}</a>
+
+ <div ng-show="showExplanation" id="explanation" class="clearfix">
+ <div id="frame">
+ <div explanation-graph id="explanation-content" data="explanationData" depth="depth" leaf-count="leafCount" class="content clearfix" ng-show="showGraph">
+ <div id="legend">
+ <svg width="100%" height="15">
+ <g transform="translate(5,10)" class="stream-decorator"><circle r="4.5"></circle></g>
+ <g transform="translate(15,14)"><text>Stream Decorator</text></g>
+ <g transform="translate(140,10)" class="stream-source"><circle r="4.5"></circle></g>
+ <g transform="translate(150,14)"><text>Stream Source</text></g>
+ <g transform="translate(260,10)" class="graph-source"><circle r="4.5"></circle></g>
+ <g transform="translate(270,14)"><text>Graph Source</text></g>
+ <g transform="translate(375,10)" class="datastore"><circle r="4.5"></circle></g>
+ <g transform="translate(385,14)"><text>Datastore</text></g>
+ </svg>
+ </div>
+ <div id="canvas"></div>
+ </div>
+ </div>
+ </div>
+
+ <div id="response">
+ <pre class="syntax language-json"><code ng-bind-html="response.data | highlight:json | unsafe"></code></pre>
+ </div>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html b/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html
new file mode 100644
index 000000000..f1e6fdeb2
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/threads.html
@@ -0,0 +1,65 @@
+<!--
+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 id="threads" ng-class="showAllStacktraces ? 'expanded' : 'collapsed'">
+
+ <div class="controls">
+ <a ng-click="toggleStacktraces()">
+ <span>{{showAllStacktraces?"Hide":"Show"}} all Stacktraces</span>
+ </a>
+ </div>
+
+ <div id="thread-dump">
+
+ <table border="0" cellpadding="0" cellspacing="0">
+
+ <thead>
+
+ <tr>
+
+ <th class="name">name</th>
+ <th class="time">cpuTime / userTime</th>
+
+ </tr>
+
+ </thead>
+
+ <tbody>
+ <tr ng-repeat="thread in threads" class="{{$odd?'odd':''}} {{thread.lock?'lock':''}} {{thread.stackTrace?'stacktrace':''}} {{thread.state}}">
+ <td class="name">
+ <a title="{{thread.state}}" ng-click="toggleStacktrace(thread)"><span>{{thread.name}} ({{thread.id}})</span></a>
+ <p title="Waiting on" ng-show="thread.lock">{{thread.lock}}</p>
+ <div ng-show="thread.showStackTrace">
+ <ul>
+ <li ng-repeat="trace in thread.stackTrace track by trace.id">{{trace.trace}}</li>
+ </ul>
+ </div>
+ </td>
+ <td class="time">{{thread.cpuTime}}<br>{{thread.userTime}}</td>
+ </tr>
+ </tbody>
+
+ </table>
+
+ </div>
+
+ <div class="controls">
+ <a ng-click="toggleStacktraces()">
+ <span>{{showAllStacktraces?"Hide":"Show"}} all Stacktraces</span>
+ </a>
+ </div>
+
+</div>
diff --git a/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html b/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html
new file mode 100644
index 000000000..51895ab8b
--- /dev/null
+++ b/solr-8.1.1/server/solr-webapp/webapp/partials/unknown.html
@@ -0,0 +1,23 @@
+<!--
+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 id="unknown" class="clearfix">
+
+ <div>
+ Oops, this URL is unknown to us, redirecting you back to Dashboard
+ </div>
+
+</div>