Merge "Split off audit/ package from giant server package."
diff --git a/plugins/codemirror-editor b/plugins/codemirror-editor
index 53dccff..318504d 160000
--- a/plugins/codemirror-editor
+++ b/plugins/codemirror-editor
@@ -1 +1 @@
-Subproject commit 53dccff17c029459999ff70ac886b80626af634b
+Subproject commit 318504d0eb74f2f9c2967e9865ace6d5b57638c6
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.html b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.html
index 6ea7cf3..332121f 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.html
@@ -171,10 +171,10 @@
</td>
<td class="cell project"
hidden$="[[isColumnHidden('Project', visibleChangeTableColumns)]]">
- <a class="fullProject" href$="[[_computeProjectURL(change.project)]]">
+ <a class="fullProject" href$="[[_computeProjectURL(change)]]">
[[change.project]]
</a>
- <a class="truncatedProject" href$="[[_computeProjectURL(change.project)]]">
+ <a class="truncatedProject" href$="[[_computeProjectURL(change)]]">
[[_computeTruncatedProject(change.project)]]
</a>
</td>
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
index 259580b..53cc990 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item.js
@@ -122,17 +122,19 @@
return '';
},
- _computeProjectURL(project) {
- return Gerrit.Nav.getUrlForProjectChanges(project, true);
+ _computeProjectURL(change) {
+ return Gerrit.Nav.getUrlForProjectChanges(change.project, true,
+ change.internalHost);
},
_computeProjectBranchURL(change) {
- return Gerrit.Nav.getUrlForBranch(change.branch, change.project);
+ return Gerrit.Nav.getUrlForBranch(change.branch, change.project, null,
+ change.internalHost);
},
_computeTopicURL(change) {
if (!change.topic) { return ''; }
- return Gerrit.Nav.getUrlForTopic(change.topic);
+ return Gerrit.Nav.getUrlForTopic(change.topic, change.internalHost);
},
_computeTruncatedProject(project) {
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
index 81e1034..4fa6ff5 100644
--- a/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
+++ b/polygerrit-ui/app/elements/change-list/gr-change-list-item/gr-change-list-item_test.html
@@ -37,8 +37,10 @@
<script>
suite('gr-change-list-item tests', () => {
let element;
+ let sandbox;
setup(() => {
+ sandbox = sinon.sandbox.create();
stub('gr-rest-api-interface', {
getConfig() { return Promise.resolve({}); },
getLoggedIn() { return Promise.resolve(false); },
@@ -46,6 +48,8 @@
element = fixture('basic');
});
+ teardown(() => { sandbox.restore(); });
+
test('computed fields', () => {
assert.equal(element._computeLabelClass({labels: {}}),
'cell label u-gray-background');
@@ -249,5 +253,25 @@
deletions: 999,
}), 'XL');
});
+
+ test('change params passed to gr-navigation', () => {
+ sandbox.stub(Gerrit.Nav);
+ const change = {
+ internalHost: 'test-host',
+ project: 'test-repo',
+ topic: 'test-topic',
+ branch: 'test-branch',
+ };
+ element.change = change;
+ flushAsynchronousOperations();
+
+ assert.deepEqual(Gerrit.Nav.getUrlForChange.lastCall.args, [change]);
+ assert.deepEqual(Gerrit.Nav.getUrlForProjectChanges.lastCall.args,
+ [change.project, true, change.internalHost]);
+ assert.deepEqual(Gerrit.Nav.getUrlForBranch.lastCall.args,
+ [change.branch, change.project, null, change.internalHost]);
+ assert.deepEqual(Gerrit.Nav.getUrlForTopic.lastCall.args,
+ [change.topic, change.internalHost]);
+ });
});
</script>
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
index 5a56475..1b911e0 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html
@@ -273,6 +273,12 @@
#commitMessageEditor {
min-width: 0;
}
+ .commitMessage {
+ margin-right: 0;
+ }
+ .mainChangeInfo {
+ padding-right: 0;
+ }
}
/* NOTE: If you update this breakpoint, also update the
BREAKPOINT_RELATED_SMALL in the JS */
diff --git a/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.html b/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.html
index e217b4b..dfe5410 100644
--- a/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.html
+++ b/polygerrit-ui/app/elements/core/gr-navigation/gr-navigation.html
@@ -177,13 +177,15 @@
* @param {!string} project The name of the project.
* @param {boolean=} opt_openOnly When true, only search open changes in
* the project.
+ * @param {string=} opt_host The host in which to search.
* @return {string}
*/
- getUrlForProjectChanges(project, opt_openOnly) {
+ getUrlForProjectChanges(project, opt_openOnly, opt_host) {
return this._getUrlFor({
view: Gerrit.Nav.View.SEARCH,
project,
statuses: opt_openOnly ? ['open'] : [],
+ host: opt_host,
});
},
@@ -191,26 +193,30 @@
* @param {string} branch The name of the branch.
* @param {string} project The name of the project.
* @param {string=} opt_status The status to search.
+ * @param {string=} opt_host The host in which to search.
* @return {string}
*/
- getUrlForBranch(branch, project, opt_status) {
+ getUrlForBranch(branch, project, opt_status, opt_host) {
return this._getUrlFor({
view: Gerrit.Nav.View.SEARCH,
branch,
project,
statuses: opt_status ? [opt_status] : undefined,
+ host: opt_host,
});
},
/**
* @param {string} topic The name of the topic.
+ * @param {string=} opt_host The host in which to search.
* @return {string}
*/
- getUrlForTopic(topic) {
+ getUrlForTopic(topic, opt_host) {
return this._getUrlFor({
view: Gerrit.Nav.View.SEARCH,
topic,
statuses: ['open', 'merged'],
+ host: opt_host,
});
},
@@ -267,6 +273,7 @@
patchNum: opt_patchNum,
basePatchNum: opt_basePatchNum,
edit: opt_isEdit,
+ host: change.internalHost || undefined,
});
},
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js
index ea69fc2..edf9f5a 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment.js
@@ -457,7 +457,11 @@
this._discardDraft();
return;
}
- this._openOverlay(this.confirmDiscardOverlay);
+
+ this._openOverlay(this.confirmDiscardOverlay).then(() => {
+ this.confirmDiscardOverlay.querySelector('#confirmDiscardDialog')
+ .resetFocus();
+ });
},
_handleConfirmDiscard(e) {
@@ -626,9 +630,7 @@
_openOverlay(overlay) {
Polymer.dom(Gerrit.getRootElement()).appendChild(overlay);
- this.async(() => {
- overlay.open();
- }, 1);
+ return overlay.open();
},
_closeOverlay(overlay) {
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
index b41ab23..f1ac649 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-comment/gr-diff-comment_test.html
@@ -614,7 +614,8 @@
setup(() => {
discardStub = sandbox.stub(element, '_discardDraft');
- overlayStub = sandbox.stub(element, '_openOverlay');
+ overlayStub = sandbox.stub(element, '_openOverlay')
+ .returns(Promise.resolve());
mockEvent = {preventDefault: sinon.stub()};
});
diff --git a/polygerrit-ui/externs/BUILD b/polygerrit-ui/externs/BUILD
new file mode 100644
index 0000000..fab3954
--- /dev/null
+++ b/polygerrit-ui/externs/BUILD
@@ -0,0 +1,25 @@
+# Copyright (C) 2018 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.
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_library")
+
+closure_js_library(
+ name = "plugin",
+ srcs = ["plugin.js"],
+ no_closure_library = True,
+)
diff --git a/polygerrit-ui/externs/plugin.js b/polygerrit-ui/externs/plugin.js
new file mode 100644
index 0000000..edace7d
--- /dev/null
+++ b/polygerrit-ui/externs/plugin.js
@@ -0,0 +1,28 @@
+/**
+ * @license
+ * Copyright (C) 2018 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.
+ */
+
+/**
+ * @fileoverview Closure compiler externs for the Gerrit UI plugins.
+ * @externs
+ */
+
+var Gerrit = {};
+
+/**
+ * @param {!Function} callback
+ */
+Gerrit.install = function(callback) {};
diff --git a/tools/bzl/js.bzl b/tools/bzl/js.bzl
index fbacfad..03ee87c 100644
--- a/tools/bzl/js.bzl
+++ b/tools/bzl/js.bzl
@@ -3,6 +3,7 @@
GERRIT = "GERRIT:"
load("//lib/js:npm.bzl", "NPM_SHA1S", "NPM_VERSIONS")
+load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_binary", "closure_js_library")
def _npm_tarball(name):
return "%s@%s.npm_binary.tgz" % (name, NPM_VERSIONS[name])
@@ -146,9 +147,9 @@
transitive_versions += d.transitive_versions
return struct(
- transitive_zipfiles = transitive_zipfiles,
- transitive_versions = transitive_versions,
transitive_licenses = transitive_licenses,
+ transitive_versions = transitive_versions,
+ transitive_zipfiles = transitive_zipfiles,
)
_common_attrs = {
@@ -187,9 +188,9 @@
licenses += depset([ctx.file.license])
return struct(
- transitive_zipfiles = list([ctx.outputs.zip]),
- transitive_versions = depset(),
transitive_licenses = licenses,
+ transitive_versions = depset(),
+ transitive_zipfiles = list([ctx.outputs.zip]),
)
js_component = rule(
@@ -271,9 +272,9 @@
)
return struct(
- transitive_zipfiles = zips,
- transitive_versions = versions,
transitive_licenses = licenses,
+ transitive_versions = versions,
+ transitive_zipfiles = zips,
)
bower_component_bundle = rule(
@@ -341,8 +342,8 @@
# from the environment, and it may be under $HOME, so we can't run
# in the sandbox.
node_tweaks = dict(
- use_default_shell_env = True,
execution_requirements = {"local": "1"},
+ use_default_shell_env = True,
)
ctx.actions.run_shell(
mnemonic = "Vulcanize",
@@ -427,6 +428,87 @@
"""Vulcanize runs vulcanize and (optionally) crisper on a set of sources."""
_vulcanize_rule(*args, pkg = PACKAGE_NAME, **kwargs)
-def polygerrit_plugin(*args, **kwargs):
- """Bundles plugin dependencies for deployment."""
- _vulcanize_rule(*args, pkg = PACKAGE_NAME, **kwargs)
+def polygerrit_plugin(name, app, srcs = [], assets = None, **kwargs):
+ """Bundles plugin dependencies for deployment.
+
+ This rule bundles all Polymer elements and JS dependencies into .html and .js files.
+ Run-time dependencies (e.g. JS libraries loaded after plugin starts) should be provided using "assets" property.
+ Output of this rule is a FileSet with "${name}_fs", with deploy artifacts in "plugins/${name}/static".
+
+ Args:
+ name: String, plugin name.
+ app: String, the main or root source file.
+ assets: Fileset, additional files to be used by plugin in runtime, exported to "plugins/${name}/static".
+ srcs: Source files required for combining.
+ """
+
+ # Combines all .js and .html files into foo_combined.js and foo_combined.html
+ _vulcanize_rule(name = name + "_combined", app = app, srcs = srcs + [app], pkg = PACKAGE_NAME, **kwargs)
+
+ closure_js_binary(
+ name = name + "_bin",
+ compilation_level = "SIMPLE",
+ defs = [
+ "--polymer_version=1",
+ "--language_out=ECMASCRIPT6",
+ "--rewrite_polyfills=false",
+ ],
+ deps = [
+ name + "_closure_lib",
+ ],
+ )
+
+ closure_js_library(
+ name = name + "_closure_lib",
+ srcs = [name + "_combined.js"],
+ convention = "GOOGLE",
+ no_closure_library = True,
+ deps = [
+ "//lib/polymer_externs:polymer_closure",
+ "//polygerrit-ui/externs:plugin",
+ ],
+ )
+
+ native.genrule(
+ name = name + "_rename_html",
+ srcs = [name + "_combined.html"],
+ outs = [name + ".html"],
+ cmd = "sed 's/<script src=\"" + name + "_combined.js\"/<script src=\"" + name + ".js\"/g' $(SRCS) > $(OUTS)",
+ output_to_bindir = True,
+ )
+
+ native.genrule(
+ name = name + "_rename_js",
+ srcs = [name + "_bin.js"],
+ outs = [name + ".js"],
+ cmd = "cp $< $@",
+ output_to_bindir = True,
+ )
+
+ static_files = [
+ name + ".js",
+ name + ".html",
+ ]
+
+ if assets:
+ nested, direct = [], []
+ for x in assets:
+ target = nested if "/" in x else direct
+ target.append(x)
+
+ static_files += direct
+
+ if nested:
+ native.genrule(
+ name = name + "_copy_assets",
+ srcs = assets,
+ outs = [f.split("/")[-1] for f in nested],
+ cmd = "cp $(SRCS) $(@D)",
+ output_to_bindir = True,
+ )
+ static_files += [":" + name + "_copy_assets"]
+
+ native.filegroup(
+ name = name,
+ srcs = static_files,
+ )