Merge "Add two new dynamic endpoints on gr-file-list"
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.js b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.js
index 12b5aad..d09c942 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.js
+++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.js
@@ -225,6 +225,11 @@
computed: '_computeShowDynamicColumns(_dynamicHeaderEndpoints, ' +
'_dynamicContentEndpoints, _dynamicSummaryEndpoints)',
},
+ _showPrependedDynamicColumns: {
+ type: Boolean,
+ computed: '_computeShowPrependedDynamicColumns(' +
+ '_dynamicPrependedHeaderEndpoints, _dynamicPrependedContentEndpoints)',
+ },
/** @type {Array<string>} */
_dynamicHeaderEndpoints: {
type: Array,
@@ -237,6 +242,14 @@
_dynamicSummaryEndpoints: {
type: Array,
},
+ /** @type {Array<string>} */
+ _dynamicPrependedHeaderEndpoints: {
+ type: Array,
+ },
+ /** @type {Array<string>} */
+ _dynamicPrependedContentEndpoints: {
+ type: Array,
+ },
};
}
@@ -295,18 +308,27 @@
attached() {
super.attached();
pluginLoader.awaitPluginsLoaded().then(() => {
- this._dynamicHeaderEndpoints = pluginEndpoints.getDynamicEndpoints(
- 'change-view-file-list-header');
- this._dynamicContentEndpoints = pluginEndpoints.getDynamicEndpoints(
- 'change-view-file-list-content');
- this._dynamicSummaryEndpoints = pluginEndpoints.getDynamicEndpoints(
- 'change-view-file-list-summary');
+ this._dynamicHeaderEndpoints = pluginEndpoints
+ .getDynamicEndpoints('change-view-file-list-header');
+ this._dynamicContentEndpoints = pluginEndpoints
+ .getDynamicEndpoints('change-view-file-list-content');
+ this._dynamicPrependedHeaderEndpoints = pluginEndpoints
+ .getDynamicEndpoints('change-view-file-list-header-prepend');
+ this._dynamicPrependedContentEndpoints = pluginEndpoints
+ .getDynamicEndpoints('change-view-file-list-content-prepend');
+ this._dynamicSummaryEndpoints = pluginEndpoints
+ .getDynamicEndpoints('change-view-file-list-summary');
if (this._dynamicHeaderEndpoints.length !==
this._dynamicContentEndpoints.length) {
console.warn(
'Different number of dynamic file-list header and content.');
}
+ if (this._dynamicPrependedHeaderEndpoints.length !==
+ this._dynamicPrependedContentEndpoints.length) {
+ console.warn(
+ 'Different number of dynamic file-list header and content.');
+ }
if (this._dynamicHeaderEndpoints.length !==
this._dynamicSummaryEndpoints.length) {
console.warn(
@@ -1432,11 +1454,23 @@
_computeShowDynamicColumns(
headerEndpoints, contentEndpoints, summaryEndpoints) {
return headerEndpoints && contentEndpoints && summaryEndpoints &&
+ headerEndpoints.length &&
headerEndpoints.length === contentEndpoints.length &&
headerEndpoints.length === summaryEndpoints.length;
}
/**
+ * Shows registered dynamic prepended columns iff the 'header', 'content'
+ * endpoints are registered the exact same number of times.
+ */
+ _computeShowPrependedDynamicColumns(
+ headerEndpoints, contentEndpoints) {
+ return headerEndpoints && contentEndpoints &&
+ headerEndpoints.length &&
+ headerEndpoints.length === contentEndpoints.length;
+ }
+
+ /**
* Returns true if none of the inline diffs have been expanded.
*
* @return {boolean}
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.js b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.js
index 600b0bc..cc4e934 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.js
+++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.js
@@ -297,10 +297,22 @@
</style>
<div id="container" on-click="_handleFileListClick">
<div class="header-row row">
+ <!-- endpoint: change-view-file-list-header-prepend -->
+ <template is="dom-if" if="[[_showPrependedDynamicColumns]]">
+ <template
+ is="dom-repeat"
+ items="[[_dynamicPrependedHeaderEndpoints]]"
+ as="headerEndpoint"
+ >
+ <gr-endpoint-decorator name$="[[headerEndpoint]]">
+ </gr-endpoint-decorator>
+ </template>
+ </template>
<div class="path">File</div>
<div class="comments">Comments</div>
<div class="sizeBars">Size</div>
<div class="header-stats">Delta</div>
+ <!-- endpoint: change-view-file-list-header -->
<template is="dom-if" if="[[_showDynamicColumns]]">
<template
is="dom-repeat"
@@ -332,6 +344,23 @@
data-file$="[[_computeFileRange(file)]]"
tabindex="-1"
>
+ <!-- endpoint: change-view-file-list-content-prepend -->
+ <template is="dom-if" if="[[_showPrependedDynamicColumns]]">
+ <template
+ is="dom-repeat"
+ items="[[_dynamicPrependedContentEndpoints]]"
+ as="contentEndpoint"
+ >
+ <gr-endpoint-decorator name="[[contentEndpoint]]">
+ <gr-endpoint-param name="changeNum" value="[[changeNum]]">
+ </gr-endpoint-param>
+ <gr-endpoint-param name="patchRange" value="[[patchRange]]">
+ </gr-endpoint-param>
+ <gr-endpoint-param name="path" value="[[file.__path]]">
+ </gr-endpoint-param>
+ </gr-endpoint-decorator>
+ </template>
+ </template>
<!-- TODO: Remove data-url as it appears its not used -->
<span
data-url="[[_computeDiffURL(change, patchRange, file.__path, editMode)]]"
@@ -433,6 +462,7 @@
file.size_delta)]]
</span>
</div>
+ <!-- endpoint: change-view-file-list-content -->
<template is="dom-if" if="[[_showDynamicColumns]]">
<template
is="dom-repeat"
@@ -537,6 +567,7 @@
-[[_patchChange.deleted]]
</span>
</div>
+ <!-- endpoint: change-view-file-list-summary -->
<template is="dom-if" if="[[_showDynamicColumns]]">
<template
is="dom-repeat"
diff --git a/polygerrit-ui/app/samples/extra-column-on-file-list.js b/polygerrit-ui/app/samples/extra-column-on-file-list.js
new file mode 100644
index 0000000..2e37c01
--- /dev/null
+++ b/polygerrit-ui/app/samples/extra-column-on-file-list.js
@@ -0,0 +1,77 @@
+/**
+ * @license
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed 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.
+ */
+/**
+ * This plugin will an extra column to file list on change page to show
+ * the first character of the path.
+ */
+
+// Header of this extra column
+class ColumnHeader extends Polymer.Element {
+ static get is() { return 'column-header'; }
+
+ static get template() {
+ return Polymer.html`
+ <style>
+ :host {
+ display: block;
+ padding-right: var(--spacing-m);
+ min-width: 5em;
+ }
+ </style>
+ <div>First Char</div>
+ `;
+ }
+}
+
+customElements.define(ColumnHeader.is, ColumnHeader);
+
+// Content of this extra column
+class ColumnContent extends Polymer.Element {
+ static get is() { return 'column-content'; }
+
+ static get properties() {
+ return {
+ path: String,
+ };
+ }
+
+ static get template() {
+ return Polymer.html`
+ <style>
+ :host {
+ display:block;
+ padding-right: var(--spacing-m);
+ min-width: 5em;
+ }
+ </style>
+ <div>[[getStatus(path)]]</div>
+ `;
+ }
+
+ getStatus(path) {
+ return path.charAt(0);
+ }
+}
+
+customElements.define(ColumnContent.is, ColumnContent);
+
+Gerrit.install(plugin => {
+ plugin.registerDynamicCustomComponent(
+ 'change-view-file-list-header-prepend', ColumnHeader.is);
+ plugin.registerDynamicCustomComponent(
+ 'change-view-file-list-content-prepend', ColumnContent.is);
+});
\ No newline at end of file
diff --git a/polygerrit-ui/server.go b/polygerrit-ui/server.go
index 120aff5..c44493d 100644
--- a/polygerrit-ui/server.go
+++ b/polygerrit-ui/server.go
@@ -61,6 +61,7 @@
dirListingMux := http.NewServeMux()
dirListingMux.Handle("/styles/", http.StripPrefix("/styles/", http.FileServer(http.Dir("app/styles"))))
+ dirListingMux.Handle("/samples/", http.StripPrefix("/samples/", http.FileServer(http.Dir("app/samples"))))
dirListingMux.Handle("/elements/", http.StripPrefix("/elements/", http.FileServer(http.Dir("app/elements"))))
dirListingMux.Handle("/behaviors/", http.StripPrefix("/behaviors/", http.FileServer(http.Dir("app/behaviors"))))