Convert legacy Polyemer elements to class-based

This commit converts almost all Polymer elements from Polymer-function
based components to class-based components. There are few files which
should be converted manually after this commit.

Change-Id: I9e597e79053e0a6b5d5c0f1b54676d11b9d81db7
This commit is contained in:
Dmitrii Filippov
2019-11-15 16:16:46 +01:00
parent f0d5b6e49c
commit 3fd2b102e1
162 changed files with 9120 additions and 7751 deletions

View File

@@ -36,10 +36,24 @@
const ON_BEHALF_OF = '(On Behalf Of)'; const ON_BEHALF_OF = '(On Behalf Of)';
const LABEL = 'Label'; const LABEL = 'Label';
Polymer({ /**
is: 'gr-access-section', * @appliesMixin Gerrit.AccessMixin
* @appliesMixin Gerrit.FireMixin
*/
class GrAccessSection extends Polymer.mixinBehaviors( [
Gerrit.AccessBehavior,
/**
* Unused in this element, but called by other elements in tests
* e.g gr-repo-access_test.
*/
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-access-section'; }
properties: { static get properties() {
return {
capabilities: Object, capabilities: Object,
/** @type {?} */ /** @type {?} */
section: { section: {
@@ -66,31 +80,25 @@
value: false, value: false,
}, },
_permissions: Array, _permissions: Array,
}, };
}
behaviors: [ created() {
Gerrit.AccessBehavior, super.created();
/** this.addEventListener('access-saved',
* Unused in this element, but called by other elements in tests () => this._handleAccessSaved());
* e.g gr-repo-access_test. }
*/
Gerrit.FireBehavior,
],
listeners: {
'access-saved': '_handleAccessSaved',
},
_updateSection(section) { _updateSection(section) {
this._permissions = this.toSortedArray(section.value.permissions); this._permissions = this.toSortedArray(section.value.permissions);
this._originalId = section.id; this._originalId = section.id;
}, }
_handleAccessSaved() { _handleAccessSaved() {
// Set a new 'original' value to keep track of after the value has been // Set a new 'original' value to keep track of after the value has been
// saved. // saved.
this._updateSection(this.section); this._updateSection(this.section);
}, }
_handleValueChange() { _handleValueChange() {
if (!this.section.value.added) { if (!this.section.value.added) {
@@ -103,7 +111,7 @@
'access-modified', {bubbles: true, composed: true})); 'access-modified', {bubbles: true, composed: true}));
} }
this.section.value.updatedId = this.section.id; this.section.value.updatedId = this.section.id;
}, }
_handleEditingChanged(editing, editingOld) { _handleEditingChanged(editing, editingOld) {
// Ignore when editing gets set initially. // Ignore when editing gets set initially.
@@ -123,7 +131,7 @@
} }
} }
} }
}, }
_computePermissions(name, capabilities, labels) { _computePermissions(name, capabilities, labels) {
let allPermissions; let allPermissions;
@@ -140,17 +148,17 @@
return allPermissions.filter(permission => { return allPermissions.filter(permission => {
return !this.section.value.permissions[permission.id]; return !this.section.value.permissions[permission.id];
}); });
}, }
_computeHideEditClass(section) { _computeHideEditClass(section) {
return section.id === 'GLOBAL_CAPABILITIES' ? 'hide' : ''; return section.id === 'GLOBAL_CAPABILITIES' ? 'hide' : '';
}, }
_handleAddedPermissionRemoved(e) { _handleAddedPermissionRemoved(e) {
const index = e.model.index; const index = e.model.index;
this._permissions = this._permissions.slice(0, index).concat( this._permissions = this._permissions.slice(0, index).concat(
this._permissions.slice(index + 1, this._permissions.length)); this._permissions.slice(index + 1, this._permissions.length));
}, }
_computeLabelOptions(labels) { _computeLabelOptions(labels) {
const labelOptions = []; const labelOptions = [];
@@ -172,7 +180,7 @@
}); });
} }
return labelOptions; return labelOptions;
}, }
_computePermissionName(name, permission, permissionValues, capabilities) { _computePermissionName(name, permission, permissionValues, capabilities) {
if (name === GLOBAL_NAME) { if (name === GLOBAL_NAME) {
@@ -186,7 +194,7 @@
} }
return `${LABEL} ${permission.value.label}${behalfOf}`; return `${LABEL} ${permission.value.label}${behalfOf}`;
} }
}, }
_computeSectionName(name) { _computeSectionName(name) {
// When a new section is created, it doesn't yet have a ref. Set into // When a new section is created, it doesn't yet have a ref. Set into
@@ -204,7 +212,7 @@
return `Reference: ${name}`; return `Reference: ${name}`;
} }
return name; return name;
}, }
_handleRemoveReference() { _handleRemoveReference() {
if (this.section.value.added) { if (this.section.value.added) {
@@ -215,27 +223,27 @@
this.section.value.deleted = true; this.section.value.deleted = true;
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('access-modified', {bubbles: true, composed: true})); new CustomEvent('access-modified', {bubbles: true, composed: true}));
}, }
_handleUndoRemove() { _handleUndoRemove() {
this._deleted = false; this._deleted = false;
delete this.section.value.deleted; delete this.section.value.deleted;
}, }
editRefInput() { editRefInput() {
return Polymer.dom(this.root).querySelector(Polymer.Element ? return Polymer.dom(this.root).querySelector(Polymer.Element ?
'iron-input.editRefInput' : 'iron-input.editRefInput' :
'input[is=iron-input].editRefInput'); 'input[is=iron-input].editRefInput');
}, }
editReference() { editReference() {
this._editingRef = true; this._editingRef = true;
this.editRefInput().focus(); this.editRefInput().focus();
}, }
_isEditEnabled(canUpload, ownerOf, sectionId) { _isEditEnabled(canUpload, ownerOf, sectionId) {
return canUpload || (ownerOf && ownerOf.indexOf(sectionId) >= 0); return canUpload || (ownerOf && ownerOf.indexOf(sectionId) >= 0);
}, }
_computeSectionClass(editing, canUpload, ownerOf, editingRef, deleted) { _computeSectionClass(editing, canUpload, ownerOf, editingRef, deleted) {
const classList = []; const classList = [];
@@ -249,11 +257,11 @@
classList.push('deleted'); classList.push('deleted');
} }
return classList.join(' '); return classList.join(' ');
}, }
_computeEditBtnClass(name) { _computeEditBtnClass(name) {
return name === GLOBAL_NAME ? 'global' : ''; return name === GLOBAL_NAME ? 'global' : '';
}, }
_handleAddPermission() { _handleAddPermission() {
const value = this.$.permissionSelect.value; const value = this.$.permissionSelect.value;
@@ -286,6 +294,8 @@
this.push('_permissions', permission); this.push('_permissions', permission);
this.set(['section.value.permissions', permission.id], this.set(['section.value.permissions', permission.id],
permission.value); permission.value);
}, }
}); }
customElements.define(GrAccessSection.is, GrAccessSection);
})(); })();

View File

@@ -17,10 +17,20 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-admin-group-list', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.ListViewMixin
*/
class GrAdminGroupList extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.ListViewBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-admin-group-list'; }
properties: { static get properties() {
return {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -64,18 +74,15 @@
value: true, value: true,
}, },
_filter: String, _filter: String,
}, };
}
behaviors: [
Gerrit.FireBehavior,
Gerrit.ListViewBehavior,
],
attached() { attached() {
super.attached();
this._getCreateGroupCapability(); this._getCreateGroupCapability();
this.fire('title-change', {title: 'Groups'}); this.fire('title-change', {title: 'Groups'});
this._maybeOpenCreateOverlay(this.params); this._maybeOpenCreateOverlay(this.params);
}, }
_paramsChanged(params) { _paramsChanged(params) {
this._loading = true; this._loading = true;
@@ -84,7 +91,7 @@
return this._getGroups(this._filter, this._groupsPerPage, return this._getGroups(this._filter, this._groupsPerPage,
this._offset); this._offset);
}, }
/** /**
* Opens the create overlay if the route has a hash 'create' * Opens the create overlay if the route has a hash 'create'
@@ -94,11 +101,11 @@
if (params && params.openCreateModal) { if (params && params.openCreateModal) {
this.$.createOverlay.open(); this.$.createOverlay.open();
} }
}, }
_computeGroupUrl(id) { _computeGroupUrl(id) {
return Gerrit.Nav.getUrlForGroup(id); return Gerrit.Nav.getUrlForGroup(id);
}, }
_getCreateGroupCapability() { _getCreateGroupCapability() {
return this.$.restAPI.getAccount().then(account => { return this.$.restAPI.getAccount().then(account => {
@@ -110,7 +117,7 @@
} }
}); });
}); });
}, }
_getGroups(filter, groupsPerPage, offset) { _getGroups(filter, groupsPerPage, offset) {
this._groups = []; this._groups = [];
@@ -127,30 +134,32 @@
}); });
this._loading = false; this._loading = false;
}); });
}, }
_refreshGroupsList() { _refreshGroupsList() {
this.$.restAPI.invalidateGroupsCache(); this.$.restAPI.invalidateGroupsCache();
return this._getGroups(this._filter, this._groupsPerPage, return this._getGroups(this._filter, this._groupsPerPage,
this._offset); this._offset);
}, }
_handleCreateGroup() { _handleCreateGroup() {
this.$.createNewModal.handleCreateGroup().then(() => { this.$.createNewModal.handleCreateGroup().then(() => {
this._refreshGroupsList(); this._refreshGroupsList();
}); });
}, }
_handleCloseCreate() { _handleCloseCreate() {
this.$.createOverlay.close(); this.$.createOverlay.close();
}, }
_handleCreateClicked() { _handleCreateClicked() {
this.$.createOverlay.open(); this.$.createOverlay.open();
}, }
_visibleToAll(item) { _visibleToAll(item) {
return item.options.visible_to_all === true ? 'Y' : 'N'; return item.options.visible_to_all === true ? 'Y' : 'N';
}, }
}); }
customElements.define(GrAdminGroupList.is, GrAdminGroupList);
})(); })();

View File

@@ -19,10 +19,22 @@
const INTERNAL_GROUP_REGEX = /^[\da-f]{40}$/; const INTERNAL_GROUP_REGEX = /^[\da-f]{40}$/;
Polymer({ /**
is: 'gr-admin-view', * @appliesMixin Gerrit.AdminNavMixin
* @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrAdminView extends Polymer.mixinBehaviors( [
Gerrit.AdminNavBehavior,
Gerrit.BaseUrlBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-admin-view'; }
properties: { static get properties() {
return {
/** @type {?} */ /** @type {?} */
params: Object, params: Object,
path: String, path: String,
@@ -61,21 +73,19 @@
_showRepoMain: Boolean, _showRepoMain: Boolean,
_showRepoList: Boolean, _showRepoList: Boolean,
_showPluginList: Boolean, _showPluginList: Boolean,
}, };
}
behaviors: [ static get observers() {
Gerrit.AdminNavBehavior, return [
Gerrit.BaseUrlBehavior,
Gerrit.URLEncodingBehavior,
],
observers: [
'_paramsChanged(params)', '_paramsChanged(params)',
], ];
}
attached() { attached() {
super.attached();
this.reload(); this.reload();
}, }
reload() { reload() {
const promises = [ const promises = [
@@ -123,18 +133,18 @@
}); });
}); });
}); });
}, }
_computeSelectValue(params) { _computeSelectValue(params) {
if (!params || !params.view) { return; } if (!params || !params.view) { return; }
return params.view + (params.detail || ''); return params.view + (params.detail || '');
}, }
_selectedIsCurrentPage(selected) { _selectedIsCurrentPage(selected) {
return (selected.parent === (this._repoName || this._groupId) && return (selected.parent === (this._repoName || this._groupId) &&
selected.view === this.params.view && selected.view === this.params.view &&
selected.detailType === this.params.detail); selected.detailType === this.params.detail);
}, }
_handleSubsectionChange(e) { _handleSubsectionChange(e) {
const selected = this._subsectionLinks const selected = this._subsectionLinks
@@ -145,7 +155,7 @@
return; return;
} }
Gerrit.Nav.navigateToRelativeUrl(selected.url); Gerrit.Nav.navigateToRelativeUrl(selected.url);
}, }
_paramsChanged(params) { _paramsChanged(params) {
const isGroupView = params.view === Gerrit.Nav.View.GROUP; const isGroupView = params.view === Gerrit.Nav.View.GROUP;
@@ -194,19 +204,19 @@
} }
if (!needsReload) { return; } if (!needsReload) { return; }
this.reload(); this.reload();
}, }
// TODO (beckysiegel): Update these functions after router abstraction is // TODO (beckysiegel): Update these functions after router abstraction is
// updated. They are currently copied from gr-dropdown (and should be // updated. They are currently copied from gr-dropdown (and should be
// updated there as well once complete). // updated there as well once complete).
_computeURLHelper(host, path) { _computeURLHelper(host, path) {
return '//' + host + this.getBaseUrl() + path; return '//' + host + this.getBaseUrl() + path;
}, }
_computeRelativeURL(path) { _computeRelativeURL(path) {
const host = window.location.host; const host = window.location.host;
return this._computeURLHelper(host, path); return this._computeURLHelper(host, path);
}, }
_computeLinkURL(link) { _computeLinkURL(link) {
if (!link || typeof link.url === 'undefined') { return ''; } if (!link || typeof link.url === 'undefined') { return ''; }
@@ -214,7 +224,7 @@
return link.url; return link.url;
} }
return this._computeRelativeURL(link.url); return this._computeRelativeURL(link.url);
}, }
/** /**
* @param {string} itemView * @param {string} itemView
@@ -244,7 +254,7 @@
return ''; return '';
} }
return itemView === params.adminView ? 'selected' : ''; return itemView === params.adminView ? 'selected' : '';
}, }
_computeGroupName(groupId) { _computeGroupName(groupId) {
if (!groupId) { return ''; } if (!groupId) { return ''; }
@@ -270,11 +280,13 @@
this.reload(); this.reload();
}); });
}); });
}, }
_updateGroupName(e) { _updateGroupName(e) {
this._groupName = e.detail.name; this._groupName = e.detail.name;
this.reload(); this.reload();
}, }
}); }
customElements.define(GrAdminView.is, GrAdminView);
})(); })();

View File

@@ -23,9 +23,15 @@
TAGS: 'tags', TAGS: 'tags',
}; };
Polymer({ /**
is: 'gr-confirm-delete-item-dialog', * @appliesMixin Gerrit.FireMixin
*/
class GrConfirmDeleteItemDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-confirm-delete-item-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
* *
@@ -38,26 +44,24 @@
* @event cancel * @event cancel
*/ */
properties: { static get properties() {
return {
item: String, item: String,
itemType: String, itemType: String,
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
_handleConfirmTap(e) { _handleConfirmTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('confirm', null, {bubbles: false}); this.fire('confirm', null, {bubbles: false});
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('cancel', null, {bubbles: false}); this.fire('cancel', null, {bubbles: false});
}, }
_computeItemName(detailType) { _computeItemName(detailType) {
if (detailType === DETAIL_TYPES.BRANCHES) { if (detailType === DETAIL_TYPES.BRANCHES) {
@@ -67,6 +71,9 @@
} else if (detailType === DETAIL_TYPES.ID) { } else if (detailType === DETAIL_TYPES.ID) {
return 'ID'; return 'ID';
} }
}, }
}); }
customElements.define(GrConfirmDeleteItemDialog.is,
GrConfirmDeleteItemDialog);
})(); })();

View File

@@ -20,10 +20,26 @@
const SUGGESTIONS_LIMIT = 15; const SUGGESTIONS_LIMIT = 15;
const REF_PREFIX = 'refs/heads/'; const REF_PREFIX = 'refs/heads/';
Polymer({ /**
is: 'gr-create-change-dialog', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrCreateChangeDialog extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
/**
* Unused in this element, but called by other elements in tests
* e.g gr-repo-commands_test.
*/
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-create-change-dialog'; }
properties: { static get properties() {
return {
repoName: String, repoName: String,
branch: String, branch: String,
/** @type {?} */ /** @type {?} */
@@ -45,19 +61,11 @@
value: false, value: false,
}, },
_privateChangesEnabled: Boolean, _privateChangesEnabled: Boolean,
}, };
}
behaviors: [
Gerrit.BaseUrlBehavior,
/**
* Unused in this element, but called by other elements in tests
* e.g gr-repo-commands_test.
*/
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
],
attached() { attached() {
super.attached();
if (!this.repoName) { return Promise.resolve(); } if (!this.repoName) { return Promise.resolve(); }
const promises = []; const promises = [];
@@ -75,19 +83,21 @@
})); }));
return Promise.all(promises); return Promise.all(promises);
}, }
observers: [ static get observers() {
return [
'_allowCreate(branch, subject)', '_allowCreate(branch, subject)',
], ];
}
_computeBranchClass(baseChange) { _computeBranchClass(baseChange) {
return baseChange ? 'hide' : ''; return baseChange ? 'hide' : '';
}, }
_allowCreate(branch, subject) { _allowCreate(branch, subject) {
this.canCreate = !!branch && !!subject; this.canCreate = !!branch && !!subject;
}, }
handleCreateChange() { handleCreateChange() {
const isPrivate = this.$.privateChangeCheckBox.checked; const isPrivate = this.$.privateChangeCheckBox.checked;
@@ -99,7 +109,7 @@
if (!changeCreated) { return; } if (!changeCreated) { return; }
Gerrit.Nav.navigateToChange(changeCreated); Gerrit.Nav.navigateToChange(changeCreated);
}); });
}, }
_getRepoBranchesSuggestions(input) { _getRepoBranchesSuggestions(input) {
if (input.startsWith(REF_PREFIX)) { if (input.startsWith(REF_PREFIX)) {
@@ -122,7 +132,7 @@
} }
return branches; return branches;
}); });
}, }
_formatBooleanString(config) { _formatBooleanString(config) {
if (config && config.configured_value === 'TRUE') { if (config && config.configured_value === 'TRUE') {
@@ -138,10 +148,12 @@
} else { } else {
return false; return false;
} }
}, }
_computePrivateSectionClass(config) { _computePrivateSectionClass(config) {
return config ? 'hide' : ''; return config ? 'hide' : '';
}, }
}); }
customElements.define(GrCreateChangeDialog.is, GrCreateChangeDialog);
})(); })();

View File

@@ -17,10 +17,20 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-create-group-dialog', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrCreateGroupDialog extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-create-group-dialog'; }
properties: { static get properties() {
return {
params: Object, params: Object,
hasNewGroupName: { hasNewGroupName: {
type: Boolean, type: Boolean,
@@ -32,25 +42,23 @@
type: Boolean, type: Boolean,
value: false, value: false,
}, },
}, };
}
observers: [ static get observers() {
return [
'_updateGroupName(_name)', '_updateGroupName(_name)',
], ];
}
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.URLEncodingBehavior,
],
_computeGroupUrl(groupId) { _computeGroupUrl(groupId) {
return this.getBaseUrl() + '/admin/groups/' + return this.getBaseUrl() + '/admin/groups/' +
this.encodeURL(groupId, true); this.encodeURL(groupId, true);
}, }
_updateGroupName(name) { _updateGroupName(name) {
this.hasNewGroupName = !!name; this.hasNewGroupName = !!name;
}, }
handleCreateGroup() { handleCreateGroup() {
return this.$.restAPI.createGroup({name: this._name}) return this.$.restAPI.createGroup({name: this._name})
@@ -62,6 +70,8 @@
page.show(this._computeGroupUrl(group.group_id)); page.show(this._computeGroupUrl(group.group_id));
}); });
}); });
}, }
}); }
customElements.define(GrCreateGroupDialog.is, GrCreateGroupDialog);
})(); })();

View File

@@ -22,10 +22,20 @@
tags: 'tags', tags: 'tags',
}; };
Polymer({ /**
is: 'gr-create-pointer-dialog', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrCreatePointerDialog extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-create-pointer-dialog'; }
properties: { static get properties() {
return {
detailType: String, detailType: String,
repoName: String, repoName: String,
hasNewItemName: { hasNewItemName: {
@@ -37,20 +47,18 @@
_itemName: String, _itemName: String,
_itemRevision: String, _itemRevision: String,
_itemAnnotation: String, _itemAnnotation: String,
}, };
}
behaviors: [ static get observers() {
Gerrit.BaseUrlBehavior, return [
Gerrit.URLEncodingBehavior,
],
observers: [
'_updateItemName(_itemName)', '_updateItemName(_itemName)',
], ];
}
_updateItemName(name) { _updateItemName(name) {
this.hasNewItemName = !!name; this.hasNewItemName = !!name;
}, }
_computeItemUrl(project) { _computeItemUrl(project) {
if (this.itemDetail === DETAIL_TYPES.branches) { if (this.itemDetail === DETAIL_TYPES.branches) {
@@ -60,7 +68,7 @@
return this.getBaseUrl() + '/admin/repos/' + return this.getBaseUrl() + '/admin/repos/' +
this.encodeURL(this.repoName, true) + ',tags'; this.encodeURL(this.repoName, true) + ',tags';
} }
}, }
handleCreateItem() { handleCreateItem() {
const USE_HEAD = this._itemRevision ? this._itemRevision : 'HEAD'; const USE_HEAD = this._itemRevision ? this._itemRevision : 'HEAD';
@@ -82,10 +90,12 @@
} }
}); });
} }
}, }
_computeHideItemClass(type) { _computeHideItemClass(type) {
return type === DETAIL_TYPES.branches ? 'hideItem' : ''; return type === DETAIL_TYPES.branches ? 'hideItem' : '';
}, }
}); }
customElements.define(GrCreatePointerDialog.is, GrCreatePointerDialog);
})(); })();

View File

@@ -17,10 +17,20 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-create-repo-dialog', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrCreateRepoDialog extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-create-repo-dialog'; }
properties: { static get properties() {
return {
params: Object, params: Object,
hasNewRepoName: { hasNewRepoName: {
type: Boolean, type: Boolean,
@@ -61,25 +71,23 @@
return this._getGroupSuggestions.bind(this); return this._getGroupSuggestions.bind(this);
}, },
}, },
}, };
}
observers: [ static get observers() {
return [
'_updateRepoName(_repoConfig.name)', '_updateRepoName(_repoConfig.name)',
], ];
}
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.URLEncodingBehavior,
],
_computeRepoUrl(repoName) { _computeRepoUrl(repoName) {
return this.getBaseUrl() + '/admin/repos/' + return this.getBaseUrl() + '/admin/repos/' +
this.encodeURL(repoName, true); this.encodeURL(repoName, true);
}, }
_updateRepoName(name) { _updateRepoName(name) {
this.hasNewRepoName = !!name; this.hasNewRepoName = !!name;
}, }
_repoOwnerIdUpdate(id) { _repoOwnerIdUpdate(id) {
if (id) { if (id) {
@@ -87,7 +95,7 @@
} else { } else {
this.set('_repoConfig.owners', undefined); this.set('_repoConfig.owners', undefined);
} }
}, }
handleCreateRepo() { handleCreateRepo() {
return this.$.restAPI.createRepo(this._repoConfig) return this.$.restAPI.createRepo(this._repoConfig)
@@ -97,7 +105,7 @@
page.show(this._computeRepoUrl(this._repoConfig.name)); page.show(this._computeRepoUrl(this._repoConfig.name));
} }
}); });
}, }
_getRepoSuggestions(input) { _getRepoSuggestions(input) {
return this.$.restAPI.getSuggestedProjects(input) return this.$.restAPI.getSuggestedProjects(input)
@@ -112,7 +120,7 @@
} }
return repos; return repos;
}); });
}, }
_getGroupSuggestions(input) { _getGroupSuggestions(input) {
return this.$.restAPI.getSuggestedGroups(input) return this.$.restAPI.getSuggestedGroups(input)
@@ -127,6 +135,8 @@
} }
return groups; return groups;
}); });
}, }
}); }
customElements.define(GrCreateRepoDialog.is, GrCreateRepoDialog);
})(); })();

View File

@@ -19,30 +19,38 @@
const GROUP_EVENTS = ['ADD_GROUP', 'REMOVE_GROUP']; const GROUP_EVENTS = ['ADD_GROUP', 'REMOVE_GROUP'];
Polymer({ /**
is: 'gr-group-audit-log', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.ListViewMixin
*/
class GrGroupAuditLog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.ListViewBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-group-audit-log'; }
properties: { static get properties() {
return {
groupId: String, groupId: String,
_auditLog: Array, _auditLog: Array,
_loading: { _loading: {
type: Boolean, type: Boolean,
value: true, value: true,
}, },
}, };
}
behaviors: [
Gerrit.FireBehavior,
Gerrit.ListViewBehavior,
],
attached() { attached() {
super.attached();
this.fire('title-change', {title: 'Audit Log'}); this.fire('title-change', {title: 'Audit Log'});
}, }
ready() { ready() {
super.ready();
this._getAuditLogs(); this._getAuditLogs();
}, }
_getAuditLogs() { _getAuditLogs() {
if (!this.groupId) { return ''; } if (!this.groupId) { return ''; }
@@ -60,11 +68,11 @@
this._auditLog = auditLog; this._auditLog = auditLog;
this._loading = false; this._loading = false;
}); });
}, }
_status(item) { _status(item) {
return item.disabled ? 'Disabled' : 'Enabled'; return item.disabled ? 'Disabled' : 'Enabled';
}, }
itemType(type) { itemType(type) {
let item; let item;
@@ -81,11 +89,11 @@
item = ''; item = '';
} }
return item; return item;
}, }
_isGroupEvent(type) { _isGroupEvent(type) {
return GROUP_EVENTS.indexOf(type) !== -1; return GROUP_EVENTS.indexOf(type) !== -1;
}, }
_computeGroupUrl(group) { _computeGroupUrl(group) {
if (group && group.url && group.id) { if (group && group.url && group.id) {
@@ -93,11 +101,11 @@
} }
return ''; return '';
}, }
_getIdForUser(account) { _getIdForUser(account) {
return account._account_id ? ' (' + account._account_id + ')' : ''; return account._account_id ? ' (' + account._account_id + ')' : '';
}, }
_getNameForGroup(group) { _getNameForGroup(group) {
if (group && group.name) { if (group && group.name) {
@@ -108,6 +116,8 @@
} }
return ''; return '';
}, }
}); }
customElements.define(GrGroupAuditLog.is, GrGroupAuditLog);
})(); })();

View File

@@ -23,10 +23,22 @@
const URL_REGEX = '^(?:[a-z]+:)?//'; const URL_REGEX = '^(?:[a-z]+:)?//';
Polymer({ /**
is: 'gr-group-members', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrGroupMembers extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-group-members'; }
properties: { static get properties() {
return {
groupId: Number, groupId: Number,
_groupMemberSearchId: String, _groupMemberSearchId: String,
_groupMemberSearchName: String, _groupMemberSearchName: String,
@@ -61,19 +73,15 @@
type: Boolean, type: Boolean,
value: false, value: false,
}, },
}, };
}
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
],
attached() { attached() {
super.attached();
this._loadGroupDetails(); this._loadGroupDetails();
this.fire('title-change', {title: 'Members'}); this.fire('title-change', {title: 'Members'});
}, }
_loadGroupDetails() { _loadGroupDetails() {
if (!this.groupId) { return; } if (!this.groupId) { return; }
@@ -113,15 +121,15 @@
this._loading = false; this._loading = false;
}); });
}); });
}, }
_computeLoadingClass(loading) { _computeLoadingClass(loading) {
return loading ? 'loading' : ''; return loading ? 'loading' : '';
}, }
_isLoading() { _isLoading() {
return this._loading || this._loading === undefined; return this._loading || this._loading === undefined;
}, }
_computeGroupUrl(url) { _computeGroupUrl(url) {
if (!url) { return; } if (!url) { return; }
@@ -136,7 +144,7 @@
return this.getBaseUrl() + url.slice(1); return this.getBaseUrl() + url.slice(1);
} }
return this.getBaseUrl() + url; return this.getBaseUrl() + url;
}, }
_handleSavingGroupMember() { _handleSavingGroupMember() {
return this.$.restAPI.saveGroupMembers(this._groupName, return this.$.restAPI.saveGroupMembers(this._groupName,
@@ -150,7 +158,7 @@
this._groupMemberSearchName = ''; this._groupMemberSearchName = '';
this._groupMemberSearchId = ''; this._groupMemberSearchId = '';
}); });
}, }
_handleDeleteConfirm() { _handleDeleteConfirm() {
this.$.overlay.close(); this.$.overlay.close();
@@ -177,11 +185,11 @@
} }
}); });
} }
}, }
_handleConfirmDialogCancel() { _handleConfirmDialogCancel() {
this.$.overlay.close(); this.$.overlay.close();
}, }
_handleDeleteMember(e) { _handleDeleteMember(e) {
const id = e.model.get('item._account_id'); const id = e.model.get('item._account_id');
@@ -196,7 +204,7 @@
this._itemId = id; this._itemId = id;
this._itemType = 'member'; this._itemType = 'member';
this.$.overlay.open(); this.$.overlay.open();
}, }
_handleSavingIncludedGroups() { _handleSavingIncludedGroups() {
return this.$.restAPI.saveIncludedGroup(this._groupName, return this.$.restAPI.saveIncludedGroup(this._groupName,
@@ -222,7 +230,7 @@
this._includedGroupSearchName = ''; this._includedGroupSearchName = '';
this._includedGroupSearchId = ''; this._includedGroupSearchId = '';
}); });
}, }
_handleDeleteIncludedGroup(e) { _handleDeleteIncludedGroup(e) {
const id = decodeURIComponent(e.model.get('item.id')).replace(/\+/g, ' '); const id = decodeURIComponent(e.model.get('item.id')).replace(/\+/g, ' ');
@@ -233,7 +241,7 @@
this._itemId = id; this._itemId = id;
this._itemType = 'includedGroup'; this._itemType = 'includedGroup';
this.$.overlay.open(); this.$.overlay.open();
}, }
_getAccountSuggestions(input) { _getAccountSuggestions(input) {
if (input.length === 0) { return Promise.resolve([]); } if (input.length === 0) { return Promise.resolve([]); }
@@ -257,7 +265,7 @@
} }
return accountSuggestions; return accountSuggestions;
}); });
}, }
_getGroupSuggestions(input) { _getGroupSuggestions(input) {
return this.$.restAPI.getSuggestedGroups(input) return this.$.restAPI.getSuggestedGroups(input)
@@ -272,10 +280,12 @@
} }
return groups; return groups;
}); });
}, }
_computeHideItemClass(owner, admin) { _computeHideItemClass(owner, admin) {
return admin || owner ? '' : 'canModify'; return admin || owner ? '' : 'canModify';
}, }
}); }
customElements.define(GrGroupMembers.is, GrGroupMembers);
})(); })();

View File

@@ -30,16 +30,23 @@
}, },
}; };
Polymer({ /**
is: 'gr-group', * @appliesMixin Gerrit.FireMixin
*/
class GrGroup extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-group'; }
/** /**
* Fired when the group name changes. * Fired when the group name changes.
* *
* @event name-changed * @event name-changed
*/ */
properties: { static get properties() {
return {
groupId: Number, groupId: Number,
_rename: { _rename: {
type: Boolean, type: Boolean,
@@ -86,22 +93,22 @@
type: Boolean, type: Boolean,
value: false, value: false,
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
],
observers: [
'_handleConfigName(_groupConfig.name)', '_handleConfigName(_groupConfig.name)',
'_handleConfigOwner(_groupConfig.owner, _groupConfigOwner)', '_handleConfigOwner(_groupConfig.owner, _groupConfigOwner)',
'_handleConfigDescription(_groupConfig.description)', '_handleConfigDescription(_groupConfig.description)',
'_handleConfigOptions(_groupConfig.options.visible_to_all)', '_handleConfigOptions(_groupConfig.options.visible_to_all)',
], ];
}
attached() { attached() {
super.attached();
this._loadGroup(); this._loadGroup();
}, }
_loadGroup() { _loadGroup() {
if (!this.groupId) { return; } if (!this.groupId) { return; }
@@ -143,15 +150,15 @@
this._loading = false; this._loading = false;
}); });
}); });
}, }
_computeLoadingClass(loading) { _computeLoadingClass(loading) {
return loading ? 'loading' : ''; return loading ? 'loading' : '';
}, }
_isLoading() { _isLoading() {
return this._loading || this._loading === undefined; return this._loading || this._loading === undefined;
}, }
_handleSaveName() { _handleSaveName() {
return this.$.restAPI.saveGroupName(this.groupId, this._groupConfig.name) return this.$.restAPI.saveGroupName(this.groupId, this._groupConfig.name)
@@ -163,7 +170,7 @@
this._rename = false; this._rename = false;
} }
}); });
}, }
_handleSaveOwner() { _handleSaveOwner() {
let owner = this._groupConfig.owner; let owner = this._groupConfig.owner;
@@ -174,14 +181,14 @@
owner).then(config => { owner).then(config => {
this._owner = false; this._owner = false;
}); });
}, }
_handleSaveDescription() { _handleSaveDescription() {
return this.$.restAPI.saveGroupDescription(this.groupId, return this.$.restAPI.saveGroupDescription(this.groupId,
this._groupConfig.description).then(config => { this._groupConfig.description).then(config => {
this._description = false; this._description = false;
}); });
}, }
_handleSaveOptions() { _handleSaveOptions() {
const visible = this._groupConfig.options.visible_to_all; const visible = this._groupConfig.options.visible_to_all;
@@ -192,31 +199,31 @@
options).then(config => { options).then(config => {
this._options = false; this._options = false;
}); });
}, }
_handleConfigName() { _handleConfigName() {
if (this._isLoading()) { return; } if (this._isLoading()) { return; }
this._rename = true; this._rename = true;
}, }
_handleConfigOwner() { _handleConfigOwner() {
if (this._isLoading()) { return; } if (this._isLoading()) { return; }
this._owner = true; this._owner = true;
}, }
_handleConfigDescription() { _handleConfigDescription() {
if (this._isLoading()) { return; } if (this._isLoading()) { return; }
this._description = true; this._description = true;
}, }
_handleConfigOptions() { _handleConfigOptions() {
if (this._isLoading()) { return; } if (this._isLoading()) { return; }
this._options = true; this._options = true;
}, }
_computeHeaderClass(configChanged) { _computeHeaderClass(configChanged) {
return configChanged ? 'edited' : ''; return configChanged ? 'edited' : '';
}, }
_getGroupSuggestions(input) { _getGroupSuggestions(input) {
return this.$.restAPI.getSuggestedGroups(input) return this.$.restAPI.getSuggestedGroups(input)
@@ -231,10 +238,12 @@
} }
return groups; return groups;
}); });
}, }
_computeGroupDisabled(owner, admin, groupIsInternal) { _computeGroupDisabled(owner, admin, groupIsInternal) {
return groupIsInternal && (admin || owner) ? false : true; return groupIsInternal && (admin || owner) ? false : true;
}, }
}); }
customElements.define(GrGroup.is, GrGroup);
})(); })();

View File

@@ -24,21 +24,33 @@
'BATCH CHANGES LIMIT', 'BATCH CHANGES LIMIT',
]; ];
/**
* @appliesMixin Gerrit.AccessMixin
* @appliesMixin Gerrit.FireMixin
*/
/** /**
* Fired when the permission has been modified or removed. * Fired when the permission has been modified or removed.
* *
* @event access-modified * @event access-modified
*/ */
/** /**
* Fired when a permission that was previously added was removed. * Fired when a permission that was previously added was removed.
* @event added-permission-removed * @event added-permission-removed
*/ */
class GrPermission extends Polymer.mixinBehaviors( [
Gerrit.AccessBehavior,
/**
* Unused in this element, but called by other elements in tests
* e.g gr-access-section_test.
*/
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-permission'; }
Polymer({ static get properties() {
is: 'gr-permission', return {
properties: {
labels: Object, labels: Object,
name: String, name: String,
/** @type {?} */ /** @type {?} */
@@ -72,44 +84,41 @@
value: false, value: false,
}, },
_originalExclusiveValue: Boolean, _originalExclusiveValue: Boolean,
}, };
}
behaviors: [ static get observers() {
Gerrit.AccessBehavior, return [
/**
* Unused in this element, but called by other elements in tests
* e.g gr-access-section_test.
*/
Gerrit.FireBehavior,
],
observers: [
'_handleRulesChanged(_rules.splices)', '_handleRulesChanged(_rules.splices)',
], ];
}
listeners: { created() {
'access-saved': '_handleAccessSaved', super.created();
}, this.addEventListener('access-saved',
() => this._handleAccessSaved());
}
ready() { ready() {
super.ready();
this._setupValues(); this._setupValues();
}, }
_setupValues() { _setupValues() {
if (!this.permission) { return; } if (!this.permission) { return; }
this._originalExclusiveValue = !!this.permission.value.exclusive; this._originalExclusiveValue = !!this.permission.value.exclusive;
Polymer.dom.flush(); Polymer.dom.flush();
}, }
_handleAccessSaved() { _handleAccessSaved() {
// Set a new 'original' value to keep track of after the value has been // Set a new 'original' value to keep track of after the value has been
// saved. // saved.
this._setupValues(); this._setupValues();
}, }
_permissionIsOwnerOrGlobal(permissionId, section) { _permissionIsOwnerOrGlobal(permissionId, section) {
return permissionId === 'owner' || section === 'GLOBAL_CAPABILITIES'; return permissionId === 'owner' || section === 'GLOBAL_CAPABILITIES';
}, }
_handleEditingChanged(editing, editingOld) { _handleEditingChanged(editing, editingOld) {
// Ignore when editing gets set initially. // Ignore when editing gets set initially.
@@ -130,20 +139,20 @@
this.set(['permission', 'value', 'exclusive'], this.set(['permission', 'value', 'exclusive'],
this._originalExclusiveValue); this._originalExclusiveValue);
} }
}, }
_handleAddedRuleRemoved(e) { _handleAddedRuleRemoved(e) {
const index = e.model.index; const index = e.model.index;
this._rules = this._rules.slice(0, index) this._rules = this._rules.slice(0, index)
.concat(this._rules.slice(index + 1, this._rules.length)); .concat(this._rules.slice(index + 1, this._rules.length));
}, }
_handleValueChange() { _handleValueChange() {
this.permission.value.modified = true; this.permission.value.modified = true;
// Allows overall access page to know a change has been made. // Allows overall access page to know a change has been made.
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('access-modified', {bubbles: true, composed: true})); new CustomEvent('access-modified', {bubbles: true, composed: true}));
}, }
_handleRemovePermission() { _handleRemovePermission() {
if (this.permission.value.added) { if (this.permission.value.added) {
@@ -154,16 +163,16 @@
this.permission.value.deleted = true; this.permission.value.deleted = true;
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('access-modified', {bubbles: true, composed: true})); new CustomEvent('access-modified', {bubbles: true, composed: true}));
}, }
_handleRulesChanged(changeRecord) { _handleRulesChanged(changeRecord) {
// Update the groups to exclude in the autocomplete. // Update the groups to exclude in the autocomplete.
this._groupsWithRules = this._computeGroupsWithRules(this._rules); this._groupsWithRules = this._computeGroupsWithRules(this._rules);
}, }
_sortPermission(permission) { _sortPermission(permission) {
this._rules = this.toSortedArray(permission.value.rules); this._rules = this.toSortedArray(permission.value.rules);
}, }
_computeSectionClass(editing, deleted) { _computeSectionClass(editing, deleted) {
const classList = []; const classList = [];
@@ -174,12 +183,12 @@
classList.push('deleted'); classList.push('deleted');
} }
return classList.join(' '); return classList.join(' ');
}, }
_handleUndoRemove() { _handleUndoRemove() {
this._deleted = false; this._deleted = false;
delete this.permission.value.deleted; delete this.permission.value.deleted;
}, }
_computeLabel(permission, labels) { _computeLabel(permission, labels) {
if (!labels || !permission || if (!labels || !permission ||
@@ -195,7 +204,7 @@
values: this._computeLabelValues(labels[labelName].values), values: this._computeLabelValues(labels[labelName].values),
}; };
return label; return label;
}, }
_computeLabelValues(values) { _computeLabelValues(values) {
const valuesArr = []; const valuesArr = [];
@@ -211,7 +220,7 @@
valuesArr.push({value: parseInt(key, 10), text}); valuesArr.push({value: parseInt(key, 10), text});
} }
return valuesArr; return valuesArr;
}, }
/** /**
* @param {!Array} rules * @param {!Array} rules
@@ -224,12 +233,12 @@
groups[rule.id] = true; groups[rule.id] = true;
} }
return groups; return groups;
}, }
_computeGroupName(groups, groupId) { _computeGroupName(groups, groupId) {
return groups && groups[groupId] && groups[groupId].name ? return groups && groups[groupId] && groups[groupId].name ?
groups[groupId].name : groupId; groups[groupId].name : groupId;
}, }
_getGroupSuggestions() { _getGroupSuggestions() {
return this.$.restAPI.getSuggestedGroups( return this.$.restAPI.getSuggestedGroups(
@@ -249,7 +258,7 @@
return !this._groupsWithRules[group.value.id]; return !this._groupsWithRules[group.value.id];
}); });
}); });
}, }
/** /**
* Handles adding a skeleton item to the dom-repeat. * Handles adding a skeleton item to the dom-repeat.
@@ -283,12 +292,14 @@
this.set(['permission', 'value', 'rules', groupId], value); this.set(['permission', 'value', 'rules', groupId], value);
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('access-modified', {bubbles: true, composed: true})); new CustomEvent('access-modified', {bubbles: true, composed: true}));
}, }
_computeHasRange(name) { _computeHasRange(name) {
if (!name) { return false; } if (!name) { return false; }
return RANGE_NAMES.includes(name.toUpperCase()); return RANGE_NAMES.includes(name.toUpperCase());
}, }
}); }
customElements.define(GrPermission.is, GrPermission);
})(); })();

View File

@@ -17,16 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrPluginConfigArrayEditor extends Polymer.GestureEventListeners(
is: 'gr-plugin-config-array-editor', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-plugin-config-array-editor'; }
/** /**
* Fired when the plugin config option changes. * Fired when the plugin config option changes.
* *
* @event plugin-config-option-changed * @event plugin-config-option-changed
*/ */
properties: { static get properties() {
return {
/** @type {?} */ /** @type {?} */
pluginOption: Object, pluginOption: Object,
/** @type {Boolean} */ /** @type {Boolean} */
@@ -39,17 +41,18 @@
type: String, type: String,
value: '', value: '',
}, },
}, };
}
_computeDisabled(record) { _computeDisabled(record) {
return !(record && record.base && record.base.info && return !(record && record.base && record.base.info &&
record.base.info.editable); record.base.info.editable);
}, }
_handleAddTap(e) { _handleAddTap(e) {
e.preventDefault(); e.preventDefault();
this._handleAdd(); this._handleAdd();
}, }
_handleInputKeydown(e) { _handleInputKeydown(e) {
// Enter. // Enter.
@@ -57,20 +60,20 @@
e.preventDefault(); e.preventDefault();
this._handleAdd(); this._handleAdd();
} }
}, }
_handleAdd() { _handleAdd() {
if (!this._newValue.length) { return; } if (!this._newValue.length) { return; }
this._dispatchChanged( this._dispatchChanged(
this.pluginOption.info.values.concat([this._newValue])); this.pluginOption.info.values.concat([this._newValue]));
this._newValue = ''; this._newValue = '';
}, }
_handleDelete(e) { _handleDelete(e) {
const value = Polymer.dom(e).localTarget.dataset.item; const value = Polymer.dom(e).localTarget.dataset.item;
this._dispatchChanged( this._dispatchChanged(
this.pluginOption.info.values.filter(str => str !== value)); this.pluginOption.info.values.filter(str => str !== value));
}, }
_dispatchChanged(values) { _dispatchChanged(values) {
const {_key, info} = this.pluginOption; const {_key, info} = this.pluginOption;
@@ -81,10 +84,13 @@
}; };
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('plugin-config-option-changed', {detail})); new CustomEvent('plugin-config-option-changed', {detail}));
}, }
_computeShowInputRow(disabled) { _computeShowInputRow(disabled) {
return disabled ? 'hide' : ''; return disabled ? 'hide' : '';
}, }
}); }
customElements.define(GrPluginConfigArrayEditor.is,
GrPluginConfigArrayEditor);
})(); })();

View File

@@ -17,10 +17,20 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-plugin-list', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.ListViewMixin
*/
class GrPluginList extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.ListViewBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-plugin-list'; }
properties: { static get properties() {
return {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -61,16 +71,13 @@
type: String, type: String,
value: '', value: '',
}, },
}, };
}
behaviors: [
Gerrit.FireBehavior,
Gerrit.ListViewBehavior,
],
attached() { attached() {
super.attached();
this.fire('title-change', {title: 'Plugins'}); this.fire('title-change', {title: 'Plugins'});
}, }
_paramsChanged(params) { _paramsChanged(params) {
this._loading = true; this._loading = true;
@@ -79,7 +86,7 @@
return this._getPlugins(this._filter, this._pluginsPerPage, return this._getPlugins(this._filter, this._pluginsPerPage,
this._offset); this._offset);
}, }
_getPlugins(filter, pluginsPerPage, offset) { _getPlugins(filter, pluginsPerPage, offset) {
const errFn = response => { const errFn = response => {
@@ -99,14 +106,16 @@
}); });
this._loading = false; this._loading = false;
}); });
}, }
_status(item) { _status(item) {
return item.disabled === true ? 'Disabled' : 'Enabled'; return item.disabled === true ? 'Disabled' : 'Enabled';
}, }
_computePluginUrl(id) { _computePluginUrl(id) {
return this.getUrl('/', id); return this.getUrl('/', id);
}, }
}); }
customElements.define(GrPluginList.is, GrPluginList);
})(); })();

View File

@@ -67,10 +67,24 @@
*/ */
Defs.projectAccessInput; Defs.projectAccessInput;
Polymer({ /**
is: 'gr-repo-access', * @appliesMixin Gerrit.AccessMixin
* @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrRepoAccess extends Polymer.mixinBehaviors( [
Gerrit.AccessBehavior,
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-repo-access'; }
properties: { static get properties() {
return {
repo: { repo: {
type: String, type: String,
observer: '_repoChanged', observer: '_repoChanged',
@@ -111,22 +125,19 @@
type: Boolean, type: Boolean,
value: true, value: true,
}, },
}, };
}
behaviors: [ created() {
Gerrit.AccessBehavior, super.created();
Gerrit.BaseUrlBehavior, this.addEventListener('access-modified',
Gerrit.FireBehavior, () =>
Gerrit.URLEncodingBehavior, this._handleAccessModified());
], }
listeners: {
'access-modified': '_handleAccessModified',
},
_handleAccessModified() { _handleAccessModified() {
this._modified = true; this._modified = true;
}, }
/** /**
* @param {string} repo * @param {string} repo
@@ -138,7 +149,7 @@
if (!repo) { return Promise.resolve(); } if (!repo) { return Promise.resolve(); }
return this._reload(repo); return this._reload(repo);
}, }
_reload(repo) { _reload(repo) {
const promises = []; const promises = [];
@@ -195,7 +206,7 @@
this._sections = sections; this._sections = sections;
this._loading = false; this._loading = false;
}); });
}, }
_handleUpdateInheritFrom(e) { _handleUpdateInheritFrom(e) {
if (!this._inheritsFrom) { if (!this._inheritsFrom) {
@@ -204,7 +215,7 @@
this._inheritsFrom.id = e.detail.value; this._inheritsFrom.id = e.detail.value;
this._inheritsFrom.name = this._inheritFromFilter; this._inheritsFrom.name = this._inheritFromFilter;
this._handleAccessModified(); this._handleAccessModified();
}, }
_getInheritFromSuggestions() { _getInheritFromSuggestions() {
return this.$.restAPI.getRepos( return this.$.restAPI.getRepos(
@@ -221,33 +232,33 @@
} }
return projects; return projects;
}); });
}, }
_computeLoadingClass(loading) { _computeLoadingClass(loading) {
return loading ? 'loading' : ''; return loading ? 'loading' : '';
}, }
_handleEdit() { _handleEdit() {
this._editing = !this._editing; this._editing = !this._editing;
}, }
_editOrCancel(editing) { _editOrCancel(editing) {
return editing ? 'Cancel' : 'Edit'; return editing ? 'Cancel' : 'Edit';
}, }
_computeWebLinkClass(weblinks) { _computeWebLinkClass(weblinks) {
return weblinks && weblinks.length ? 'show' : ''; return weblinks && weblinks.length ? 'show' : '';
}, }
_computeShowInherit(inheritsFrom) { _computeShowInherit(inheritsFrom) {
return inheritsFrom ? 'show' : ''; return inheritsFrom ? 'show' : '';
}, }
_handleAddedSectionRemoved(e) { _handleAddedSectionRemoved(e) {
const index = e.model.index; const index = e.model.index;
this._sections = this._sections.slice(0, index) this._sections = this._sections.slice(0, index)
.concat(this._sections.slice(index + 1, this._sections.length)); .concat(this._sections.slice(index + 1, this._sections.length));
}, }
_handleEditingChanged(editing, editingOld) { _handleEditingChanged(editing, editingOld) {
// Ignore when editing gets set initially. // Ignore when editing gets set initially.
@@ -266,7 +277,7 @@
delete this._local[key]; delete this._local[key];
} }
} }
}, }
/** /**
* @param {!Defs.projectAccessInput} addRemoveObj * @param {!Defs.projectAccessInput} addRemoveObj
@@ -296,7 +307,7 @@
curPos = curPos[item]; curPos = curPos[item];
} }
return addRemoveObj; return addRemoveObj;
}, }
/** /**
* Used to recursively remove any objects with a 'deleted' bit. * Used to recursively remove any objects with a 'deleted' bit.
@@ -313,7 +324,7 @@
this._recursivelyRemoveDeleted(obj[k]); this._recursivelyRemoveDeleted(obj[k]);
} }
} }
}, }
_recursivelyUpdateAddRemoveObj(obj, addRemoveObj, path = []) { _recursivelyUpdateAddRemoveObj(obj, addRemoveObj, path = []) {
for (const k in obj) { for (const k in obj) {
@@ -354,7 +365,7 @@
path.concat(k)); path.concat(k));
} }
} }
}, }
/** /**
* Returns an object formatted for saving or submitting access changes for * Returns an object formatted for saving or submitting access changes for
@@ -388,7 +399,7 @@
addRemoveObj.parent = inheritsFromId; addRemoveObj.parent = inheritsFromId;
} }
return addRemoveObj; return addRemoveObj;
}, }
_handleCreateSection() { _handleCreateSection() {
let newRef = 'refs/for/*'; let newRef = 'refs/for/*';
@@ -403,7 +414,7 @@
Polymer.dom.flush(); Polymer.dom.flush();
Polymer.dom(this.root).querySelector('gr-access-section:last-of-type') Polymer.dom(this.root).querySelector('gr-access-section:last-of-type')
.editReference(); .editReference();
}, }
_getObjforSave() { _getObjforSave() {
const addRemoveObj = this._computeAddAndRemove(); const addRemoveObj = this._computeAddAndRemove();
@@ -426,7 +437,7 @@
obj.parent = addRemoveObj.parent; obj.parent = addRemoveObj.parent;
} }
return obj; return obj;
}, }
_handleSave() { _handleSave() {
const obj = this._getObjforSave(); const obj = this._getObjforSave();
@@ -435,7 +446,7 @@
.then(() => { .then(() => {
this._reload(this.repo); this._reload(this.repo);
}); });
}, }
_handleSaveForReview() { _handleSaveForReview() {
const obj = this._getObjforSave(); const obj = this._getObjforSave();
@@ -444,15 +455,15 @@
.then(change => { .then(change => {
Gerrit.Nav.navigateToChange(change); Gerrit.Nav.navigateToChange(change);
}); });
}, }
_computeSaveReviewBtnClass(canUpload) { _computeSaveReviewBtnClass(canUpload) {
return !canUpload ? 'invisible' : ''; return !canUpload ? 'invisible' : '';
}, }
_computeSaveBtnClass(ownerOf) { _computeSaveBtnClass(ownerOf) {
return ownerOf && ownerOf.length === 0 ? 'invisible' : ''; return ownerOf && ownerOf.length === 0 ? 'invisible' : '';
}, }
_computeMainClass(ownerOf, canUpload, editing) { _computeMainClass(ownerOf, canUpload, editing) {
const classList = []; const classList = [];
@@ -463,11 +474,13 @@
classList.push('editing'); classList.push('editing');
} }
return classList.join(' '); return classList.join(' ');
}, }
_computeParentHref(repoName) { _computeParentHref(repoName) {
return this.getBaseUrl() + return this.getBaseUrl() +
`/admin/repos/${this.encodeURL(repoName, true)},access`; `/admin/repos/${this.encodeURL(repoName, true)},access`;
}, }
}); }
customElements.define(GrRepoAccess.is, GrRepoAccess);
})(); })();

View File

@@ -17,14 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrRepoCommand extends Polymer.GestureEventListeners(
is: 'gr-repo-command', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-repo-command'; }
properties: { static get properties() {
return {
title: String, title: String,
disabled: Boolean, disabled: Boolean,
tooltip: String, tooltip: String,
}, };
}
/** /**
* Fired when command button is tapped. * Fired when command button is tapped.
@@ -35,6 +39,8 @@
_onCommandTap() { _onCommandTap() {
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('command-tap', {bubbles: true, composed: true})); new CustomEvent('command-tap', {bubbles: true, composed: true}));
}, }
}); }
customElements.define(GrRepoCommand.is, GrRepoCommand);
})(); })();

View File

@@ -26,10 +26,18 @@
const CREATE_CHANGE_FAILED_MESSAGE = 'Failed to create change.'; const CREATE_CHANGE_FAILED_MESSAGE = 'Failed to create change.';
const CREATE_CHANGE_SUCCEEDED_MESSAGE = 'Navigating to change'; const CREATE_CHANGE_SUCCEEDED_MESSAGE = 'Navigating to change';
Polymer({ /**
is: 'gr-repo-commands', * @appliesMixin Gerrit.FireMixin
*/
class GrRepoCommands extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-repo-commands'; }
properties: { static get properties() {
return {
params: Object, params: Object,
repo: String, repo: String,
_loading: { _loading: {
@@ -39,17 +47,15 @@
/** @type {?} */ /** @type {?} */
_repoConfig: Object, _repoConfig: Object,
_canCreate: Boolean, _canCreate: Boolean,
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
attached() { attached() {
super.attached();
this._loadRepo(); this._loadRepo();
this.fire('title-change', {title: 'Repo Commands'}); this.fire('title-change', {title: 'Repo Commands'});
}, }
_loadRepo() { _loadRepo() {
if (!this.repo) { return Promise.resolve(); } if (!this.repo) { return Promise.resolve(); }
@@ -65,15 +71,15 @@
this._repoConfig = config; this._repoConfig = config;
this._loading = false; this._loading = false;
}); });
}, }
_computeLoadingClass(loading) { _computeLoadingClass(loading) {
return loading ? 'loading' : ''; return loading ? 'loading' : '';
}, }
_isLoading() { _isLoading() {
return this._loading || this._loading === undefined; return this._loading || this._loading === undefined;
}, }
_handleRunningGC() { _handleRunningGC() {
return this.$.restAPI.runRepoGC(this.repo).then(response => { return this.$.restAPI.runRepoGC(this.repo).then(response => {
@@ -83,20 +89,20 @@
{detail: {message: GC_MESSAGE}, bubbles: true, composed: true})); {detail: {message: GC_MESSAGE}, bubbles: true, composed: true}));
} }
}); });
}, }
_createNewChange() { _createNewChange() {
this.$.createChangeOverlay.open(); this.$.createChangeOverlay.open();
}, }
_handleCreateChange() { _handleCreateChange() {
this.$.createNewChangeModal.handleCreateChange(); this.$.createNewChangeModal.handleCreateChange();
this._handleCloseCreateChange(); this._handleCloseCreateChange();
}, }
_handleCloseCreateChange() { _handleCloseCreateChange() {
this.$.createChangeOverlay.close(); this.$.createChangeOverlay.close();
}, }
_handleEditRepoConfig() { _handleEditRepoConfig() {
return this.$.restAPI.createChange(this.repo, CONFIG_BRANCH, return this.$.restAPI.createChange(this.repo, CONFIG_BRANCH,
@@ -112,6 +118,8 @@
Gerrit.Nav.navigateToRelativeUrl(Gerrit.Nav.getEditUrlForDiff( Gerrit.Nav.navigateToRelativeUrl(Gerrit.Nav.getEditUrlForDiff(
change, CONFIG_PATH, INITIAL_PATCHSET)); change, CONFIG_PATH, INITIAL_PATCHSET));
}); });
}, }
}); }
customElements.define(GrRepoCommands.is, GrRepoCommands);
})(); })();

View File

@@ -17,10 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-repo-dashboards', * @appliesMixin Gerrit.FireMixin
*/
class GrRepoDashboards extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-repo-dashboards'; }
properties: { static get properties() {
return {
repo: { repo: {
type: String, type: String,
observer: '_repoChanged', observer: '_repoChanged',
@@ -30,11 +38,8 @@
value: true, value: true,
}, },
_dashboards: Array, _dashboards: Array,
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
_repoChanged(repo) { _repoChanged(repo) {
this._loading = true; this._loading = true;
@@ -70,24 +75,26 @@
this._loading = false; this._loading = false;
Polymer.dom.flush(); Polymer.dom.flush();
}); });
}, }
_getUrl(project, id) { _getUrl(project, id) {
if (!project || !id) { return ''; } if (!project || !id) { return ''; }
return Gerrit.Nav.getUrlForRepoDashboard(project, id); return Gerrit.Nav.getUrlForRepoDashboard(project, id);
}, }
_computeLoadingClass(loading) { _computeLoadingClass(loading) {
return loading ? 'loading' : ''; return loading ? 'loading' : '';
}, }
_computeInheritedFrom(project, definingProject) { _computeInheritedFrom(project, definingProject) {
return project === definingProject ? '' : definingProject; return project === definingProject ? '' : definingProject;
}, }
_computeIsDefault(isDefault) { _computeIsDefault(isDefault) {
return isDefault ? '✓' : ''; return isDefault ? '✓' : '';
}, }
}); }
customElements.define(GrRepoDashboards.is, GrRepoDashboards);
})(); })();

View File

@@ -24,10 +24,22 @@
const PGP_START = '-----BEGIN PGP SIGNATURE-----'; const PGP_START = '-----BEGIN PGP SIGNATURE-----';
Polymer({ /**
is: 'gr-repo-detail-list', * @appliesMixin Gerrit.ListViewMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrRepoDetailList extends Polymer.mixinBehaviors( [
Gerrit.ListViewBehavior,
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-repo-detail-list'; }
properties: { static get properties() {
return {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -80,19 +92,14 @@
_hasNewItemName: Boolean, _hasNewItemName: Boolean,
_isEditing: Boolean, _isEditing: Boolean,
_revisedRef: String, _revisedRef: String,
}, };
}
behaviors: [
Gerrit.ListViewBehavior,
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
],
_determineIfOwner(repo) { _determineIfOwner(repo) {
return this.$.restAPI.getRepoAccess(repo) return this.$.restAPI.getRepoAccess(repo)
.then(access => .then(access =>
this._isOwner = access && !!access[repo].is_owner); this._isOwner = access && !!access[repo].is_owner);
}, }
_paramsChanged(params) { _paramsChanged(params) {
if (!params || !params.repo) { return; } if (!params || !params.repo) { return; }
@@ -113,7 +120,7 @@
return this._getItems(this._filter, this._repo, return this._getItems(this._filter, this._repo,
this._itemsPerPage, this._offset, this.detailType); this._itemsPerPage, this._offset, this.detailType);
}, }
_getItems(filter, repo, itemsPerPage, offset, detailType) { _getItems(filter, repo, itemsPerPage, offset, detailType) {
this._loading = true; this._loading = true;
@@ -137,24 +144,24 @@
this._loading = false; this._loading = false;
}); });
} }
}, }
_getPath(repo) { _getPath(repo) {
return `/admin/repos/${this.encodeURL(repo, false)},` + return `/admin/repos/${this.encodeURL(repo, false)},` +
`${this.detailType}`; `${this.detailType}`;
}, }
_computeWeblink(repo) { _computeWeblink(repo) {
if (!repo.web_links) { return ''; } if (!repo.web_links) { return ''; }
const webLinks = repo.web_links; const webLinks = repo.web_links;
return webLinks.length ? webLinks : null; return webLinks.length ? webLinks : null;
}, }
_computeMessage(message) { _computeMessage(message) {
if (!message) { return; } if (!message) { return; }
// Strip PGP info. // Strip PGP info.
return message.split(PGP_START)[0]; return message.split(PGP_START)[0];
}, }
_stripRefs(item, detailType) { _stripRefs(item, detailType) {
if (detailType === DETAIL_TYPES.BRANCHES) { if (detailType === DETAIL_TYPES.BRANCHES) {
@@ -162,33 +169,33 @@
} else if (detailType === DETAIL_TYPES.TAGS) { } else if (detailType === DETAIL_TYPES.TAGS) {
return item.replace('refs/tags/', ''); return item.replace('refs/tags/', '');
} }
}, }
_getLoggedIn() { _getLoggedIn() {
return this.$.restAPI.getLoggedIn(); return this.$.restAPI.getLoggedIn();
}, }
_computeEditingClass(isEditing) { _computeEditingClass(isEditing) {
return isEditing ? 'editing' : ''; return isEditing ? 'editing' : '';
}, }
_computeCanEditClass(ref, detailType, isOwner) { _computeCanEditClass(ref, detailType, isOwner) {
return isOwner && this._stripRefs(ref, detailType) === 'HEAD' ? return isOwner && this._stripRefs(ref, detailType) === 'HEAD' ?
'canEdit' : ''; 'canEdit' : '';
}, }
_handleEditRevision(e) { _handleEditRevision(e) {
this._revisedRef = e.model.get('item.revision'); this._revisedRef = e.model.get('item.revision');
this._isEditing = true; this._isEditing = true;
}, }
_handleCancelRevision() { _handleCancelRevision() {
this._isEditing = false; this._isEditing = false;
}, }
_handleSaveRevision(e) { _handleSaveRevision(e) {
this._setRepoHead(this._repo, this._revisedRef, e); this._setRepoHead(this._repo, this._revisedRef, e);
}, }
_setRepoHead(repo, ref, e) { _setRepoHead(repo, ref, e) {
return this.$.restAPI.setRepoHead(repo, ref).then(res => { return this.$.restAPI.setRepoHead(repo, ref).then(res => {
@@ -202,7 +209,7 @@
this._offset, this.detailType); this._offset, this.detailType);
} }
}); });
}, }
_computeItemName(detailType) { _computeItemName(detailType) {
if (detailType === DETAIL_TYPES.BRANCHES) { if (detailType === DETAIL_TYPES.BRANCHES) {
@@ -210,7 +217,7 @@
} else if (detailType === DETAIL_TYPES.TAGS) { } else if (detailType === DETAIL_TYPES.TAGS) {
return 'Tag'; return 'Tag';
} }
}, }
_handleDeleteItemConfirm() { _handleDeleteItemConfirm() {
this.$.overlay.close(); this.$.overlay.close();
@@ -233,18 +240,18 @@
} }
}); });
} }
}, }
_handleConfirmDialogCancel() { _handleConfirmDialogCancel() {
this.$.overlay.close(); this.$.overlay.close();
}, }
_handleDeleteItem(e) { _handleDeleteItem(e) {
const name = this._stripRefs(e.model.get('item.ref'), this.detailType); const name = this._stripRefs(e.model.get('item.ref'), this.detailType);
if (!name) { return; } if (!name) { return; }
this._refName = name; this._refName = name;
this.$.overlay.open(); this.$.overlay.open();
}, }
_computeHideDeleteClass(owner, canDelete) { _computeHideDeleteClass(owner, canDelete) {
if (canDelete || owner) { if (canDelete || owner) {
@@ -252,20 +259,20 @@
} }
return ''; return '';
}, }
_handleCreateItem() { _handleCreateItem() {
this.$.createNewModal.handleCreateItem(); this.$.createNewModal.handleCreateItem();
this._handleCloseCreate(); this._handleCloseCreate();
}, }
_handleCloseCreate() { _handleCloseCreate() {
this.$.createOverlay.close(); this.$.createOverlay.close();
}, }
_handleCreateClicked() { _handleCreateClicked() {
this.$.createOverlay.open(); this.$.createOverlay.open();
}, }
_hideIfBranch(type) { _hideIfBranch(type) {
if (type === DETAIL_TYPES.BRANCHES) { if (type === DETAIL_TYPES.BRANCHES) {
@@ -273,10 +280,12 @@
} }
return ''; return '';
}, }
_computeHideTagger(tagger) { _computeHideTagger(tagger) {
return tagger ? '' : 'hide'; return tagger ? '' : 'hide';
}, }
}); }
customElements.define(GrRepoDetailList.is, GrRepoDetailList);
})(); })();

View File

@@ -17,10 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-repo-list', * @appliesMixin Gerrit.ListViewMixin
*/
class GrRepoList extends Polymer.mixinBehaviors( [
Gerrit.ListViewBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-repo-list'; }
properties: { static get properties() {
return {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -67,17 +75,15 @@
type: String, type: String,
value: '', value: '',
}, },
}, };
}
behaviors: [
Gerrit.ListViewBehavior,
],
attached() { attached() {
super.attached();
this._getCreateRepoCapability(); this._getCreateRepoCapability();
this.fire('title-change', {title: 'Repos'}); this.fire('title-change', {title: 'Repos'});
this._maybeOpenCreateOverlay(this.params); this._maybeOpenCreateOverlay(this.params);
}, }
_paramsChanged(params) { _paramsChanged(params) {
this._loading = true; this._loading = true;
@@ -86,7 +92,7 @@
return this._getRepos(this._filter, this._reposPerPage, return this._getRepos(this._filter, this._reposPerPage,
this._offset); this._offset);
}, }
/** /**
* Opens the create overlay if the route has a hash 'create' * Opens the create overlay if the route has a hash 'create'
@@ -96,15 +102,15 @@
if (params && params.openCreateModal) { if (params && params.openCreateModal) {
this.$.createOverlay.open(); this.$.createOverlay.open();
} }
}, }
_computeRepoUrl(name) { _computeRepoUrl(name) {
return this.getUrl(this._path + '/', name); return this.getUrl(this._path + '/', name);
}, }
_computeChangesLink(name) { _computeChangesLink(name) {
return Gerrit.Nav.getUrlForProjectChanges(name); return Gerrit.Nav.getUrlForProjectChanges(name);
}, }
_getCreateRepoCapability() { _getCreateRepoCapability() {
return this.$.restAPI.getAccount().then(account => { return this.$.restAPI.getAccount().then(account => {
@@ -116,7 +122,7 @@
} }
}); });
}); });
}, }
_getRepos(filter, reposPerPage, offset) { _getRepos(filter, reposPerPage, offset) {
this._repos = []; this._repos = [];
@@ -127,36 +133,38 @@
this._repos = repos; this._repos = repos;
this._loading = false; this._loading = false;
}); });
}, }
_refreshReposList() { _refreshReposList() {
this.$.restAPI.invalidateReposCache(); this.$.restAPI.invalidateReposCache();
return this._getRepos(this._filter, this._reposPerPage, return this._getRepos(this._filter, this._reposPerPage,
this._offset); this._offset);
}, }
_handleCreateRepo() { _handleCreateRepo() {
this.$.createNewModal.handleCreateRepo().then(() => { this.$.createNewModal.handleCreateRepo().then(() => {
this._refreshReposList(); this._refreshReposList();
}); });
}, }
_handleCloseCreate() { _handleCloseCreate() {
this.$.createOverlay.close(); this.$.createOverlay.close();
}, }
_handleCreateClicked() { _handleCreateClicked() {
this.$.createOverlay.open(); this.$.createOverlay.open();
}, }
_readOnly(item) { _readOnly(item) {
return item.state === 'READ_ONLY' ? 'Y' : ''; return item.state === 'READ_ONLY' ? 'Y' : '';
}, }
_computeWeblink(repo) { _computeWeblink(repo) {
if (!repo.web_links) { return ''; } if (!repo.web_links) { return ''; }
const webLinks = repo.web_links; const webLinks = repo.web_links;
return webLinks.length ? webLinks : null; return webLinks.length ? webLinks : null;
}, }
}); }
customElements.define(GrRepoList.is, GrRepoList);
})(); })();

View File

@@ -17,16 +17,23 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-repo-plugin-config', * @appliesMixin Gerrit.RepoPluginConfigMixin
*/
class GrRepoPluginConfig extends Polymer.mixinBehaviors( [
Gerrit.RepoPluginConfig,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-repo-plugin-config'; }
/** /**
* Fired when the plugin config changes. * Fired when the plugin config changes.
* *
* @event plugin-config-changed * @event plugin-config-changed
*/ */
properties: { static get properties() {
return {
/** @type {?} */ /** @type {?} */
pluginData: Object, pluginData: Object,
/** @type {Array} */ /** @type {Array} */
@@ -34,11 +41,8 @@
type: Array, type: Array,
computed: '_computePluginConfigOptions(pluginData.*)', computed: '_computePluginConfigOptions(pluginData.*)',
}, },
}, };
}
behaviors: [
Gerrit.RepoPluginConfig,
],
_computePluginConfigOptions(dataRecord) { _computePluginConfigOptions(dataRecord) {
if (!dataRecord || !dataRecord.base || !dataRecord.base.config) { if (!dataRecord || !dataRecord.base || !dataRecord.base.config) {
@@ -46,34 +50,34 @@
} }
const {config} = dataRecord.base; const {config} = dataRecord.base;
return Object.keys(config).map(_key => ({_key, info: config[_key]})); return Object.keys(config).map(_key => ({_key, info: config[_key]}));
}, }
_isArray(type) { _isArray(type) {
return type === this.ENTRY_TYPES.ARRAY; return type === this.ENTRY_TYPES.ARRAY;
}, }
_isBoolean(type) { _isBoolean(type) {
return type === this.ENTRY_TYPES.BOOLEAN; return type === this.ENTRY_TYPES.BOOLEAN;
}, }
_isList(type) { _isList(type) {
return type === this.ENTRY_TYPES.LIST; return type === this.ENTRY_TYPES.LIST;
}, }
_isString(type) { _isString(type) {
// Treat numbers like strings for simplicity. // Treat numbers like strings for simplicity.
return type === this.ENTRY_TYPES.STRING || return type === this.ENTRY_TYPES.STRING ||
type === this.ENTRY_TYPES.INT || type === this.ENTRY_TYPES.INT ||
type === this.ENTRY_TYPES.LONG; type === this.ENTRY_TYPES.LONG;
}, }
_computeDisabled(editable) { _computeDisabled(editable) {
return editable === 'false'; return editable === 'false';
}, }
_computeChecked(value) { _computeChecked(value) {
return JSON.parse(value); return JSON.parse(value);
}, }
_handleStringChange(e) { _handleStringChange(e) {
const el = Polymer.dom(e).localTarget; const el = Polymer.dom(e).localTarget;
@@ -81,7 +85,7 @@
const configChangeInfo = const configChangeInfo =
this._buildConfigChangeInfo(el.value, _key); this._buildConfigChangeInfo(el.value, _key);
this._handleChange(configChangeInfo); this._handleChange(configChangeInfo);
}, }
_handleListChange(e) { _handleListChange(e) {
const el = Polymer.dom(e).localTarget; const el = Polymer.dom(e).localTarget;
@@ -89,7 +93,7 @@
const configChangeInfo = const configChangeInfo =
this._buildConfigChangeInfo(el.value, _key); this._buildConfigChangeInfo(el.value, _key);
this._handleChange(configChangeInfo); this._handleChange(configChangeInfo);
}, }
_handleBooleanChange(e) { _handleBooleanChange(e) {
const el = Polymer.dom(e).localTarget; const el = Polymer.dom(e).localTarget;
@@ -97,7 +101,7 @@
const configChangeInfo = const configChangeInfo =
this._buildConfigChangeInfo(JSON.stringify(el.checked), _key); this._buildConfigChangeInfo(JSON.stringify(el.checked), _key);
this._handleChange(configChangeInfo); this._handleChange(configChangeInfo);
}, }
_buildConfigChangeInfo(value, _key) { _buildConfigChangeInfo(value, _key) {
const info = this.pluginData.config[_key]; const info = this.pluginData.config[_key];
@@ -107,11 +111,11 @@
info, info,
notifyPath: `${_key}.value`, notifyPath: `${_key}.value`,
}; };
}, }
_handleArrayChange({detail}) { _handleArrayChange({detail}) {
this._handleChange(detail); this._handleChange(detail);
}, }
_handleChange({_key, info, notifyPath}) { _handleChange({_key, info, notifyPath}) {
const {name, config} = this.pluginData; const {name, config} = this.pluginData;
@@ -125,6 +129,8 @@
this.dispatchEvent(new CustomEvent( this.dispatchEvent(new CustomEvent(
this.PLUGIN_CONFIG_CHANGED, {detail, bubbles: true, composed: true})); this.PLUGIN_CONFIG_CHANGED, {detail, bubbles: true, composed: true}));
}, }
}); }
customElements.define(GrRepoPluginConfig.is, GrRepoPluginConfig);
})(); })();

View File

@@ -51,10 +51,18 @@
}, },
}; };
Polymer({ /**
is: 'gr-repo', * @appliesMixin Gerrit.FireMixin
*/
class GrRepo extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-repo'; }
properties: { static get properties() {
return {
params: Object, params: Object,
repo: String, repo: String,
@@ -106,21 +114,21 @@
}, },
_selectedScheme: String, _selectedScheme: String,
_schemesObj: Object, _schemesObj: Object,
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
],
observers: [
'_handleConfigChanged(_repoConfig.*)', '_handleConfigChanged(_repoConfig.*)',
], ];
}
attached() { attached() {
super.attached();
this._loadRepo(); this._loadRepo();
this.fire('title-change', {title: this.repo}); this.fire('title-change', {title: this.repo});
}, }
_computePluginData(configRecord) { _computePluginData(configRecord) {
if (!configRecord || if (!configRecord ||
@@ -129,7 +137,7 @@
const pluginConfig = configRecord.base; const pluginConfig = configRecord.base;
return Object.keys(pluginConfig) return Object.keys(pluginConfig)
.map(name => ({name, config: pluginConfig[name]})); .map(name => ({name, config: pluginConfig[name]}));
}, }
_loadRepo() { _loadRepo() {
if (!this.repo) { return Promise.resolve(); } if (!this.repo) { return Promise.resolve(); }
@@ -179,15 +187,15 @@
})); }));
return Promise.all(promises); return Promise.all(promises);
}, }
_computeLoadingClass(loading) { _computeLoadingClass(loading) {
return loading ? 'loading' : ''; return loading ? 'loading' : '';
}, }
_computeHideClass(arr) { _computeHideClass(arr) {
return !arr || !arr.length ? 'hide' : ''; return !arr || !arr.length ? 'hide' : '';
}, }
_loggedInChanged(_loggedIn) { _loggedInChanged(_loggedIn) {
if (!_loggedIn) { return; } if (!_loggedIn) { return; }
@@ -197,7 +205,7 @@
this._selectedScheme = prefs.download_scheme.toLowerCase(); this._selectedScheme = prefs.download_scheme.toLowerCase();
} }
}); });
}, }
_formatBooleanSelect(item) { _formatBooleanSelect(item) {
if (!item) { return; } if (!item) { return; }
@@ -218,7 +226,7 @@
value: 'FALSE', value: 'FALSE',
}, },
]; ];
}, }
_formatSubmitTypeSelect(projectConfig) { _formatSubmitTypeSelect(projectConfig) {
if (!projectConfig) { return; } if (!projectConfig) { return; }
@@ -248,15 +256,15 @@
}, },
...allValues, ...allValues,
]; ];
}, }
_isLoading() { _isLoading() {
return this._loading || this._loading === undefined; return this._loading || this._loading === undefined;
}, }
_getLoggedIn() { _getLoggedIn() {
return this.$.restAPI.getLoggedIn(); return this.$.restAPI.getLoggedIn();
}, }
_formatRepoConfigForSave(repoConfig) { _formatRepoConfigForSave(repoConfig) {
const configInputObj = {}; const configInputObj = {};
@@ -278,38 +286,38 @@
} }
} }
return configInputObj; return configInputObj;
}, }
_handleSaveRepoConfig() { _handleSaveRepoConfig() {
return this.$.restAPI.saveRepoConfig(this.repo, return this.$.restAPI.saveRepoConfig(this.repo,
this._formatRepoConfigForSave(this._repoConfig)).then(() => { this._formatRepoConfigForSave(this._repoConfig)).then(() => {
this._configChanged = false; this._configChanged = false;
}); });
}, }
_handleConfigChanged() { _handleConfigChanged() {
if (this._isLoading()) { return; } if (this._isLoading()) { return; }
this._configChanged = true; this._configChanged = true;
}, }
_computeButtonDisabled(readOnly, configChanged) { _computeButtonDisabled(readOnly, configChanged) {
return readOnly || !configChanged; return readOnly || !configChanged;
}, }
_computeHeaderClass(configChanged) { _computeHeaderClass(configChanged) {
return configChanged ? 'edited' : ''; return configChanged ? 'edited' : '';
}, }
_computeSchemes(schemesObj) { _computeSchemes(schemesObj) {
return Object.keys(schemesObj); return Object.keys(schemesObj);
}, }
_schemesChanged(schemes) { _schemesChanged(schemes) {
if (schemes.length === 0) { return; } if (schemes.length === 0) { return; }
if (!schemes.includes(this._selectedScheme)) { if (!schemes.includes(this._selectedScheme)) {
this._selectedScheme = schemes.sort()[0]; this._selectedScheme = schemes.sort()[0];
} }
}, }
_computeCommands(repo, schemesObj, _selectedScheme) { _computeCommands(repo, schemesObj, _selectedScheme) {
if (!schemesObj || !repo || !_selectedScheme) { if (!schemesObj || !repo || !_selectedScheme) {
@@ -331,19 +339,21 @@
}); });
} }
return commands; return commands;
}, }
_computeRepositoriesClass(config) { _computeRepositoriesClass(config) {
return config ? 'showConfig': ''; return config ? 'showConfig': '';
}, }
_computeChangesUrl(name) { _computeChangesUrl(name) {
return Gerrit.Nav.getUrlForProjectChanges(name); return Gerrit.Nav.getUrlForProjectChanges(name);
}, }
_handlePluginConfigChanged({detail: {name, config, notifyPath}}) { _handlePluginConfigChanged({detail: {name, config, notifyPath}}) {
this._repoConfig.plugin_config[name] = config; this._repoConfig.plugin_config[name] = config;
this.notifyPath('_repoConfig.plugin_config.' + notifyPath); this.notifyPath('_repoConfig.plugin_config.' + notifyPath);
}, }
}); }
customElements.define(GrRepo.is, GrRepo);
})(); })();

View File

@@ -63,10 +63,28 @@
}, },
]; ];
Polymer({ /**
is: 'gr-rule-editor', * @appliesMixin Gerrit.AccessMixin
* @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrRuleEditor extends Polymer.mixinBehaviors( [
Gerrit.AccessBehavior,
Gerrit.BaseUrlBehavior,
/**
* Unused in this element, but called by other elements in tests
* e.g gr-permission_test.
*/
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-rule-editor'; }
properties: { static get properties() {
return {
hasRange: Boolean, hasRange: Boolean,
/** @type {?} */ /** @type {?} */
label: Object, label: Object,
@@ -90,35 +108,31 @@
value: false, value: false,
}, },
_originalRuleValues: Object, _originalRuleValues: Object,
}, };
}
behaviors: [ static get observers() {
Gerrit.AccessBehavior, return [
Gerrit.BaseUrlBehavior,
/**
* Unused in this element, but called by other elements in tests
* e.g gr-permission_test.
*/
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
],
observers: [
'_handleValueChange(rule.value.*)', '_handleValueChange(rule.value.*)',
], ];
}
listeners: { created() {
'access-saved': '_handleAccessSaved', super.created();
}, this.addEventListener('access-saved',
() => this._handleAccessSaved());
}
ready() { ready() {
super.ready();
// Called on ready rather than the observer because when new rules are // Called on ready rather than the observer because when new rules are
// added, the observer is triggered prior to being ready. // added, the observer is triggered prior to being ready.
if (!this.rule) { return; } // Check needed for test purposes. if (!this.rule) { return; } // Check needed for test purposes.
this._setupValues(this.rule); this._setupValues(this.rule);
}, }
attached() { attached() {
super.attached();
if (!this.rule) { return; } // Check needed for test purposes. if (!this.rule) { return; } // Check needed for test purposes.
if (!this._originalRuleValues) { if (!this._originalRuleValues) {
// Observer _handleValueChange is called after the ready() // Observer _handleValueChange is called after the ready()
@@ -126,13 +140,13 @@
// avoid set .modified flag to true // avoid set .modified flag to true
this._setOriginalRuleValues(this.rule.value); this._setOriginalRuleValues(this.rule.value);
} }
}, }
_setupValues(rule) { _setupValues(rule) {
if (!rule.value) { if (!rule.value) {
this._setDefaultRuleValues(); this._setDefaultRuleValues();
} }
}, }
_computeForce(permission, action) { _computeForce(permission, action) {
if (this.permissionValues.push.id === permission && if (this.permissionValues.push.id === permission &&
@@ -141,21 +155,21 @@
} }
return this.permissionValues.editTopicName.id === permission; return this.permissionValues.editTopicName.id === permission;
}, }
_computeForceClass(permission, action) { _computeForceClass(permission, action) {
return this._computeForce(permission, action) ? 'force' : ''; return this._computeForce(permission, action) ? 'force' : '';
}, }
_computeGroupPath(group) { _computeGroupPath(group) {
return `${this.getBaseUrl()}/admin/groups/${this.encodeURL(group, true)}`; return `${this.getBaseUrl()}/admin/groups/${this.encodeURL(group, true)}`;
}, }
_handleAccessSaved() { _handleAccessSaved() {
// Set a new 'original' value to keep track of after the value has been // Set a new 'original' value to keep track of after the value has been
// saved. // saved.
this._setOriginalRuleValues(this.rule.value); this._setOriginalRuleValues(this.rule.value);
}, }
_handleEditingChanged(editing, editingOld) { _handleEditingChanged(editing, editingOld) {
// Ignore when editing gets set initially. // Ignore when editing gets set initially.
@@ -164,7 +178,7 @@
if (!editing) { if (!editing) {
this._handleUndoChange(); this._handleUndoChange();
} }
}, }
_computeSectionClass(editing, deleted) { _computeSectionClass(editing, deleted) {
const classList = []; const classList = [];
@@ -175,7 +189,7 @@
classList.push('deleted'); classList.push('deleted');
} }
return classList.join(' '); return classList.join(' ');
}, }
_computeForceOptions(permission, action) { _computeForceOptions(permission, action) {
if (permission === this.permissionValues.push.id) { if (permission === this.permissionValues.push.id) {
@@ -190,7 +204,7 @@
return FORCE_EDIT_OPTIONS; return FORCE_EDIT_OPTIONS;
} }
return []; return [];
}, }
_getDefaultRuleValues(permission, label) { _getDefaultRuleValues(permission, label) {
const ruleAction = Action.ALLOW; const ruleAction = Action.ALLOW;
@@ -207,19 +221,19 @@
} }
value.action = DROPDOWN_OPTIONS[0]; value.action = DROPDOWN_OPTIONS[0];
return value; return value;
}, }
_setDefaultRuleValues() { _setDefaultRuleValues() {
this.set('rule.value', this._getDefaultRuleValues(this.permission, this.set('rule.value', this._getDefaultRuleValues(this.permission,
this.label)); this.label));
}, }
_computeOptions(permission) { _computeOptions(permission) {
if (permission === 'priority') { if (permission === 'priority') {
return PRIORITY_OPTIONS; return PRIORITY_OPTIONS;
} }
return DROPDOWN_OPTIONS; return DROPDOWN_OPTIONS;
}, }
_handleRemoveRule() { _handleRemoveRule() {
if (this.rule.value.added) { if (this.rule.value.added) {
@@ -230,12 +244,12 @@
this.rule.value.deleted = true; this.rule.value.deleted = true;
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('access-modified', {bubbles: true, composed: true})); new CustomEvent('access-modified', {bubbles: true, composed: true}));
}, }
_handleUndoRemove() { _handleUndoRemove() {
this._deleted = false; this._deleted = false;
delete this.rule.value.deleted; delete this.rule.value.deleted;
}, }
_handleUndoChange() { _handleUndoChange() {
// gr-permission will take care of removing rules that were added but // gr-permission will take care of removing rules that were added but
@@ -245,7 +259,7 @@
this._deleted = false; this._deleted = false;
delete this.rule.value.deleted; delete this.rule.value.deleted;
delete this.rule.value.modified; delete this.rule.value.modified;
}, }
_handleValueChange() { _handleValueChange() {
if (!this._originalRuleValues) { return; } if (!this._originalRuleValues) { return; }
@@ -253,10 +267,12 @@
// Allows overall access page to know a change has been made. // Allows overall access page to know a change has been made.
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('access-modified', {bubbles: true, composed: true})); new CustomEvent('access-modified', {bubbles: true, composed: true}));
}, }
_setOriginalRuleValues(value) { _setOriginalRuleValues(value) {
this._originalRuleValues = Object.assign({}, value); this._originalRuleValues = Object.assign({}, value);
}, }
}); }
customElements.define(GrRuleEditor.is, GrRuleEditor);
})(); })();

View File

@@ -24,10 +24,26 @@
LARGE: 1000, LARGE: 1000,
}; };
Polymer({ /**
is: 'gr-change-list-item', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.ChangeTableMixin
* @appliesMixin Gerrit.PathListMixin
* @appliesMixin Gerrit.RESTClientMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrChangeListItem extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.ChangeTableBehavior,
Gerrit.PathListBehavior,
Gerrit.RESTClientBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-change-list-item'; }
properties: { static get properties() {
return {
visibleChangeTableColumns: Array, visibleChangeTableColumns: Array,
labelNames: { labelNames: {
type: Array, type: Array,
@@ -55,26 +71,20 @@
_dynamicCellEndpoints: { _dynamicCellEndpoints: {
type: Array, type: Array,
}, },
}, };
}
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.ChangeTableBehavior,
Gerrit.PathListBehavior,
Gerrit.RESTClientBehavior,
Gerrit.URLEncodingBehavior,
],
attached() { attached() {
super.attached();
Gerrit.awaitPluginsLoaded().then(() => { Gerrit.awaitPluginsLoaded().then(() => {
this._dynamicCellEndpoints = Gerrit._endpoints.getDynamicEndpoints( this._dynamicCellEndpoints = Gerrit._endpoints.getDynamicEndpoints(
'change-list-item-cell'); 'change-list-item-cell');
}); });
}, }
_computeChangeURL(change) { _computeChangeURL(change) {
return Gerrit.Nav.getUrlForChange(change); return Gerrit.Nav.getUrlForChange(change);
}, }
_computeLabelTitle(change, labelName) { _computeLabelTitle(change, labelName) {
const label = change.labels[labelName]; const label = change.labels[labelName];
@@ -85,7 +95,7 @@
return labelName + '\nby ' + significantLabel.name; return labelName + '\nby ' + significantLabel.name;
} }
return labelName; return labelName;
}, }
_computeLabelClass(change, labelName) { _computeLabelClass(change, labelName) {
const label = change.labels[labelName]; const label = change.labels[labelName];
@@ -112,7 +122,7 @@
classes['u-gray-background'] = true; classes['u-gray-background'] = true;
} }
return Object.keys(classes).sort().join(' '); return Object.keys(classes).sort().join(' ');
}, }
_computeLabelValue(change, labelName) { _computeLabelValue(change, labelName) {
const label = change.labels[labelName]; const label = change.labels[labelName];
@@ -130,22 +140,22 @@
return label.value; return label.value;
} }
return ''; return '';
}, }
_computeRepoUrl(change) { _computeRepoUrl(change) {
return Gerrit.Nav.getUrlForProjectChanges(change.project, true, return Gerrit.Nav.getUrlForProjectChanges(change.project, true,
change.internalHost); change.internalHost);
}, }
_computeRepoBranchURL(change) { _computeRepoBranchURL(change) {
return Gerrit.Nav.getUrlForBranch(change.branch, change.project, null, return Gerrit.Nav.getUrlForBranch(change.branch, change.project, null,
change.internalHost); change.internalHost);
}, }
_computeTopicURL(change) { _computeTopicURL(change) {
if (!change.topic) { return ''; } if (!change.topic) { return ''; }
return Gerrit.Nav.getUrlForTopic(change.topic, change.internalHost); return Gerrit.Nav.getUrlForTopic(change.topic, change.internalHost);
}, }
/** /**
* Computes the display string for the project column. If there is a host * Computes the display string for the project column. If there is a host
@@ -162,7 +172,7 @@
if (change.internalHost) { str += change.internalHost + '/'; } if (change.internalHost) { str += change.internalHost + '/'; }
str += truncate ? this.truncatePath(change.project, 2) : change.project; str += truncate ? this.truncatePath(change.project, 2) : change.project;
return str; return str;
}, }
_computeSizeTooltip(change) { _computeSizeTooltip(change) {
if (change.insertions + change.deletions === 0 || if (change.insertions + change.deletions === 0 ||
@@ -171,7 +181,7 @@
} else { } else {
return `+${change.insertions}, -${change.deletions}`; return `+${change.insertions}, -${change.deletions}`;
} }
}, }
/** /**
* TShirt sizing is based on the following paper: * TShirt sizing is based on the following paper:
@@ -193,7 +203,7 @@
} else { } else {
return 'XL'; return 'XL';
} }
}, }
toggleReviewed() { toggleReviewed() {
const newVal = !this.change.reviewed; const newVal = !this.change.reviewed;
@@ -203,6 +213,8 @@
composed: true, composed: true,
detail: {change: this.change, reviewed: newVal}, detail: {change: this.change, reviewed: newVal},
})); }));
}, }
}); }
customElements.define(GrChangeListItem.is, GrChangeListItem);
})(); })();

View File

@@ -29,22 +29,27 @@
const LIMIT_OPERATOR_PATTERN = /\blimit:(\d+)/i; const LIMIT_OPERATOR_PATTERN = /\blimit:(\d+)/i;
Polymer({ /**
is: 'gr-change-list-view', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrChangeListView extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-change-list-view'; }
/** /**
* Fired when the title of the page should change. * Fired when the title of the page should change.
* *
* @event title-change * @event title-change
*/ */
behaviors: [ static get properties() {
Gerrit.BaseUrlBehavior, return {
Gerrit.FireBehavior,
Gerrit.URLEncodingBehavior,
],
properties: {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -124,16 +129,21 @@
type: String, type: String,
value: null, value: null,
}, },
}, };
}
listeners: { created() {
'next-page': '_handleNextPage', super.created();
'previous-page': '_handlePreviousPage', this.addEventListener('next-page',
}, () => this._handleNextPage());
this.addEventListener('previous-page',
() => this._handlePreviousPage());
}
attached() { attached() {
super.attached();
this._loadPreferences(); this._loadPreferences();
}, }
_paramsChanged(value) { _paramsChanged(value) {
if (value.view !== Gerrit.Nav.View.SEARCH) { return; } if (value.view !== Gerrit.Nav.View.SEARCH) { return; }
@@ -170,7 +180,7 @@
this._changes = changes; this._changes = changes;
this._loading = false; this._loading = false;
}); });
}, }
_loadPreferences() { _loadPreferences() {
return this.$.restAPI.getLoggedIn().then(loggedIn => { return this.$.restAPI.getLoggedIn().then(loggedIn => {
@@ -182,20 +192,20 @@
this.preferences = {}; this.preferences = {};
} }
}); });
}, }
_replaceCurrentLocation(url) { _replaceCurrentLocation(url) {
window.location.replace(url); window.location.replace(url);
}, }
_getChanges() { _getChanges() {
return this.$.restAPI.getChanges(this._changesPerPage, this._query, return this.$.restAPI.getChanges(this._changesPerPage, this._query,
this._offset); this._offset);
}, }
_getPreferences() { _getPreferences() {
return this.$.restAPI.getPreferences(); return this.$.restAPI.getPreferences();
}, }
_limitFor(query, defaultLimit) { _limitFor(query, defaultLimit) {
const match = query.match(LIMIT_OPERATOR_PATTERN); const match = query.match(LIMIT_OPERATOR_PATTERN);
@@ -203,7 +213,7 @@
return defaultLimit; return defaultLimit;
} }
return parseInt(match[1], 10); return parseInt(match[1], 10);
}, }
_computeNavLink(query, offset, direction, changesPerPage) { _computeNavLink(query, offset, direction, changesPerPage) {
// Offset could be a string when passed from the router. // Offset could be a string when passed from the router.
@@ -211,32 +221,32 @@
const limit = this._limitFor(query, changesPerPage); const limit = this._limitFor(query, changesPerPage);
const newOffset = Math.max(0, offset + (limit * direction)); const newOffset = Math.max(0, offset + (limit * direction));
return Gerrit.Nav.getUrlForSearchQuery(query, newOffset); return Gerrit.Nav.getUrlForSearchQuery(query, newOffset);
}, }
_computePrevArrowClass(offset) { _computePrevArrowClass(offset) {
return offset === 0 ? 'hide' : ''; return offset === 0 ? 'hide' : '';
}, }
_computeNextArrowClass(changes) { _computeNextArrowClass(changes) {
const more = changes.length && changes[changes.length - 1]._more_changes; const more = changes.length && changes[changes.length - 1]._more_changes;
return more ? '' : 'hide'; return more ? '' : 'hide';
}, }
_computeNavClass(loading) { _computeNavClass(loading) {
return loading || !this._changes || !this._changes.length ? 'hide' : ''; return loading || !this._changes || !this._changes.length ? 'hide' : '';
}, }
_handleNextPage() { _handleNextPage() {
if (this.$.nextArrow.hidden) { return; } if (this.$.nextArrow.hidden) { return; }
page.show(this._computeNavLink( page.show(this._computeNavLink(
this._query, this._offset, 1, this._changesPerPage)); this._query, this._offset, 1, this._changesPerPage));
}, }
_handlePreviousPage() { _handlePreviousPage() {
if (this.$.prevArrow.hidden) { return; } if (this.$.prevArrow.hidden) { return; }
page.show(this._computeNavLink( page.show(this._computeNavLink(
this._query, this._offset, -1, this._changesPerPage)); this._query, this._offset, -1, this._changesPerPage));
}, }
_changesChanged(changes) { _changesChanged(changes) {
this._userId = null; this._userId = null;
@@ -255,28 +265,30 @@
if (REPO_QUERY_PATTERN.test(this._query)) { if (REPO_QUERY_PATTERN.test(this._query)) {
this._repo = changes[0].project; this._repo = changes[0].project;
} }
}, }
_computeHeaderClass(id) { _computeHeaderClass(id) {
return id ? '' : 'hide'; return id ? '' : 'hide';
}, }
_computePage(offset, changesPerPage) { _computePage(offset, changesPerPage) {
return offset / changesPerPage + 1; return offset / changesPerPage + 1;
}, }
_computeLoggedIn(account) { _computeLoggedIn(account) {
return !!(account && Object.keys(account).length > 0); return !!(account && Object.keys(account).length > 0);
}, }
_handleToggleStar(e) { _handleToggleStar(e) {
this.$.restAPI.saveChangeStarred(e.detail.change._number, this.$.restAPI.saveChangeStarred(e.detail.change._number,
e.detail.starred); e.detail.starred);
}, }
_handleToggleReviewed(e) { _handleToggleReviewed(e) {
this.$.restAPI.saveChangeReviewed(e.detail.change._number, this.$.restAPI.saveChangeReviewed(e.detail.change._number,
e.detail.reviewed); e.detail.reviewed);
}, }
}); }
customElements.define(GrChangeListView.is, GrChangeListView);
})(); })();

View File

@@ -22,9 +22,25 @@
const LABEL_PREFIX_INVALID_PROLOG = 'Invalid-Prolog-Rules-Label-Name--'; const LABEL_PREFIX_INVALID_PROLOG = 'Invalid-Prolog-Rules-Label-Name--';
const MAX_SHORTCUT_CHARS = 5; const MAX_SHORTCUT_CHARS = 5;
Polymer({ /**
is: 'gr-change-list', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.ChangeTableMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
* @appliesMixin Gerrit.RESTClientMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrChangeList extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.ChangeTableBehavior,
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.RESTClientBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-change-list'; }
/** /**
* Fired when next page key shortcut was pressed. * Fired when next page key shortcut was pressed.
* *
@@ -37,11 +53,8 @@
* @event previous-page * @event previous-page
*/ */
hostAttributes: { static get properties() {
tabindex: 0, return {
},
properties: {
/** /**
* The logged-in user's account, or an empty object if no user is logged * The logged-in user's account, or an empty object if no user is logged
* in. * in.
@@ -99,25 +112,15 @@
changeTableColumns: Array, changeTableColumns: Array,
visibleChangeTableColumns: Array, visibleChangeTableColumns: Array,
preferences: Object, preferences: Object,
}, };
}
behaviors: [ static get observers() {
Gerrit.BaseUrlBehavior, return [
Gerrit.ChangeTableBehavior,
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.RESTClientBehavior,
Gerrit.URLEncodingBehavior,
],
listeners: {
keydown: '_scopedKeydownHandler',
},
observers: [
'_sectionsChanged(sections.*)', '_sectionsChanged(sections.*)',
'_computePreferences(account, preferences)', '_computePreferences(account, preferences)',
], ];
}
keyboardShortcuts() { keyboardShortcuts() {
return { return {
@@ -130,14 +133,26 @@
[this.Shortcut.TOGGLE_CHANGE_STAR]: '_toggleChangeStar', [this.Shortcut.TOGGLE_CHANGE_STAR]: '_toggleChangeStar',
[this.Shortcut.REFRESH_CHANGE_LIST]: '_refreshChangeList', [this.Shortcut.REFRESH_CHANGE_LIST]: '_refreshChangeList',
}; };
}, }
created() {
super.created();
this.addEventListener('keydown',
e => this._scopedKeydownHandler(e));
}
ready() {
super.ready();
this._ensureAttribute('tabindex', 0);
}
attached() { attached() {
super.attached();
Gerrit.awaitPluginsLoaded().then(() => { Gerrit.awaitPluginsLoaded().then(() => {
this._dynamicHeaderEndpoints = Gerrit._endpoints.getDynamicEndpoints( this._dynamicHeaderEndpoints = Gerrit._endpoints.getDynamicEndpoints(
'change-list-header'); 'change-list-header');
}); });
}, }
/** /**
* Iron-a11y-keys-behavior catches keyboard events globally. Some keyboard * Iron-a11y-keys-behavior catches keyboard events globally. Some keyboard
@@ -151,11 +166,11 @@
// Enter. // Enter.
this._openChange(e); this._openChange(e);
} }
}, }
_lowerCase(column) { _lowerCase(column) {
return column.toLowerCase(); return column.toLowerCase();
}, }
_computePreferences(account, preferences) { _computePreferences(account, preferences) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -175,13 +190,13 @@
this.showNumber = false; this.showNumber = false;
this.visibleChangeTableColumns = this.columnNames; this.visibleChangeTableColumns = this.columnNames;
} }
}, }
_computeColspan(changeTableColumns, labelNames) { _computeColspan(changeTableColumns, labelNames) {
if (!changeTableColumns || !labelNames) return; if (!changeTableColumns || !labelNames) return;
return changeTableColumns.length + labelNames.length + return changeTableColumns.length + labelNames.length +
NUMBER_FIXED_COLUMNS; NUMBER_FIXED_COLUMNS;
}, }
_computeLabelNames(sections) { _computeLabelNames(sections) {
if (!sections) { return []; } if (!sections) { return []; }
@@ -198,7 +213,7 @@
} }
} }
return labels.sort(); return labels.sort();
}, }
_computeLabelShortcut(labelName) { _computeLabelShortcut(labelName) {
if (labelName.startsWith(LABEL_PREFIX_INVALID_PROLOG)) { if (labelName.startsWith(LABEL_PREFIX_INVALID_PROLOG)) {
@@ -210,11 +225,11 @@
return a + i[0].toUpperCase(); return a + i[0].toUpperCase();
}, '') }, '')
.slice(0, MAX_SHORTCUT_CHARS); .slice(0, MAX_SHORTCUT_CHARS);
}, }
_changesChanged(changes) { _changesChanged(changes) {
this.sections = changes ? [{results: changes}] : []; this.sections = changes ? [{results: changes}] : [];
}, }
_processQuery(query) { _processQuery(query) {
let tokens = query.split(' '); let tokens = query.split(' ');
@@ -225,11 +240,11 @@
}); });
}); });
return tokens.join(' '); return tokens.join(' ');
}, }
_sectionHref(query) { _sectionHref(query) {
return Gerrit.Nav.getUrlForSearchQuery(this._processQuery(query)); return Gerrit.Nav.getUrlForSearchQuery(this._processQuery(query));
}, }
/** /**
* Maps an index local to a particular section to the absolute index * Maps an index local to a particular section to the absolute index
@@ -245,19 +260,19 @@
idx += this.sections[i].results.length; idx += this.sections[i].results.length;
} }
return idx + localIndex; return idx + localIndex;
}, }
_computeItemSelected(sectionIndex, index, selectedIndex) { _computeItemSelected(sectionIndex, index, selectedIndex) {
const idx = this._computeItemAbsoluteIndex(sectionIndex, index); const idx = this._computeItemAbsoluteIndex(sectionIndex, index);
return idx == selectedIndex; return idx == selectedIndex;
}, }
_computeItemNeedsReview(account, change, showReviewedState) { _computeItemNeedsReview(account, change, showReviewedState) {
return showReviewedState && !change.reviewed && return showReviewedState && !change.reviewed &&
!change.work_in_progress && !change.work_in_progress &&
this.changeIsOpen(change) && this.changeIsOpen(change) &&
(!account || account._account_id != change.owner._account_id); (!account || account._account_id != change.owner._account_id);
}, }
_computeItemHighlight(account, change) { _computeItemHighlight(account, change) {
// Do not show the assignee highlight if the change is not open. // Do not show the assignee highlight if the change is not open.
@@ -267,7 +282,7 @@
return false; return false;
} }
return account._account_id === change.assignee._account_id; return account._account_id === change.assignee._account_id;
}, }
_nextChange(e) { _nextChange(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -275,7 +290,7 @@
e.preventDefault(); e.preventDefault();
this.$.cursor.next(); this.$.cursor.next();
}, }
_prevChange(e) { _prevChange(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -283,7 +298,7 @@
e.preventDefault(); e.preventDefault();
this.$.cursor.previous(); this.$.cursor.previous();
}, }
_openChange(e) { _openChange(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -291,7 +306,7 @@
e.preventDefault(); e.preventDefault();
Gerrit.Nav.navigateToChange(this._changeForIndex(this.selectedIndex)); Gerrit.Nav.navigateToChange(this._changeForIndex(this.selectedIndex));
}, }
_nextPage(e) { _nextPage(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -301,7 +316,7 @@
e.preventDefault(); e.preventDefault();
this.fire('next-page'); this.fire('next-page');
}, }
_prevPage(e) { _prevPage(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -311,7 +326,7 @@
e.preventDefault(); e.preventDefault();
this.fire('previous-page'); this.fire('previous-page');
}, }
_toggleChangeReviewed(e) { _toggleChangeReviewed(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -319,7 +334,7 @@
e.preventDefault(); e.preventDefault();
this._toggleReviewedForIndex(this.selectedIndex); this._toggleReviewedForIndex(this.selectedIndex);
}, }
_toggleReviewedForIndex(index) { _toggleReviewedForIndex(index) {
const changeEls = this._getListItems(); const changeEls = this._getListItems();
@@ -329,18 +344,18 @@
const changeEl = changeEls[index]; const changeEl = changeEls[index];
changeEl.toggleReviewed(); changeEl.toggleReviewed();
}, }
_refreshChangeList(e) { _refreshChangeList(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
e.preventDefault(); e.preventDefault();
this._reloadWindow(); this._reloadWindow();
}, }
_reloadWindow() { _reloadWindow() {
window.location.reload(); window.location.reload();
}, }
_toggleChangeStar(e) { _toggleChangeStar(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -348,7 +363,7 @@
e.preventDefault(); e.preventDefault();
this._toggleStarForIndex(this.selectedIndex); this._toggleStarForIndex(this.selectedIndex);
}, }
_toggleStarForIndex(index) { _toggleStarForIndex(index) {
const changeEls = this._getListItems(); const changeEls = this._getListItems();
@@ -358,7 +373,7 @@
const changeEl = changeEls[index]; const changeEl = changeEls[index];
changeEl.$$('gr-change-star').toggleStar(); changeEl.$$('gr-change-star').toggleStar();
}, }
_changeForIndex(index) { _changeForIndex(index) {
const changeEls = this._getListItems(); const changeEls = this._getListItems();
@@ -366,12 +381,12 @@
return changeEls[index].change; return changeEls[index].change;
} }
return null; return null;
}, }
_getListItems() { _getListItems() {
return Array.from( return Array.from(
Polymer.dom(this.root).querySelectorAll('gr-change-list-item')); Polymer.dom(this.root).querySelectorAll('gr-change-list-item'));
}, }
_sectionsChanged() { _sectionsChanged() {
// Flush DOM operations so that the list item elements will be loaded. // Flush DOM operations so that the list item elements will be loaded.
@@ -379,14 +394,16 @@
this.$.cursor.stops = this._getListItems(); this.$.cursor.stops = this._getListItems();
this.$.cursor.moveToStart(); this.$.cursor.moveToStart();
}); });
}, }
_isOutgoing(section) { _isOutgoing(section) {
return !!section.isOutgoing; return !!section.isOutgoing;
}, }
_isEmpty(section) { _isEmpty(section) {
return !section.results.length; return !section.results.length;
}, }
}); }
customElements.define(GrChangeList.is, GrChangeList);
})(); })();

View File

@@ -17,8 +17,10 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrCreateChangeHelp extends Polymer.GestureEventListeners(
is: 'gr-create-change-help', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-create-change-help'; }
/** /**
* Fired when the "Create change" button is tapped. * Fired when the "Create change" button is tapped.
@@ -30,6 +32,8 @@
e.preventDefault(); e.preventDefault();
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('create-tap', {bubbles: true, composed: true})); new CustomEvent('create-tap', {bubbles: true, composed: true}));
}, }
}); }
customElements.define(GrCreateChangeHelp.is, GrCreateChangeHelp);
})(); })();

View File

@@ -23,10 +23,13 @@
PUSH_PREFIX: 'git push origin HEAD:refs/for/', PUSH_PREFIX: 'git push origin HEAD:refs/for/',
}; };
Polymer({ class GrCreateCommandsDialog extends Polymer.GestureEventListeners(
is: 'gr-create-commands-dialog', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-create-commands-dialog'; }
properties: { static get properties() {
return {
branch: String, branch: String,
_createNewCommitCommand: { _createNewCommitCommand: {
type: String, type: String,
@@ -42,18 +45,21 @@
type: String, type: String,
computed: '_computePushCommand(branch)', computed: '_computePushCommand(branch)',
}, },
}, };
}
open() { open() {
this.$.commandsOverlay.open(); this.$.commandsOverlay.open();
}, }
_handleClose() { _handleClose() {
this.$.commandsOverlay.close(); this.$.commandsOverlay.close();
}, }
_computePushCommand(branch) { _computePushCommand(branch) {
return Commands.PUSH_PREFIX + branch; return Commands.PUSH_PREFIX + branch;
}, }
}); }
customElements.define(GrCreateCommandsDialog.is, GrCreateCommandsDialog);
})(); })();

View File

@@ -23,11 +23,13 @@
* *
* @event confirm * @event confirm
*/ */
class GrCreateDestinationDialog extends Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-create-destination-dialog'; }
Polymer({ static get properties() {
is: 'gr-create-destination-dialog', return {
properties: {
_repo: String, _repo: String,
_branch: String, _branch: String,
_repoAndBranchSelected: { _repoAndBranchSelected: {
@@ -35,25 +37,30 @@
value: false, value: false,
computed: '_computeRepoAndBranchSelected(_repo, _branch)', computed: '_computeRepoAndBranchSelected(_repo, _branch)',
}, },
}, };
}
open() { open() {
this._repo = ''; this._repo = '';
this._branch = ''; this._branch = '';
this.$.createOverlay.open(); this.$.createOverlay.open();
}, }
_handleClose() { _handleClose() {
this.$.createOverlay.close(); this.$.createOverlay.close();
}, }
_pickerConfirm() { _pickerConfirm() {
this.$.createOverlay.close(); this.$.createOverlay.close();
const detail = {repo: this._repo, branch: this._branch}; const detail = {repo: this._repo, branch: this._branch};
this.dispatchEvent(new CustomEvent('confirm', {detail, bubbles: false})); this.dispatchEvent(new CustomEvent('confirm', {detail, bubbles: false}));
}, }
_computeRepoAndBranchSelected(repo, branch) { _computeRepoAndBranchSelected(repo, branch) {
return !!(repo && branch); return !!(repo && branch);
}, }
}); }
customElements.define(GrCreateDestinationDialog.is,
GrCreateDestinationDialog);
})(); })();

View File

@@ -19,16 +19,25 @@
const PROJECT_PLACEHOLDER_PATTERN = /\$\{project\}/g; const PROJECT_PLACEHOLDER_PATTERN = /\$\{project\}/g;
Polymer({ /**
is: 'gr-dashboard-view', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.RESTClientMixin
*/
class GrDashboardView extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-dashboard-view'; }
/** /**
* Fired when the title of the page should change. * Fired when the title of the page should change.
* *
* @event title-change * @event title-change
*/ */
properties: { static get properties() {
return {
account: { account: {
type: Object, type: Object,
value: null, value: null,
@@ -68,16 +77,14 @@
type: Boolean, type: Boolean,
value: false, value: false,
}, },
}, };
}
observers: [ static get observers() {
return [
'_paramsChanged(params.*)', '_paramsChanged(params.*)',
], ];
}
behaviors: [
Gerrit.FireBehavior,
Gerrit.RESTClientBehavior,
],
get options() { get options() {
return this.listChangesOptionsToHex( return this.listChangesOptionsToHex(
@@ -85,11 +92,12 @@
this.ListChangesOption.DETAILED_ACCOUNTS, this.ListChangesOption.DETAILED_ACCOUNTS,
this.ListChangesOption.REVIEWED this.ListChangesOption.REVIEWED
); );
}, }
attached() { attached() {
super.attached();
this._loadPreferences(); this._loadPreferences();
}, }
_loadPreferences() { _loadPreferences() {
return this.$.restAPI.getLoggedIn().then(loggedIn => { return this.$.restAPI.getLoggedIn().then(loggedIn => {
@@ -101,7 +109,7 @@
this.preferences = {}; this.preferences = {};
} }
}); });
}, }
_getProjectDashboard(project, dashboard) { _getProjectDashboard(project, dashboard) {
const errFn = response => { const errFn = response => {
@@ -124,18 +132,18 @@
}), }),
}; };
}); });
}, }
_computeTitle(user) { _computeTitle(user) {
if (!user || user === 'self') { if (!user || user === 'self') {
return 'My Reviews'; return 'My Reviews';
} }
return 'Dashboard for ' + user; return 'Dashboard for ' + user;
}, }
_isViewActive(params) { _isViewActive(params) {
return params.view === Gerrit.Nav.View.DASHBOARD; return params.view === Gerrit.Nav.View.DASHBOARD;
}, }
_paramsChanged(paramsChangeRecord) { _paramsChanged(paramsChangeRecord) {
const params = paramsChangeRecord.base; const params = paramsChangeRecord.base;
@@ -145,7 +153,7 @@
} }
return this._reload(); return this._reload();
}, }
/** /**
* Reloads the element. * Reloads the element.
@@ -179,7 +187,7 @@
}); });
console.warn(err); console.warn(err);
}).then(() => { this._loading = false; }); }).then(() => { this._loading = false; });
}, }
/** /**
* Fetches the changes for each dashboard section and sets this._results * Fetches the changes for each dashboard section and sets this._results
@@ -218,7 +226,7 @@
!res.sections[i].hideIfEmpty || !res.sections[i].hideIfEmpty ||
section.results.length)); section.results.length));
}); });
}, }
_computeSectionCountLabel(changes) { _computeSectionCountLabel(changes) {
if (!changes || !changes.length || changes.length == 0) { if (!changes || !changes.length || changes.length == 0) {
@@ -228,7 +236,7 @@
const numChanges = changes.length; const numChanges = changes.length;
const andMore = more ? ' and more' : ''; const andMore = more ? ' and more' : '';
return `(${numChanges}${andMore})`; return `(${numChanges}${andMore})`;
}, }
_computeUserHeaderClass(params) { _computeUserHeaderClass(params) {
if (!params || !!params.project || !params.user if (!params || !!params.project || !params.user
@@ -236,17 +244,17 @@
return 'hide'; return 'hide';
} }
return ''; return '';
}, }
_handleToggleStar(e) { _handleToggleStar(e) {
this.$.restAPI.saveChangeStarred(e.detail.change._number, this.$.restAPI.saveChangeStarred(e.detail.change._number,
e.detail.starred); e.detail.starred);
}, }
_handleToggleReviewed(e) { _handleToggleReviewed(e) {
this.$.restAPI.saveChangeReviewed(e.detail.change._number, this.$.restAPI.saveChangeReviewed(e.detail.change._number,
e.detail.reviewed); e.detail.reviewed);
}, }
/** /**
* Banner is shown if a user is on their own dashboard and they have draft * Banner is shown if a user is on their own dashboard and they have draft
@@ -265,15 +273,15 @@
if (!closedChanges.length) { return; } if (!closedChanges.length) { return; }
this._showDraftsBanner = true; this._showDraftsBanner = true;
}, }
_computeBannerClass(show) { _computeBannerClass(show) {
return show ? '' : 'hide'; return show ? '' : 'hide';
}, }
_handleOpenDeleteDialog() { _handleOpenDeleteDialog() {
this.$.confirmDeleteOverlay.open(); this.$.confirmDeleteOverlay.open();
}, }
_handleConfirmDelete() { _handleConfirmDelete() {
this.$.confirmDeleteDialog.disabled = true; this.$.confirmDeleteDialog.disabled = true;
@@ -281,23 +289,25 @@
this._closeConfirmDeleteOverlay(); this._closeConfirmDeleteOverlay();
this._reload(); this._reload();
}); });
}, }
_closeConfirmDeleteOverlay() { _closeConfirmDeleteOverlay() {
this.$.confirmDeleteOverlay.close(); this.$.confirmDeleteOverlay.close();
}, }
_computeDraftsLink() { _computeDraftsLink() {
return Gerrit.Nav.getUrlForSearchQuery('has:draft -is:open'); return Gerrit.Nav.getUrlForSearchQuery('has:draft -is:open');
}, }
_createChangeTap(e) { _createChangeTap(e) {
this.$.destinationDialog.open(); this.$.destinationDialog.open();
}, }
_handleDestinationConfirm(e) { _handleDestinationConfirm(e) {
this.$.commandsDialog.branch = e.detail.branch; this.$.commandsDialog.branch = e.detail.branch;
this.$.commandsDialog.open(); this.$.commandsDialog.open();
}, }
}); }
customElements.define(GrDashboardView.is, GrDashboardView);
})(); })();

View File

@@ -17,14 +17,20 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrEmbedDashboard extends Polymer.GestureEventListeners(
is: 'gr-embed-dashboard', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-embed-dashboard'; }
properties: { static get properties() {
return {
account: Object, account: Object,
sections: Array, sections: Array,
preferences: Object, preferences: Object,
showNewUserHelp: Boolean, showNewUserHelp: Boolean,
}, };
}); }
}
customElements.define(GrEmbedDashboard.is, GrEmbedDashboard);
})(); })();

View File

@@ -17,10 +17,13 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrRepoHeader extends Polymer.GestureEventListeners(
is: 'gr-repo-header', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-repo-header'; }
properties: { static get properties() {
return {
/** @type {?String} */ /** @type {?String} */
repo: { repo: {
type: String, type: String,
@@ -28,7 +31,8 @@
}, },
/** @type {String|null} */ /** @type {String|null} */
_repoUrl: String, _repoUrl: String,
}, };
}
_repoChanged(repoName) { _repoChanged(repoName) {
if (!repoName) { if (!repoName) {
@@ -36,6 +40,8 @@
return; return;
} }
this._repoUrl = Gerrit.Nav.getUrlForRepo(repoName); this._repoUrl = Gerrit.Nav.getUrlForRepo(repoName);
}, }
}); }
customElements.define(GrRepoHeader.is, GrRepoHeader);
})(); })();

View File

@@ -17,10 +17,13 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrUserHeader extends Polymer.GestureEventListeners(
is: 'gr-user-header', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-user-header'; }
properties: { static get properties() {
return {
/** @type {?String} */ /** @type {?String} */
userId: { userId: {
type: String, type: String,
@@ -50,7 +53,8 @@
type: String, type: String,
value: null, value: null,
}, },
}, };
}
_accountChanged(userId) { _accountChanged(userId) {
if (!userId) { if (!userId) {
@@ -65,19 +69,19 @@
this.$.restAPI.getAccountStatus(userId).then(status => { this.$.restAPI.getAccountStatus(userId).then(status => {
this._status = status; this._status = status;
}); });
}, }
_computeDisplayClass(status) { _computeDisplayClass(status) {
return status ? ' ' : 'hide'; return status ? ' ' : 'hide';
}, }
_computeDetail(accountDetails, name) { _computeDetail(accountDetails, name) {
return accountDetails ? accountDetails[name] : ''; return accountDetails ? accountDetails[name] : '';
}, }
_computeStatusClass(accountDetails) { _computeStatusClass(accountDetails) {
return this._computeDetail(accountDetails, 'status') ? '' : 'hide'; return this._computeDetail(accountDetails, 'status') ? '' : 'hide';
}, }
_computeDashboardUrl(accountDetails) { _computeDashboardUrl(accountDetails) {
if (!accountDetails) { return null; } if (!accountDetails) { return null; }
@@ -85,11 +89,13 @@
const email = accountDetails.email; const email = accountDetails.email;
if (!id && !email ) { return null; } if (!id && !email ) { return null; }
return Gerrit.Nav.getUrlForUserDashboard(id ? id : email); return Gerrit.Nav.getUrlForUserDashboard(id ? id : email);
}, }
_computeDashboardLinkClass(showDashboardLink, loggedIn) { _computeDashboardLinkClass(showDashboardLink, loggedIn) {
return showDashboardLink && loggedIn ? return showDashboardLink && loggedIn ?
'dashboardLink' : 'dashboardLink hide'; 'dashboardLink' : 'dashboardLink hide';
}, }
}); }
customElements.define(GrUserHeader.is, GrUserHeader);
})(); })();

View File

@@ -192,9 +192,19 @@
const AWAIT_CHANGE_ATTEMPTS = 5; const AWAIT_CHANGE_ATTEMPTS = 5;
const AWAIT_CHANGE_TIMEOUT_MS = 1000; const AWAIT_CHANGE_TIMEOUT_MS = 1000;
Polymer({ /**
is: 'gr-change-actions', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.RESTClientMixin
*/
class GrChangeActions extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-change-actions'; }
/** /**
* Fired when the change should be reloaded. * Fired when the change should be reloaded.
* *
@@ -219,7 +229,15 @@
* @event show-error * @event show-error
*/ */
properties: { constructor() {
super();
this.ActionType = ActionType;
this.ChangeActions = ChangeActions;
this.RevisionActions = RevisionActions;
}
static get properties() {
return {
/** /**
* @type {{ * @type {{
* _number: number, * _number: number,
@@ -402,44 +420,41 @@
type: Boolean, type: Boolean,
value: true, value: true,
}, },
}, };
}
ActionType, static get observers() {
ChangeActions, return [
RevisionActions,
behaviors: [
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
],
observers: [
'_actionsChanged(actions.*, revisionActions.*, _additionalActions.*)', '_actionsChanged(actions.*, revisionActions.*, _additionalActions.*)',
'_changeChanged(change)', '_changeChanged(change)',
'_editStatusChanged(editMode, editPatchsetLoaded, ' + '_editStatusChanged(editMode, editPatchsetLoaded, ' +
'editBasedOnCurrentPatchSet, disableEdit, actions.*, change.*)', 'editBasedOnCurrentPatchSet, disableEdit, actions.*, change.*)',
], ];
}
listeners: { created() {
'fullscreen-overlay-opened': '_handleHideBackgroundContent', super.created();
'fullscreen-overlay-closed': '_handleShowBackgroundContent', this.addEventListener('fullscreen-overlay-opened',
}, () => this._handleHideBackgroundContent());
this.addEventListener('fullscreen-overlay-closed',
() => this._handleShowBackgroundContent());
}
ready() { ready() {
super.ready();
this.$.jsAPI.addElement(this.$.jsAPI.Element.CHANGE_ACTIONS, this); this.$.jsAPI.addElement(this.$.jsAPI.Element.CHANGE_ACTIONS, this);
this._handleLoadingComplete(); this._handleLoadingComplete();
}, }
_getSubmitAction(revisionActions) { _getSubmitAction(revisionActions) {
return this._getRevisionAction(revisionActions, 'submit', null); return this._getRevisionAction(revisionActions, 'submit', null);
}, }
_getRebaseAction(revisionActions) { _getRebaseAction(revisionActions) {
return this._getRevisionAction(revisionActions, 'rebase', return this._getRevisionAction(revisionActions, 'rebase',
{rebaseOnCurrent: null} {rebaseOnCurrent: null}
); );
}, }
_getRevisionAction(revisionActions, actionName, emptyActionValue) { _getRevisionAction(revisionActions, actionName, emptyActionValue) {
if (!revisionActions) { if (!revisionActions) {
@@ -451,7 +466,7 @@
return emptyActionValue; return emptyActionValue;
} }
return revisionActions[actionName]; return revisionActions[actionName];
}, }
reload() { reload() {
if (!this.changeNum || !this.latestPatchNum) { if (!this.changeNum || !this.latestPatchNum) {
@@ -469,11 +484,11 @@
this._loading = false; this._loading = false;
throw err; throw err;
}); });
}, }
_handleLoadingComplete() { _handleLoadingComplete() {
Gerrit.awaitPluginsLoaded().then(() => this._loading = false); Gerrit.awaitPluginsLoaded().then(() => this._loading = false);
}, }
_updateRebaseAction(revisionActions) { _updateRebaseAction(revisionActions) {
if (revisionActions && revisionActions.rebase) { if (revisionActions && revisionActions.rebase) {
@@ -485,11 +500,11 @@
this._parentIsCurrent = true; this._parentIsCurrent = true;
} }
return revisionActions; return revisionActions;
}, }
_changeChanged() { _changeChanged() {
this.reload(); this.reload();
}, }
addActionButton(type, label) { addActionButton(type, label) {
if (type !== ActionType.CHANGE && type !== ActionType.REVISION) { if (type !== ActionType.CHANGE && type !== ActionType.REVISION) {
@@ -504,7 +519,7 @@
}; };
this.push('_additionalActions', action); this.push('_additionalActions', action);
return action.__key; return action.__key;
}, }
removeActionButton(key) { removeActionButton(key) {
const idx = this._indexOfActionButtonWithKey(key); const idx = this._indexOfActionButtonWithKey(key);
@@ -512,7 +527,7 @@
return; return;
} }
this.splice('_additionalActions', idx, 1); this.splice('_additionalActions', idx, 1);
}, }
setActionButtonProp(key, prop, value) { setActionButtonProp(key, prop, value) {
this.set([ this.set([
@@ -520,7 +535,7 @@
this._indexOfActionButtonWithKey(key), this._indexOfActionButtonWithKey(key),
prop, prop,
], value); ], value);
}, }
setActionOverflow(type, key, overflow) { setActionOverflow(type, key, overflow) {
if (type !== ActionType.CHANGE && type !== ActionType.REVISION) { if (type !== ActionType.CHANGE && type !== ActionType.REVISION) {
@@ -537,7 +552,7 @@
} else if (overflow) { } else if (overflow) {
this.push('_overflowActions', action); this.push('_overflowActions', action);
} }
}, }
setActionPriority(type, key, priority) { setActionPriority(type, key, priority) {
if (type !== ActionType.CHANGE && type !== ActionType.REVISION) { if (type !== ActionType.CHANGE && type !== ActionType.REVISION) {
@@ -556,7 +571,7 @@
} else { } else {
this.push('_actionPriorityOverrides', action); this.push('_actionPriorityOverrides', action);
} }
}, }
setActionHidden(type, key, hidden) { setActionHidden(type, key, hidden) {
if (type !== ActionType.CHANGE && type !== ActionType.REVISION) { if (type !== ActionType.CHANGE && type !== ActionType.REVISION) {
@@ -569,7 +584,7 @@
} else if (!hidden && idx !== -1) { } else if (!hidden && idx !== -1) {
this.splice('_hiddenActions', idx, 1); this.splice('_hiddenActions', idx, 1);
} }
}, }
getActionDetails(action) { getActionDetails(action) {
if (this.revisionActions[action]) { if (this.revisionActions[action]) {
@@ -577,7 +592,7 @@
} else if (this.actions[action]) { } else if (this.actions[action]) {
return this.actions[action]; return this.actions[action];
} }
}, }
_indexOfActionButtonWithKey(key) { _indexOfActionButtonWithKey(key) {
for (let i = 0; i < this._additionalActions.length; i++) { for (let i = 0; i < this._additionalActions.length; i++) {
@@ -586,20 +601,20 @@
} }
} }
return -1; return -1;
}, }
_getRevisionActions() { _getRevisionActions() {
return this.$.restAPI.getChangeRevisionActions(this.changeNum, return this.$.restAPI.getChangeRevisionActions(this.changeNum,
this.latestPatchNum); this.latestPatchNum);
}, }
_shouldHideActions(actions, loading) { _shouldHideActions(actions, loading) {
return loading || !actions || !actions.base || !actions.base.length; return loading || !actions || !actions.base || !actions.base.length;
}, }
_keyCount(changeRecord) { _keyCount(changeRecord) {
return Object.keys((changeRecord && changeRecord.base) || {}).length; return Object.keys((changeRecord && changeRecord.base) || {}).length;
}, }
_actionsChanged(actionsChangeRecord, revisionActionsChangeRecord, _actionsChanged(actionsChangeRecord, revisionActionsChangeRecord,
additionalActionsChangeRecord) { additionalActionsChangeRecord) {
@@ -626,7 +641,7 @@
this.set('revisionActions.download', DOWNLOAD_ACTION); this.set('revisionActions.download', DOWNLOAD_ACTION);
} }
} }
}, }
/** /**
* @param {string=} actionName * @param {string=} actionName
@@ -638,7 +653,7 @@
// see https://github.com/Polymer/polymer/issues/2631 // see https://github.com/Polymer/polymer/issues/2631
this.notifyPath('actions.' + actionName, false); this.notifyPath('actions.' + actionName, false);
} }
}, }
_editStatusChanged(editMode, editPatchsetLoaded, _editStatusChanged(editMode, editPatchsetLoaded,
editBasedOnCurrentPatchSet, disableEdit) { editBasedOnCurrentPatchSet, disableEdit) {
@@ -705,13 +720,13 @@
// Remove edit button. // Remove edit button.
this._deleteAndNotify('edit'); this._deleteAndNotify('edit');
} }
}, }
_getValuesFor(obj) { _getValuesFor(obj) {
return Object.keys(obj).map(key => { return Object.keys(obj).map(key => {
return obj[key]; return obj[key];
}); });
}, }
_getLabelStatus(label) { _getLabelStatus(label) {
if (label.approved) { if (label.approved) {
@@ -723,7 +738,7 @@
} else { } else {
return LabelStatus.NEED; return LabelStatus.NEED;
} }
}, }
/** /**
* Get highest score for last missing permitted label for current change. * Get highest score for last missing permitted label for current change.
@@ -771,7 +786,7 @@
} }
} }
return null; return null;
}, }
hideQuickApproveAction() { hideQuickApproveAction() {
this._topLevelSecondaryActions = this._topLevelSecondaryActions =
@@ -779,7 +794,7 @@
return sa.key !== QUICK_APPROVE_ACTION.key; return sa.key !== QUICK_APPROVE_ACTION.key;
}); });
this._hideQuickApproveAction = true; this._hideQuickApproveAction = true;
}, }
_getQuickApproveAction() { _getQuickApproveAction() {
if (this._hideQuickApproveAction) { if (this._hideQuickApproveAction) {
@@ -798,7 +813,7 @@
review.labels[approval.label] = approval.score; review.labels[approval.label] = approval.score;
action.payload = review; action.payload = review;
return action; return action;
}, }
_getActionValues(actionsChangeRecord, primariesChangeRecord, _getActionValues(actionsChangeRecord, primariesChangeRecord,
additionalActionsChangeRecord, type) { additionalActionsChangeRecord, type) {
@@ -843,7 +858,7 @@
return Object.assign({}, a); return Object.assign({}, a);
}); });
return result.concat(additionalActions).concat(pluginActions); return result.concat(additionalActions).concat(pluginActions);
}, }
_populateActionUrl(action) { _populateActionUrl(action) {
const patchNum = const patchNum =
@@ -851,7 +866,7 @@
this.$.restAPI.getChangeActionURL( this.$.restAPI.getChangeActionURL(
this.changeNum, patchNum, '/' + action.__key) this.changeNum, patchNum, '/' + action.__key)
.then(url => action.__url = url); .then(url => action.__url = url);
}, }
/** /**
* Given a change action, return a display label that uses the appropriate * Given a change action, return a display label that uses the appropriate
@@ -867,7 +882,7 @@
} }
// Otherwise, just map the name to sentence case. // Otherwise, just map the name to sentence case.
return this._toSentenceCase(action.label); return this._toSentenceCase(action.label);
}, }
/** /**
* Capitalize the first letter and lowecase all others. * Capitalize the first letter and lowecase all others.
@@ -877,16 +892,16 @@
_toSentenceCase(s) { _toSentenceCase(s) {
if (!s.length) { return ''; } if (!s.length) { return ''; }
return s[0].toUpperCase() + s.slice(1).toLowerCase(); return s[0].toUpperCase() + s.slice(1).toLowerCase();
}, }
_computeLoadingLabel(action) { _computeLoadingLabel(action) {
return ActionLoadingLabels[action] || 'Working...'; return ActionLoadingLabels[action] || 'Working...';
}, }
_canSubmitChange() { _canSubmitChange() {
return this.$.jsAPI.canSubmitChange(this.change, return this.$.jsAPI.canSubmitChange(this.change,
this._getRevision(this.change, this.latestPatchNum)); this._getRevision(this.change, this.latestPatchNum));
}, }
_getRevision(change, patchNum) { _getRevision(change, patchNum) {
for (const rev of Object.values(change.revisions)) { for (const rev of Object.values(change.revisions)) {
@@ -895,24 +910,24 @@
} }
} }
return null; return null;
}, }
_modifyRevertMsg() { _modifyRevertMsg() {
return this.$.jsAPI.modifyRevertMsg(this.change, return this.$.jsAPI.modifyRevertMsg(this.change,
this.$.confirmRevertDialog.message, this.commitMessage); this.$.confirmRevertDialog.message, this.commitMessage);
}, }
showRevertDialog() { showRevertDialog() {
this.$.confirmRevertDialog.populateRevertMessage( this.$.confirmRevertDialog.populateRevertMessage(
this.commitMessage, this.change.current_revision); this.commitMessage, this.change.current_revision);
this.$.confirmRevertDialog.message = this._modifyRevertMsg(); this.$.confirmRevertDialog.message = this._modifyRevertMsg();
this._showActionDialog(this.$.confirmRevertDialog); this._showActionDialog(this.$.confirmRevertDialog);
}, }
_modifyRevertSubmissionMsg() { _modifyRevertSubmissionMsg() {
return this.$.jsAPI.modifyRevertSubmissionMsg(this.change, return this.$.jsAPI.modifyRevertSubmissionMsg(this.change,
this.$.confirmRevertSubmissionDialog.message, this.commitMessage); this.$.confirmRevertSubmissionDialog.message, this.commitMessage);
}, }
showRevertSubmissionDialog() { showRevertSubmissionDialog() {
this.$.confirmRevertSubmissionDialog.populateRevertSubmissionMessage( this.$.confirmRevertSubmissionDialog.populateRevertSubmissionMessage(
@@ -920,7 +935,7 @@
this.$.confirmRevertSubmissionDialog.message = this.$.confirmRevertSubmissionDialog.message =
this._modifyRevertSubmissionMsg(); this._modifyRevertSubmissionMsg();
this._showActionDialog(this.$.confirmRevertSubmissionDialog); this._showActionDialog(this.$.confirmRevertSubmissionDialog);
}, }
_handleActionTap(e) { _handleActionTap(e) {
e.preventDefault(); e.preventDefault();
@@ -938,7 +953,7 @@
} }
const type = el.getAttribute('data-action-type'); const type = el.getAttribute('data-action-type');
this._handleAction(type, key); this._handleAction(type, key);
}, }
_handleOveflowItemTap(e) { _handleOveflowItemTap(e) {
e.preventDefault(); e.preventDefault();
@@ -950,7 +965,7 @@
return; return;
} }
this._handleAction(e.detail.action.__type, e.detail.action.__key); this._handleAction(e.detail.action.__type, e.detail.action.__key);
}, }
_handleAction(type, key) { _handleAction(type, key) {
this.$.reporting.reportInteraction(`${type}-${key}`); this.$.reporting.reportInteraction(`${type}-${key}`);
@@ -964,7 +979,7 @@
default: default:
this._fireAction(this._prependSlash(key), this.actions[key], false); this._fireAction(this._prependSlash(key), this.actions[key], false);
} }
}, }
_handleChangeAction(key) { _handleChangeAction(key) {
let action; let action;
@@ -1015,7 +1030,7 @@
default: default:
this._fireAction(this._prependSlash(key), this.actions[key], false); this._fireAction(this._prependSlash(key), this.actions[key], false);
} }
}, }
_handleRevisionAction(key) { _handleRevisionAction(key) {
switch (key) { switch (key) {
@@ -1037,11 +1052,11 @@
this._fireAction(this._prependSlash(key), this._fireAction(this._prependSlash(key),
this.revisionActions[key], true); this.revisionActions[key], true);
} }
}, }
_prependSlash(key) { _prependSlash(key) {
return key === '/' ? key : `/${key}`; return key === '/' ? key : `/${key}`;
}, }
/** /**
* _hasKnownChainState set to true true if hasParent is defined (can be * _hasKnownChainState set to true true if hasParent is defined (can be
@@ -1049,25 +1064,25 @@
*/ */
_computeChainState(hasParent) { _computeChainState(hasParent) {
this._hasKnownChainState = true; this._hasKnownChainState = true;
}, }
_calculateDisabled(action, hasKnownChainState) { _calculateDisabled(action, hasKnownChainState) {
if (action.__key === 'rebase' && hasKnownChainState === false) { if (action.__key === 'rebase' && hasKnownChainState === false) {
return true; return true;
} }
return !action.enabled; return !action.enabled;
}, }
_handleConfirmDialogCancel() { _handleConfirmDialogCancel() {
this._hideAllDialogs(); this._hideAllDialogs();
}, }
_hideAllDialogs() { _hideAllDialogs() {
const dialogEls = const dialogEls =
Polymer.dom(this.root).querySelectorAll('.confirmDialog'); Polymer.dom(this.root).querySelectorAll('.confirmDialog');
for (const dialogEl of dialogEls) { dialogEl.hidden = true; } for (const dialogEl of dialogEls) { dialogEl.hidden = true; }
this.$.overlay.close(); this.$.overlay.close();
}, }
_handleRebaseConfirm(e) { _handleRebaseConfirm(e) {
const el = this.$.confirmRebase; const el = this.$.confirmRebase;
@@ -1075,15 +1090,15 @@
this.$.overlay.close(); this.$.overlay.close();
el.hidden = true; el.hidden = true;
this._fireAction('/rebase', this.revisionActions.rebase, true, payload); this._fireAction('/rebase', this.revisionActions.rebase, true, payload);
}, }
_handleCherrypickConfirm() { _handleCherrypickConfirm() {
this._handleCherryPickRestApi(false); this._handleCherryPickRestApi(false);
}, }
_handleCherrypickConflictConfirm() { _handleCherrypickConflictConfirm() {
this._handleCherryPickRestApi(true); this._handleCherryPickRestApi(true);
}, }
_handleCherryPickRestApi(conflicts) { _handleCherryPickRestApi(conflicts) {
const el = this.$.confirmCherrypick; const el = this.$.confirmCherrypick;
@@ -1108,7 +1123,7 @@
allow_conflicts: conflicts, allow_conflicts: conflicts,
} }
); );
}, }
_handleMoveConfirm() { _handleMoveConfirm() {
const el = this.$.confirmMove; const el = this.$.confirmMove;
@@ -1127,7 +1142,7 @@
message: el.message, message: el.message,
} }
); );
}, }
_handleRevertDialogConfirm() { _handleRevertDialogConfirm() {
const el = this.$.confirmRevertDialog; const el = this.$.confirmRevertDialog;
@@ -1135,7 +1150,7 @@
el.hidden = true; el.hidden = true;
this._fireAction('/revert', this.actions.revert, false, this._fireAction('/revert', this.actions.revert, false,
{message: el.message}); {message: el.message});
}, }
_handleRevertSubmissionDialogConfirm() { _handleRevertSubmissionDialogConfirm() {
const el = this.$.confirmRevertSubmissionDialog; const el = this.$.confirmRevertSubmissionDialog;
@@ -1143,7 +1158,7 @@
el.hidden = true; el.hidden = true;
this._fireAction('/revert_submission', this.actions.revert_submission, this._fireAction('/revert_submission', this.actions.revert_submission,
false, {message: el.message}); false, {message: el.message});
}, }
_handleAbandonDialogConfirm() { _handleAbandonDialogConfirm() {
const el = this.$.confirmAbandonDialog; const el = this.$.confirmAbandonDialog;
@@ -1151,38 +1166,38 @@
el.hidden = true; el.hidden = true;
this._fireAction('/abandon', this.actions.abandon, false, this._fireAction('/abandon', this.actions.abandon, false,
{message: el.message}); {message: el.message});
}, }
_handleCreateFollowUpChange() { _handleCreateFollowUpChange() {
this.$.createFollowUpChange.handleCreateChange(); this.$.createFollowUpChange.handleCreateChange();
this._handleCloseCreateFollowUpChange(); this._handleCloseCreateFollowUpChange();
}, }
_handleCloseCreateFollowUpChange() { _handleCloseCreateFollowUpChange() {
this.$.overlay.close(); this.$.overlay.close();
}, }
_handleDeleteConfirm() { _handleDeleteConfirm() {
this._fireAction('/', this.actions[ChangeActions.DELETE], false); this._fireAction('/', this.actions[ChangeActions.DELETE], false);
}, }
_handleDeleteEditConfirm() { _handleDeleteEditConfirm() {
this._hideAllDialogs(); this._hideAllDialogs();
this._fireAction('/edit', this.actions.deleteEdit, false); this._fireAction('/edit', this.actions.deleteEdit, false);
}, }
_handleSubmitConfirm() { _handleSubmitConfirm() {
if (!this._canSubmitChange()) { return; } if (!this._canSubmitChange()) { return; }
this._hideAllDialogs(); this._hideAllDialogs();
this._fireAction('/submit', this.revisionActions.submit, true); this._fireAction('/submit', this.revisionActions.submit, true);
}, }
_getActionOverflowIndex(type, key) { _getActionOverflowIndex(type, key) {
return this._overflowActions.findIndex(action => { return this._overflowActions.findIndex(action => {
return action.type === type && action.key === key; return action.type === type && action.key === key;
}); });
}, }
_setLoadingOnButtonWithKey(type, key) { _setLoadingOnButtonWithKey(type, key) {
this._actionLoadingMessage = this._computeLoadingLabel(key); this._actionLoadingMessage = this._computeLoadingLabel(key);
@@ -1205,7 +1220,7 @@
buttonEl.removeAttribute('loading'); buttonEl.removeAttribute('loading');
buttonEl.disabled = false; buttonEl.disabled = false;
}.bind(this); }.bind(this);
}, }
/** /**
* @param {string} endpoint * @param {string} endpoint
@@ -1219,7 +1234,7 @@
this._send(action.method, opt_payload, endpoint, revAction, cleanupFn, this._send(action.method, opt_payload, endpoint, revAction, cleanupFn,
action).then(this._handleResponse.bind(this, action)); action).then(this._handleResponse.bind(this, action));
}, }
_showActionDialog(dialog) { _showActionDialog(dialog) {
this._hideAllDialogs(); this._hideAllDialogs();
@@ -1230,7 +1245,7 @@
dialog.resetFocus(); dialog.resetFocus();
} }
}); });
}, }
// TODO(rmistry): Redo this after // TODO(rmistry): Redo this after
// https://bugs.chromium.org/p/gerrit/issues/detail?id=4671 is resolved. // https://bugs.chromium.org/p/gerrit/issues/detail?id=4671 is resolved.
@@ -1238,7 +1253,7 @@
const labels = this.$.jsAPI.getLabelValuesPostRevert(this.change); const labels = this.$.jsAPI.getLabelValuesPostRevert(this.change);
if (!labels) { return Promise.resolve(); } if (!labels) { return Promise.resolve(); }
return this.$.restAPI.saveChangeReview(newChangeId, 'current', {labels}); return this.$.restAPI.saveChangeReview(newChangeId, 'current', {labels});
}, }
_handleResponse(action, response) { _handleResponse(action, response) {
if (!response) { return; } if (!response) { return; }
@@ -1273,7 +1288,7 @@
break; break;
} }
}); });
}, }
_handleResponseError(action, response, body) { _handleResponseError(action, response, body) {
if (action && action.__key === RevisionActions.CHERRYPICK) { if (action && action.__key === RevisionActions.CHERRYPICK) {
@@ -1290,7 +1305,7 @@
throw Error(errText); throw Error(errText);
} }
}); });
}, }
/** /**
* @param {string} method * @param {string} method
@@ -1333,58 +1348,58 @@
return response; return response;
}); });
}); });
}, }
_handleAbandonTap() { _handleAbandonTap() {
this._showActionDialog(this.$.confirmAbandonDialog); this._showActionDialog(this.$.confirmAbandonDialog);
}, }
_handleCherrypickTap() { _handleCherrypickTap() {
this.$.confirmCherrypick.branch = ''; this.$.confirmCherrypick.branch = '';
this._showActionDialog(this.$.confirmCherrypick); this._showActionDialog(this.$.confirmCherrypick);
}, }
_handleMoveTap() { _handleMoveTap() {
this.$.confirmMove.branch = ''; this.$.confirmMove.branch = '';
this.$.confirmMove.message = ''; this.$.confirmMove.message = '';
this._showActionDialog(this.$.confirmMove); this._showActionDialog(this.$.confirmMove);
}, }
_handleDownloadTap() { _handleDownloadTap() {
this.fire('download-tap', null, {bubbles: false}); this.fire('download-tap', null, {bubbles: false});
}, }
_handleDeleteTap() { _handleDeleteTap() {
this._showActionDialog(this.$.confirmDeleteDialog); this._showActionDialog(this.$.confirmDeleteDialog);
}, }
_handleDeleteEditTap() { _handleDeleteEditTap() {
this._showActionDialog(this.$.confirmDeleteEditDialog); this._showActionDialog(this.$.confirmDeleteEditDialog);
}, }
_handleFollowUpTap() { _handleFollowUpTap() {
this._showActionDialog(this.$.createFollowUpDialog); this._showActionDialog(this.$.createFollowUpDialog);
}, }
_handleWipTap() { _handleWipTap() {
this._fireAction('/wip', this.actions.wip, false); this._fireAction('/wip', this.actions.wip, false);
}, }
_handlePublishEditTap() { _handlePublishEditTap() {
this._fireAction('/edit:publish', this.actions.publishEdit, false); this._fireAction('/edit:publish', this.actions.publishEdit, false);
}, }
_handleRebaseEditTap() { _handleRebaseEditTap() {
this._fireAction('/edit:rebase', this.actions.rebaseEdit, false); this._fireAction('/edit:rebase', this.actions.rebaseEdit, false);
}, }
_handleHideBackgroundContent() { _handleHideBackgroundContent() {
this.$.mainContent.classList.add('overlayOpen'); this.$.mainContent.classList.add('overlayOpen');
}, }
_handleShowBackgroundContent() { _handleShowBackgroundContent() {
this.$.mainContent.classList.remove('overlayOpen'); this.$.mainContent.classList.remove('overlayOpen');
}, }
/** /**
* Merge sources of change actions into a single ordered array of action * Merge sources of change actions into a single ordered array of action
@@ -1427,7 +1442,7 @@
} }
return action; return action;
}); });
}, }
_getActionPriority(action) { _getActionPriority(action) {
if (action.__type && action.__key) { if (action.__type && action.__key) {
@@ -1449,7 +1464,7 @@
return ActionPriority.REVISION; return ActionPriority.REVISION;
} }
return ActionPriority.DEFAULT; return ActionPriority.DEFAULT;
}, }
/** /**
* Sort comparator to define the order of change actions. * Sort comparator to define the order of change actions.
@@ -1463,7 +1478,7 @@
} else { } else {
return priorityDelta; return priorityDelta;
} }
}, }
_computeTopLevelActions(actionRecord, hiddenActionsRecord) { _computeTopLevelActions(actionRecord, hiddenActionsRecord) {
const hiddenActions = hiddenActionsRecord.base || []; const hiddenActions = hiddenActionsRecord.base || [];
@@ -1471,14 +1486,14 @@
const overflow = this._getActionOverflowIndex(a.__type, a.__key) !== -1; const overflow = this._getActionOverflowIndex(a.__type, a.__key) !== -1;
return !(overflow || hiddenActions.includes(a.__key)); return !(overflow || hiddenActions.includes(a.__key));
}); });
}, }
_filterPrimaryActions(_topLevelActions) { _filterPrimaryActions(_topLevelActions) {
this._topLevelPrimaryActions = _topLevelActions.filter(action => this._topLevelPrimaryActions = _topLevelActions.filter(action =>
action.__primary); action.__primary);
this._topLevelSecondaryActions = _topLevelActions.filter(action => this._topLevelSecondaryActions = _topLevelActions.filter(action =>
!action.__primary); !action.__primary);
}, }
_computeMenuActions(actionRecord, hiddenActionsRecord) { _computeMenuActions(actionRecord, hiddenActionsRecord) {
const hiddenActions = hiddenActionsRecord.base || []; const hiddenActions = hiddenActionsRecord.base || [];
@@ -1495,7 +1510,7 @@
tooltip: action.title, tooltip: action.title,
}; };
}); });
}, }
/** /**
* Occasionally, a change created by a change action is not yet knwon to the * Occasionally, a change created by a change action is not yet knwon to the
@@ -1529,22 +1544,24 @@
}; };
check(); check();
}); });
}, }
_handleEditTap() { _handleEditTap() {
this.dispatchEvent(new CustomEvent('edit-tap', {bubbles: false})); this.dispatchEvent(new CustomEvent('edit-tap', {bubbles: false}));
}, }
_handleStopEditTap() { _handleStopEditTap() {
this.dispatchEvent(new CustomEvent('stop-edit-tap', {bubbles: false})); this.dispatchEvent(new CustomEvent('stop-edit-tap', {bubbles: false}));
}, }
_computeHasTooltip(title) { _computeHasTooltip(title) {
return !!title; return !!title;
}, }
_computeHasIcon(action) { _computeHasIcon(action) {
return action.icon ? '' : 'hidden'; return action.icon ? '' : 'hidden';
}, }
}); }
customElements.define(GrChangeActions.is, GrChangeActions);
})(); })();

View File

@@ -48,16 +48,23 @@
TRUSTED: 'TRUSTED', TRUSTED: 'TRUSTED',
}; };
Polymer({ /**
is: 'gr-change-metadata', * @appliesMixin Gerrit.RESTClientMixin
*/
class GrChangeMetadata extends Polymer.mixinBehaviors( [
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-change-metadata'; }
/** /**
* Fired when the change topic is changed. * Fired when the change topic is changed.
* *
* @event topic-changed * @event topic-changed
*/ */
properties: { static get properties() {
return {
/** @type {?} */ /** @type {?} */
change: Object, change: Object,
labels: { labels: {
@@ -128,25 +135,24 @@
COMMITTER: 'committer', COMMITTER: 'committer',
}, },
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.RESTClientBehavior, return [
],
observers: [
'_changeChanged(change)', '_changeChanged(change)',
'_labelsChanged(change.labels)', '_labelsChanged(change.labels)',
'_assigneeChanged(_assignee.*)', '_assigneeChanged(_assignee.*)',
], ];
}
_labelsChanged(labels) { _labelsChanged(labels) {
this.labels = Object.assign({}, labels) || null; this.labels = Object.assign({}, labels) || null;
}, }
_changeChanged(change) { _changeChanged(change) {
this._assignee = change.assignee ? [change.assignee] : []; this._assignee = change.assignee ? [change.assignee] : [];
}, }
_assigneeChanged(assigneeRecord) { _assigneeChanged(assigneeRecord) {
if (!this.change) { return; } if (!this.change) { return; }
@@ -162,11 +168,11 @@
this.set(['change', 'assignee'], undefined); this.set(['change', 'assignee'], undefined);
this.$.restAPI.deleteAssignee(this.change._number); this.$.restAPI.deleteAssignee(this.change._number);
} }
}, }
_computeHideStrategy(change) { _computeHideStrategy(change) {
return !this.changeIsOpen(change); return !this.changeIsOpen(change);
}, }
/** /**
* @param {Object} commitInfo * @param {Object} commitInfo
@@ -184,15 +190,15 @@
config: serverConfig, config: serverConfig,
}); });
return weblinks.length ? weblinks : null; return weblinks.length ? weblinks : null;
}, }
_computeStrategy(change) { _computeStrategy(change) {
return SubmitTypeLabel[change.submit_type]; return SubmitTypeLabel[change.submit_type];
}, }
_computeLabelNames(labels) { _computeLabelNames(labels) {
return Object.keys(labels).sort(); return Object.keys(labels).sort();
}, }
_handleTopicChanged(e, topic) { _handleTopicChanged(e, topic) {
const lastTopic = this.change.topic; const lastTopic = this.change.topic;
@@ -207,19 +213,19 @@
'topic-changed', {bubbles: true, composed: true})); 'topic-changed', {bubbles: true, composed: true}));
} }
}); });
}, }
_showAddTopic(changeRecord, settingTopic) { _showAddTopic(changeRecord, settingTopic) {
const hasTopic = !!changeRecord && const hasTopic = !!changeRecord &&
!!changeRecord.base && !!changeRecord.base.topic; !!changeRecord.base && !!changeRecord.base.topic;
return !hasTopic && !settingTopic; return !hasTopic && !settingTopic;
}, }
_showTopicChip(changeRecord, settingTopic) { _showTopicChip(changeRecord, settingTopic) {
const hasTopic = !!changeRecord && const hasTopic = !!changeRecord &&
!!changeRecord.base && !!changeRecord.base.topic; !!changeRecord.base && !!changeRecord.base.topic;
return hasTopic && !settingTopic; return hasTopic && !settingTopic;
}, }
_handleHashtagChanged(e) { _handleHashtagChanged(e) {
const lastHashtag = this.change.hashtag; const lastHashtag = this.change.hashtag;
@@ -234,7 +240,7 @@
'hashtag-changed', {bubbles: true, composed: true})); 'hashtag-changed', {bubbles: true, composed: true}));
} }
}); });
}, }
_computeTopicReadOnly(mutable, change) { _computeTopicReadOnly(mutable, change) {
return !mutable || return !mutable ||
@@ -242,7 +248,7 @@
!change.actions || !change.actions ||
!change.actions.topic || !change.actions.topic ||
!change.actions.topic.enabled; !change.actions.topic.enabled;
}, }
_computeHashtagReadOnly(mutable, change) { _computeHashtagReadOnly(mutable, change) {
return !mutable || return !mutable ||
@@ -250,7 +256,7 @@
!change.actions || !change.actions ||
!change.actions.hashtags || !change.actions.hashtags ||
!change.actions.hashtags.enabled; !change.actions.hashtags.enabled;
}, }
_computeAssigneeReadOnly(mutable, change) { _computeAssigneeReadOnly(mutable, change) {
return !mutable || return !mutable ||
@@ -258,17 +264,17 @@
!change.actions || !change.actions ||
!change.actions.assignee || !change.actions.assignee ||
!change.actions.assignee.enabled; !change.actions.assignee.enabled;
}, }
_computeTopicPlaceholder(_topicReadOnly) { _computeTopicPlaceholder(_topicReadOnly) {
// Action items in Material Design are uppercase -- placeholder label text // Action items in Material Design are uppercase -- placeholder label text
// is sentence case. // is sentence case.
return _topicReadOnly ? 'No topic' : 'ADD TOPIC'; return _topicReadOnly ? 'No topic' : 'ADD TOPIC';
}, }
_computeHashtagPlaceholder(_hashtagReadOnly) { _computeHashtagPlaceholder(_hashtagReadOnly) {
return _hashtagReadOnly ? '' : HASHTAG_ADD_MESSAGE; return _hashtagReadOnly ? '' : HASHTAG_ADD_MESSAGE;
}, }
_computeShowRequirements(change) { _computeShowRequirements(change) {
if (change.status !== this.ChangeStatus.NEW) { if (change.status !== this.ChangeStatus.NEW) {
@@ -281,7 +287,7 @@
const hasLabels = !!change.labels && const hasLabels = !!change.labels &&
Object.keys(change.labels).length > 0; Object.keys(change.labels).length > 0;
return hasRequirements || hasLabels || !!change.work_in_progress; return hasRequirements || hasLabels || !!change.work_in_progress;
}, }
/** /**
* @return {?Gerrit.PushCertificateValidation} object representing data for * @return {?Gerrit.PushCertificateValidation} object representing data for
@@ -326,7 +332,7 @@
default: default:
throw new Error(`unknown certificate status: ${key.status}`); throw new Error(`unknown certificate status: ${key.status}`);
} }
}, }
_problems(msg, key) { _problems(msg, key) {
if (!key || !key.problems || key.problems.length === 0) { if (!key || !key.problems || key.problems.length === 0) {
@@ -334,26 +340,26 @@
} }
return [msg + ':'].concat(key.problems).join('\n'); return [msg + ':'].concat(key.problems).join('\n');
}, }
_computeProjectURL(project) { _computeProjectURL(project) {
return Gerrit.Nav.getUrlForProjectChanges(project); return Gerrit.Nav.getUrlForProjectChanges(project);
}, }
_computeBranchURL(project, branch) { _computeBranchURL(project, branch) {
if (!this.change || !this.change.status) return ''; if (!this.change || !this.change.status) return '';
return Gerrit.Nav.getUrlForBranch(branch, project, return Gerrit.Nav.getUrlForBranch(branch, project,
this.change.status == this.ChangeStatus.NEW ? 'open' : this.change.status == this.ChangeStatus.NEW ? 'open' :
this.change.status.toLowerCase()); this.change.status.toLowerCase());
}, }
_computeTopicURL(topic) { _computeTopicURL(topic) {
return Gerrit.Nav.getUrlForTopic(topic); return Gerrit.Nav.getUrlForTopic(topic);
}, }
_computeHashtagURL(hashtag) { _computeHashtagURL(hashtag) {
return Gerrit.Nav.getUrlForHashtag(hashtag); return Gerrit.Nav.getUrlForHashtag(hashtag);
}, }
_handleTopicRemoved(e) { _handleTopicRemoved(e) {
const target = Polymer.dom(e).rootTarget; const target = Polymer.dom(e).rootTarget;
@@ -367,7 +373,7 @@
target.disabled = false; target.disabled = false;
return; return;
}); });
}, }
_handleHashtagRemoved(e) { _handleHashtagRemoved(e) {
e.preventDefault(); e.preventDefault();
@@ -382,15 +388,15 @@
target.disabled = false; target.disabled = false;
return; return;
}); });
}, }
_computeIsWip(change) { _computeIsWip(change) {
return !!change.work_in_progress; return !!change.work_in_progress;
}, }
_computeShowRoleClass(change, role) { _computeShowRoleClass(change, role) {
return this._getNonOwnerRole(change, role) ? '' : 'hideDisplay'; return this._getNonOwnerRole(change, role) ? '' : 'hideDisplay';
}, }
/** /**
* Get the user with the specified role on the change. Returns null if the * Get the user with the specified role on the change. Returns null if the
@@ -427,7 +433,7 @@
} }
return null; return null;
}, }
_computeParents(change) { _computeParents(change) {
if (!change || !change.current_revision || if (!change || !change.current_revision ||
@@ -436,11 +442,11 @@
return undefined; return undefined;
} }
return change.revisions[change.current_revision].commit.parents; return change.revisions[change.current_revision].commit.parents;
}, }
_computeParentsLabel(parents) { _computeParentsLabel(parents) {
return parents && parents.length > 1 ? 'Parents' : 'Parent'; return parents && parents.length > 1 ? 'Parents' : 'Parent';
}, }
_computeParentListClass(parents, parentIsCurrent) { _computeParentListClass(parents, parentIsCurrent) {
// Undefined check for polymer 2 // Undefined check for polymer 2
@@ -453,24 +459,26 @@
parents && parents.length > 1 ? 'merge' : 'nonMerge', parents && parents.length > 1 ? 'merge' : 'nonMerge',
parentIsCurrent ? 'current' : 'notCurrent', parentIsCurrent ? 'current' : 'notCurrent',
].join(' '); ].join(' ');
}, }
_computeIsMutable(account) { _computeIsMutable(account) {
return !!Object.keys(account).length; return !!Object.keys(account).length;
}, }
editTopic() { editTopic() {
if (this._topicReadOnly || this.change.topic) { return; } if (this._topicReadOnly || this.change.topic) { return; }
// Cannot use `this.$.ID` syntax because the element exists inside of a // Cannot use `this.$.ID` syntax because the element exists inside of a
// dom-if. // dom-if.
this.$$('.topicEditableLabel').open(); this.$$('.topicEditableLabel').open();
}, }
_getReviewerSuggestionsProvider(change) { _getReviewerSuggestionsProvider(change) {
const provider = GrReviewerSuggestionsProvider.create(this.$.restAPI, const provider = GrReviewerSuggestionsProvider.create(this.$.restAPI,
change._number, Gerrit.SUGGESTIONS_PROVIDERS_USERS_TYPES.ANY); change._number, Gerrit.SUGGESTIONS_PROVIDERS_USERS_TYPES.ANY);
provider.init(); provider.init();
return provider; return provider;
}, }
}); }
customElements.define(GrChangeMetadata.is, GrChangeMetadata);
})(); })();

View File

@@ -17,10 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-change-requirements', * @appliesMixin Gerrit.RESTClientMixin
*/
class GrChangeRequirements extends Polymer.mixinBehaviors( [
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-change-requirements'; }
properties: { static get properties() {
return {
/** @type {?} */ /** @type {?} */
change: Object, change: Object,
account: Object, account: Object,
@@ -45,19 +53,18 @@
type: Boolean, type: Boolean,
value: true, value: true,
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.RESTClientBehavior, return [
],
observers: [
'_computeLabels(change.labels.*)', '_computeLabels(change.labels.*)',
], ];
}
_computeShowWip(change) { _computeShowWip(change) {
return change.work_in_progress; return change.work_in_progress;
}, }
_computeRequirements(change) { _computeRequirements(change) {
const _requirements = []; const _requirements = [];
@@ -78,15 +85,15 @@
} }
return _requirements; return _requirements;
}, }
_computeRequirementClass(requirementStatus) { _computeRequirementClass(requirementStatus) {
return requirementStatus ? 'approved' : ''; return requirementStatus ? 'approved' : '';
}, }
_computeRequirementIcon(requirementStatus) { _computeRequirementIcon(requirementStatus) {
return requirementStatus ? 'gr-icons:check' : 'gr-icons:hourglass'; return requirementStatus ? 'gr-icons:check' : 'gr-icons:hourglass';
}, }
_computeLabels(labelsRecord) { _computeLabels(labelsRecord) {
const labels = labelsRecord.base; const labels = labelsRecord.base;
@@ -103,7 +110,7 @@
this.push(path, {label, icon, style, labelInfo}); this.push(path, {label, icon, style, labelInfo});
} }
}, }
/** /**
* @param {Object} labelInfo * @param {Object} labelInfo
@@ -114,7 +121,7 @@
if (labelInfo.approved) { return 'gr-icons:check'; } if (labelInfo.approved) { return 'gr-icons:check'; }
if (labelInfo.rejected) { return 'gr-icons:close'; } if (labelInfo.rejected) { return 'gr-icons:close'; }
return 'gr-icons:hourglass'; return 'gr-icons:hourglass';
}, }
/** /**
* @param {Object} labelInfo * @param {Object} labelInfo
@@ -123,28 +130,30 @@
if (labelInfo.approved) { return 'approved'; } if (labelInfo.approved) { return 'approved'; }
if (labelInfo.rejected) { return 'rejected'; } if (labelInfo.rejected) { return 'rejected'; }
return ''; return '';
}, }
_computeShowOptional(optionalFieldsRecord) { _computeShowOptional(optionalFieldsRecord) {
return optionalFieldsRecord.base.length ? '' : 'hidden'; return optionalFieldsRecord.base.length ? '' : 'hidden';
}, }
_computeLabelValue(value) { _computeLabelValue(value) {
return (value > 0 ? '+' : '') + value; return (value > 0 ? '+' : '') + value;
}, }
_computeShowHideIcon(showOptionalLabels) { _computeShowHideIcon(showOptionalLabels) {
return showOptionalLabels ? return showOptionalLabels ?
'gr-icons:expand-less' : 'gr-icons:expand-less' :
'gr-icons:expand-more'; 'gr-icons:expand-more';
}, }
_computeSectionClass(show) { _computeSectionClass(show) {
return show ? '' : 'hidden'; return show ? '' : 'hidden';
}, }
_handleShowHide(e) { _handleShowHide(e) {
this._showOptionalLabels = !this._showOptionalLabels; this._showOptionalLabels = !this._showOptionalLabels;
}, }
}); }
customElements.define(GrChangeRequirements.is, GrChangeRequirements);
})(); })();

View File

@@ -63,9 +63,21 @@
const CHANGE_RELOAD_TIMING_LABEL = 'ChangeReloaded'; const CHANGE_RELOAD_TIMING_LABEL = 'ChangeReloaded';
const SEND_REPLY_TIMING_LABEL = 'SendReply'; const SEND_REPLY_TIMING_LABEL = 'SendReply';
Polymer({ /**
is: 'gr-change-view', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.RESTClientMixin
*/
class GrChangeView extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-change-view'; }
/** /**
* Fired when the title of the page should change. * Fired when the title of the page should change.
* *
@@ -84,7 +96,8 @@
* @event show-auth-required * @event show-auth-required
*/ */
properties: { static get properties() {
return {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -282,32 +295,16 @@
_selectedFilesTabPluginEndpoint: { _selectedFilesTabPluginEndpoint: {
type: String, type: String,
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
],
listeners: {
'topic-changed': '_handleTopicChanged',
// When an overlay is opened in a mobile viewport, the overlay has a full
// screen view. When it has a full screen view, we do not want the
// background to be scrollable. This will eliminate background scroll by
// hiding most of the contents on the screen upon opening, and showing
// again upon closing.
'fullscreen-overlay-opened': '_handleHideBackgroundContent',
'fullscreen-overlay-closed': '_handleShowBackgroundContent',
'diff-comments-modified': '_handleReloadCommentThreads',
},
observers: [
'_labelsChanged(_change.labels.*)', '_labelsChanged(_change.labels.*)',
'_paramsAndChangeChanged(params, _change)', '_paramsAndChangeChanged(params, _change)',
'_patchNumChanged(_patchRange.patchNum)', '_patchNumChanged(_patchRange.patchNum)',
], ];
}
keyboardShortcuts() { keyboardShortcuts() {
return { return {
@@ -325,9 +322,32 @@
[this.Shortcut.OPEN_DIFF_PREFS]: '_handleOpenDiffPrefsShortcut', [this.Shortcut.OPEN_DIFF_PREFS]: '_handleOpenDiffPrefsShortcut',
[this.Shortcut.EDIT_TOPIC]: '_handleEditTopic', [this.Shortcut.EDIT_TOPIC]: '_handleEditTopic',
}; };
}, }
created() {
super.created();
this.addEventListener('topic-changed',
() => this._handleTopicChanged());
this.addEventListener(
// When an overlay is opened in a mobile viewport, the overlay has a full
// screen view. When it has a full screen view, we do not want the
// background to be scrollable. This will eliminate background scroll by
// hiding most of the contents on the screen upon opening, and showing
// again upon closing.
'fullscreen-overlay-opened',
() => this._handleHideBackgroundContent());
this.addEventListener('fullscreen-overlay-closed',
() => this._handleShowBackgroundContent());
this.addEventListener('diff-comments-modified',
() => this._handleReloadCommentThreads());
}
attached() { attached() {
super.attached();
this._getServerConfig().then(config => { this._getServerConfig().then(config => {
this._serverConfig = config; this._serverConfig = config;
}); });
@@ -363,24 +383,25 @@
this._handleCommitMessageCancel.bind(this)); this._handleCommitMessageCancel.bind(this));
this.listen(window, 'scroll', '_handleScroll'); this.listen(window, 'scroll', '_handleScroll');
this.listen(document, 'visibilitychange', '_handleVisibilityChange'); this.listen(document, 'visibilitychange', '_handleVisibilityChange');
}, }
detached() { detached() {
super.detached();
this.unlisten(window, 'scroll', '_handleScroll'); this.unlisten(window, 'scroll', '_handleScroll');
this.unlisten(document, 'visibilitychange', '_handleVisibilityChange'); this.unlisten(document, 'visibilitychange', '_handleVisibilityChange');
if (this._updateCheckTimerHandle) { if (this._updateCheckTimerHandle) {
this._cancelUpdateCheckTimer(); this._cancelUpdateCheckTimer();
} }
}, }
get messagesList() { get messagesList() {
return this.$$('gr-messages-list'); return this.$$('gr-messages-list');
}, }
get threadList() { get threadList() {
return this.$$('gr-thread-list'); return this.$$('gr-thread-list');
}, }
/** /**
* @param {boolean=} opt_reset * @param {boolean=} opt_reset
@@ -397,7 +418,7 @@
this.set('viewState.diffMode', 'SIDE_BY_SIDE'); this.set('viewState.diffMode', 'SIDE_BY_SIDE');
} }
}); });
}, }
_handleToggleDiffMode(e) { _handleToggleDiffMode(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -409,11 +430,11 @@
} else { } else {
this.$.fileListHeader.setDiffViewMode(DiffViewMode.SIDE_BY_SIDE); this.$.fileListHeader.setDiffViewMode(DiffViewMode.SIDE_BY_SIDE);
} }
}, }
_handleCommentTabChange() { _handleCommentTabChange() {
this._showMessagesView = this.$.commentTabs.selected === 0; this._showMessagesView = this.$.commentTabs.selected === 0;
}, }
_handleFileTabChange(e) { _handleFileTabChange(e) {
const selectedIndex = this.$$('#primaryTabs').selected; const selectedIndex = this.$$('#primaryTabs').selected;
@@ -429,7 +450,7 @@
this.$.reporting.reportInteraction('tab-changed', this.$.reporting.reportInteraction('tab-changed',
`tabname: ${tabName}, source: ${source}`); `tabname: ${tabName}, source: ${source}`);
} }
}, }
_handleShowTab(e) { _handleShowTab(e) {
const idx = this._dynamicTabContentEndpoints.indexOf(e.detail.tab); const idx = this._dynamicTabContentEndpoints.indexOf(e.detail.tab);
@@ -440,12 +461,12 @@
this.$$('#primaryTabs').selected = idx + 1; this.$$('#primaryTabs').selected = idx + 1;
this.$$('#primaryTabs').scrollIntoView(); this.$$('#primaryTabs').scrollIntoView();
this.$.reporting.reportInteraction('show-tab', e.detail.tab); this.$.reporting.reportInteraction('show-tab', e.detail.tab);
}, }
_handleEditCommitMessage(e) { _handleEditCommitMessage(e) {
this._editingCommitMessage = true; this._editingCommitMessage = true;
this.$.commitMessageEditor.focusTextarea(); this.$.commitMessageEditor.focusTextarea();
}, }
_handleCommitMessageSave(e) { _handleCommitMessageSave(e) {
// Trim trailing whitespace from each line. // Trim trailing whitespace from each line.
@@ -466,15 +487,15 @@
}).catch(err => { }).catch(err => {
this.$.commitMessageEditor.disabled = false; this.$.commitMessageEditor.disabled = false;
}); });
}, }
_reloadWindow() { _reloadWindow() {
window.location.reload(); window.location.reload();
}, }
_handleCommitMessageCancel(e) { _handleCommitMessageCancel(e) {
this._editingCommitMessage = false; this._editingCommitMessage = false;
}, }
_computeChangeStatusChips(change, mergeable, submitEnabled) { _computeChangeStatusChips(change, mergeable, submitEnabled) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -498,7 +519,7 @@
submitEnabled: !!submitEnabled, submitEnabled: !!submitEnabled,
}; };
return this.changeStatuses(change, options); return this.changeStatuses(change, options);
}, }
_computeHideEditCommitMessage(loggedIn, editing, change, editMode) { _computeHideEditCommitMessage(loggedIn, editing, change, editMode) {
if (!loggedIn || editing || if (!loggedIn || editing ||
@@ -508,7 +529,7 @@
} }
return false; return false;
}, }
_handleReloadCommentThreads() { _handleReloadCommentThreads() {
// Get any new drafts that have been saved in the diff view and show // Get any new drafts that have been saved in the diff view and show
@@ -518,7 +539,7 @@
.map(c => Object.assign({}, c)); .map(c => Object.assign({}, c));
Polymer.dom.flush(); Polymer.dom.flush();
}); });
}, }
_handleReloadDiffComments(e) { _handleReloadDiffComments(e) {
// Keeps the file list counts updated. // Keeps the file list counts updated.
@@ -529,7 +550,7 @@
e.detail.path); e.detail.path);
Polymer.dom.flush(); Polymer.dom.flush();
}); });
}, }
_computeTotalCommentCounts(unresolvedCount, changeComments) { _computeTotalCommentCounts(unresolvedCount, changeComments) {
if (!changeComments) return undefined; if (!changeComments) return undefined;
@@ -543,7 +564,7 @@
// Add a comma and space if both unresolved and draft comments exist. // Add a comma and space if both unresolved and draft comments exist.
(unresolvedString && draftString ? ', ' : '') + (unresolvedString && draftString ? ', ' : '') +
draftString; draftString;
}, }
_handleCommentSave(e) { _handleCommentSave(e) {
const draft = e.detail.comment; const draft = e.detail.comment;
@@ -575,7 +596,7 @@
return (c1.line || -1) - (c2.line || -1); return (c1.line || -1) - (c2.line || -1);
}); });
this._diffDrafts = diffDrafts; this._diffDrafts = diffDrafts;
}, }
_handleCommentDiscard(e) { _handleCommentDiscard(e) {
const draft = e.detail.comment; const draft = e.detail.comment;
@@ -609,16 +630,16 @@
delete diffDrafts[draft.path]; delete diffDrafts[draft.path];
} }
this._diffDrafts = diffDrafts; this._diffDrafts = diffDrafts;
}, }
_handleReplyTap(e) { _handleReplyTap(e) {
e.preventDefault(); e.preventDefault();
this._openReplyDialog(this.$.replyDialog.FocusTarget.ANY); this._openReplyDialog(this.$.replyDialog.FocusTarget.ANY);
}, }
_handleOpenDiffPrefs() { _handleOpenDiffPrefs() {
this.$.fileList.openDiffPrefs(); this.$.fileList.openDiffPrefs();
}, }
_handleOpenIncludedInDialog() { _handleOpenIncludedInDialog() {
this.$.includedInDialog.loadData().then(() => { this.$.includedInDialog.loadData().then(() => {
@@ -626,11 +647,11 @@
this.$.includedInOverlay.refit(); this.$.includedInOverlay.refit();
}); });
this.$.includedInOverlay.open(); this.$.includedInOverlay.open();
}, }
_handleIncludedInDialogClose(e) { _handleIncludedInDialogClose(e) {
this.$.includedInOverlay.close(); this.$.includedInOverlay.close();
}, }
_handleOpenDownloadDialog() { _handleOpenDownloadDialog() {
this.$.downloadOverlay.open().then(() => { this.$.downloadOverlay.open().then(() => {
@@ -638,19 +659,19 @@
.setFocusStops(this.$.downloadDialog.getFocusStops()); .setFocusStops(this.$.downloadDialog.getFocusStops());
this.$.downloadDialog.focus(); this.$.downloadDialog.focus();
}); });
}, }
_handleDownloadDialogClose(e) { _handleDownloadDialogClose(e) {
this.$.downloadOverlay.close(); this.$.downloadOverlay.close();
}, }
_handleOpenUploadHelpDialog(e) { _handleOpenUploadHelpDialog(e) {
this.$.uploadHelpOverlay.open(); this.$.uploadHelpOverlay.open();
}, }
_handleCloseUploadHelpDialog(e) { _handleCloseUploadHelpDialog(e) {
this.$.uploadHelpOverlay.close(); this.$.uploadHelpOverlay.close();
}, }
_handleMessageReply(e) { _handleMessageReply(e) {
const msg = e.detail.message.message; const msg = e.detail.message.message;
@@ -658,33 +679,33 @@
line => { return '> ' + line; }).join('\n') + '\n\n'; line => { return '> ' + line; }).join('\n') + '\n\n';
this.$.replyDialog.quote = quoteStr; this.$.replyDialog.quote = quoteStr;
this._openReplyDialog(this.$.replyDialog.FocusTarget.BODY); this._openReplyDialog(this.$.replyDialog.FocusTarget.BODY);
}, }
_handleHideBackgroundContent() { _handleHideBackgroundContent() {
this.$.mainContent.classList.add('overlayOpen'); this.$.mainContent.classList.add('overlayOpen');
}, }
_handleShowBackgroundContent() { _handleShowBackgroundContent() {
this.$.mainContent.classList.remove('overlayOpen'); this.$.mainContent.classList.remove('overlayOpen');
}, }
_handleReplySent(e) { _handleReplySent(e) {
this.$.replyOverlay.close(); this.$.replyOverlay.close();
this._reload().then(() => { this._reload().then(() => {
this.$.reporting.timeEnd(SEND_REPLY_TIMING_LABEL); this.$.reporting.timeEnd(SEND_REPLY_TIMING_LABEL);
}); });
}, }
_handleReplyCancel(e) { _handleReplyCancel(e) {
this.$.replyOverlay.close(); this.$.replyOverlay.close();
}, }
_handleReplyAutogrow(e) { _handleReplyAutogrow(e) {
// If the textarea resizes, we need to re-fit the overlay. // If the textarea resizes, we need to re-fit the overlay.
this.debounce('reply-overlay-refit', () => { this.debounce('reply-overlay-refit', () => {
this.$.replyOverlay.refit(); this.$.replyOverlay.refit();
}, REPLY_REFIT_DEBOUNCE_INTERVAL_MS); }, REPLY_REFIT_DEBOUNCE_INTERVAL_MS);
}, }
_handleShowReplyDialog(e) { _handleShowReplyDialog(e) {
let target = this.$.replyDialog.FocusTarget.REVIEWERS; let target = this.$.replyDialog.FocusTarget.REVIEWERS;
@@ -692,25 +713,25 @@
target = this.$.replyDialog.FocusTarget.CCS; target = this.$.replyDialog.FocusTarget.CCS;
} }
this._openReplyDialog(target); this._openReplyDialog(target);
}, }
_handleScroll() { _handleScroll() {
this.debounce('scroll', () => { this.debounce('scroll', () => {
this.viewState.scrollTop = document.body.scrollTop; this.viewState.scrollTop = document.body.scrollTop;
}, 150); }, 150);
}, }
_setShownFiles(e) { _setShownFiles(e) {
this._shownFileCount = e.detail.length; this._shownFileCount = e.detail.length;
}, }
_expandAllDiffs() { _expandAllDiffs() {
this.$.fileList.expandAllDiffs(); this.$.fileList.expandAllDiffs();
}, }
_collapseAllDiffs() { _collapseAllDiffs() {
this.$.fileList.collapseAllDiffs(); this.$.fileList.collapseAllDiffs();
}, }
_paramsChanged(value) { _paramsChanged(value) {
// Change the content of the comment tabs back to messages list, but // Change the content of the comment tabs back to messages list, but
@@ -764,7 +785,7 @@
this._reload(true).then(() => { this._reload(true).then(() => {
this._performPostLoadTasks(); this._performPostLoadTasks();
}); });
}, }
_sendShowChangeEvent() { _sendShowChangeEvent() {
this.$.jsAPI.handleEvent(this.$.jsAPI.EventType.SHOW_CHANGE, { this.$.jsAPI.handleEvent(this.$.jsAPI.EventType.SHOW_CHANGE, {
@@ -772,7 +793,7 @@
patchNum: this._patchRange.patchNum, patchNum: this._patchRange.patchNum,
info: {mergeable: this._mergeable}, info: {mergeable: this._mergeable},
}); });
}, }
_setPrimaryTab() { _setPrimaryTab() {
// Selected has to be set after the paper-tabs are visible because // Selected has to be set after the paper-tabs are visible because
@@ -780,7 +801,7 @@
this.$.commentTabs.selected = 0; this.$.commentTabs.selected = 0;
const primaryTabs = this.$$('#primaryTabs'); const primaryTabs = this.$$('#primaryTabs');
if (primaryTabs) primaryTabs.selected = 0; if (primaryTabs) primaryTabs.selected = 0;
}, }
_performPostLoadTasks() { _performPostLoadTasks() {
this._maybeShowReplyDialog(); this._maybeShowReplyDialog();
@@ -799,7 +820,7 @@
} }
this._initialLoadComplete = true; this._initialLoadComplete = true;
}); });
}, }
_paramsAndChangeChanged(value, change) { _paramsAndChangeChanged(value, change) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -815,16 +836,16 @@
patchRangeState.patchNum !== this._patchRange.patchNum) { patchRangeState.patchNum !== this._patchRange.patchNum) {
this._resetFileListViewState(); this._resetFileListViewState();
} }
}, }
_viewStateChanged(viewState) { _viewStateChanged(viewState) {
this._numFilesShown = viewState.numFilesShown ? this._numFilesShown = viewState.numFilesShown ?
viewState.numFilesShown : DEFAULT_NUM_FILES_SHOWN; viewState.numFilesShown : DEFAULT_NUM_FILES_SHOWN;
}, }
_numFilesShownChanged(numFilesShown) { _numFilesShownChanged(numFilesShown) {
this.viewState.numFilesShown = numFilesShown; this.viewState.numFilesShown = numFilesShown;
}, }
_handleMessageAnchorTap(e) { _handleMessageAnchorTap(e) {
const hash = MSG_PREFIX + e.detail.id; const hash = MSG_PREFIX + e.detail.id;
@@ -832,18 +853,18 @@
this._patchRange.patchNum, this._patchRange.basePatchNum, this._patchRange.patchNum, this._patchRange.basePatchNum,
this._editMode, hash); this._editMode, hash);
history.replaceState(null, '', url); history.replaceState(null, '', url);
}, }
_maybeScrollToMessage(hash) { _maybeScrollToMessage(hash) {
if (hash.startsWith(MSG_PREFIX)) { if (hash.startsWith(MSG_PREFIX)) {
this.messagesList.scrollToMessage(hash.substr(MSG_PREFIX.length)); this.messagesList.scrollToMessage(hash.substr(MSG_PREFIX.length));
} }
}, }
_getLocationSearch() { _getLocationSearch() {
// Not inlining to make it easier to test. // Not inlining to make it easier to test.
return window.location.search; return window.location.search;
}, }
_getUrlParameter(param) { _getUrlParameter(param) {
const pageURL = this._getLocationSearch().substring(1); const pageURL = this._getLocationSearch().substring(1);
@@ -855,7 +876,7 @@
} }
} }
return null; return null;
}, }
_maybeShowRevertDialog() { _maybeShowRevertDialog() {
Gerrit.awaitPluginsLoaded() Gerrit.awaitPluginsLoaded()
@@ -871,7 +892,7 @@
this.$.actions.showRevertDialog(); this.$.actions.showRevertDialog();
} }
}); });
}, }
_maybeShowReplyDialog() { _maybeShowReplyDialog() {
this._getLoggedIn().then(loggedIn => { this._getLoggedIn().then(loggedIn => {
@@ -885,7 +906,7 @@
this.set('viewState.showReplyDialog', false); this.set('viewState.showReplyDialog', false);
} }
}); });
}, }
_resetFileListViewState() { _resetFileListViewState() {
this.set('viewState.selectedFileIndex', 0); this.set('viewState.selectedFileIndex', 0);
@@ -899,7 +920,7 @@
} }
this.set('viewState.changeNum', this._changeNum); this.set('viewState.changeNum', this._changeNum);
this.set('viewState.patchRange', this._patchRange); this.set('viewState.patchRange', this._patchRange);
}, }
_changeChanged(change) { _changeChanged(change) {
if (!change || !this._patchRange || !this._allPatchSets) { return; } if (!change || !this._patchRange || !this._allPatchSets) { return; }
@@ -915,7 +936,7 @@
const title = change.subject + ' (' + change.change_id.substr(0, 9) + ')'; const title = change.subject + ' (' + change.change_id.substr(0, 9) + ')';
this.fire('title-change', {title}); this.fire('title-change', {title});
}, }
/** /**
* Gets base patch number, if it is a parent try and decide from * Gets base patch number, if it is a parent try and decide from
@@ -947,19 +968,19 @@
} }
return 'PARENT'; return 'PARENT';
}, }
_computeShowPrimaryTabs(dynamicTabHeaderEndpoints) { _computeShowPrimaryTabs(dynamicTabHeaderEndpoints) {
return dynamicTabHeaderEndpoints && dynamicTabHeaderEndpoints.length > 0; return dynamicTabHeaderEndpoints && dynamicTabHeaderEndpoints.length > 0;
}, }
_computeChangeUrl(change) { _computeChangeUrl(change) {
return Gerrit.Nav.getUrlForChange(change); return Gerrit.Nav.getUrlForChange(change);
}, }
_computeShowCommitInfo(changeStatus, current_revision) { _computeShowCommitInfo(changeStatus, current_revision) {
return changeStatus === 'Merged' && current_revision; return changeStatus === 'Merged' && current_revision;
}, }
_computeMergedCommitInfo(current_revision, revisions) { _computeMergedCommitInfo(current_revision, revisions) {
const rev = revisions[current_revision]; const rev = revisions[current_revision];
@@ -968,11 +989,11 @@
// in <gr-commit-info>. @see Issue 5337 // in <gr-commit-info>. @see Issue 5337
if (!rev.commit.commit) { rev.commit.commit = current_revision; } if (!rev.commit.commit) { rev.commit.commit = current_revision; }
return rev.commit; return rev.commit;
}, }
_computeChangeIdClass(displayChangeId) { _computeChangeIdClass(displayChangeId) {
return displayChangeId === CHANGE_ID_ERROR.MISMATCH ? 'warning' : ''; return displayChangeId === CHANGE_ID_ERROR.MISMATCH ? 'warning' : '';
}, }
_computeTitleAttributeWarning(displayChangeId) { _computeTitleAttributeWarning(displayChangeId) {
if (displayChangeId === CHANGE_ID_ERROR.MISMATCH) { if (displayChangeId === CHANGE_ID_ERROR.MISMATCH) {
@@ -980,7 +1001,7 @@
} else if (displayChangeId === CHANGE_ID_ERROR.MISSING) { } else if (displayChangeId === CHANGE_ID_ERROR.MISSING) {
return 'No Change-Id in commit message'; return 'No Change-Id in commit message';
} }
}, }
_computeChangeIdCommitMessageError(commitMessage, change) { _computeChangeIdCommitMessageError(commitMessage, change) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -1010,11 +1031,11 @@
} }
// There is no change-id in the commit message. // There is no change-id in the commit message.
return CHANGE_ID_ERROR.MISSING; return CHANGE_ID_ERROR.MISSING;
}, }
_computeLabelNames(labels) { _computeLabelNames(labels) {
return Object.keys(labels).sort(); return Object.keys(labels).sort();
}, }
_computeLabelValues(labelName, labels) { _computeLabelValues(labelName, labels) {
const result = []; const result = [];
@@ -1039,7 +1060,7 @@
} }
} }
return result; return result;
}, }
_computeReplyButtonLabel(changeRecord, canStartReview) { _computeReplyButtonLabel(changeRecord, canStartReview) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -1061,7 +1082,7 @@
label += ' (' + draftCount + ')'; label += ' (' + draftCount + ')';
} }
return label; return label;
}, }
_handleOpenReplyDialog(e) { _handleOpenReplyDialog(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -1077,7 +1098,7 @@
e.preventDefault(); e.preventDefault();
this._openReplyDialog(this.$.replyDialog.FocusTarget.ANY); this._openReplyDialog(this.$.replyDialog.FocusTarget.ANY);
}); });
}, }
_handleOpenDownloadDialogShortcut(e) { _handleOpenDownloadDialogShortcut(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -1085,7 +1106,7 @@
e.preventDefault(); e.preventDefault();
this.$.downloadOverlay.open(); this.$.downloadOverlay.open();
}, }
_handleEditTopic(e) { _handleEditTopic(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -1093,13 +1114,13 @@
e.preventDefault(); e.preventDefault();
this.$.metadata.editTopic(); this.$.metadata.editTopic();
}, }
_handleRefreshChange(e) { _handleRefreshChange(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
e.preventDefault(); e.preventDefault();
Gerrit.Nav.navigateToChange(this._change); Gerrit.Nav.navigateToChange(this._change);
}, }
_handleToggleChangeStar(e) { _handleToggleChangeStar(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -1107,7 +1128,7 @@
e.preventDefault(); e.preventDefault();
this.$.changeStar.toggleStar(); this.$.changeStar.toggleStar();
}, }
_handleUpToDashboard(e) { _handleUpToDashboard(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -1115,7 +1136,7 @@
e.preventDefault(); e.preventDefault();
this._determinePageBack(); this._determinePageBack();
}, }
_handleExpandAllMessages(e) { _handleExpandAllMessages(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -1123,7 +1144,7 @@
e.preventDefault(); e.preventDefault();
this.messagesList.handleExpandCollapse(true); this.messagesList.handleExpandCollapse(true);
}, }
_handleCollapseAllMessages(e) { _handleCollapseAllMessages(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -1131,7 +1152,7 @@
e.preventDefault(); e.preventDefault();
this.messagesList.handleExpandCollapse(false); this.messagesList.handleExpandCollapse(false);
}, }
_handleOpenDiffPrefsShortcut(e) { _handleOpenDiffPrefsShortcut(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -1141,14 +1162,14 @@
e.preventDefault(); e.preventDefault();
this.$.fileList.openDiffPrefs(); this.$.fileList.openDiffPrefs();
}, }
_determinePageBack() { _determinePageBack() {
// Default backPage to root if user came to change view page // Default backPage to root if user came to change view page
// via an email link, etc. // via an email link, etc.
Gerrit.Nav.navigateToRelativeUrl(this.backPage || Gerrit.Nav.navigateToRelativeUrl(this.backPage ||
Gerrit.Nav.getUrlForRoot()); Gerrit.Nav.getUrlForRoot());
}, }
_handleLabelRemoved(splices, path) { _handleLabelRemoved(splices, path) {
for (const splice of splices) { for (const splice of splices) {
@@ -1163,7 +1184,7 @@
} }
} }
} }
}, }
_labelsChanged(changeRecord) { _labelsChanged(changeRecord) {
if (!changeRecord) { return; } if (!changeRecord) { return; }
@@ -1174,7 +1195,7 @@
this.$.jsAPI.handleEvent(this.$.jsAPI.EventType.LABEL_CHANGE, { this.$.jsAPI.handleEvent(this.$.jsAPI.EventType.LABEL_CHANGE, {
change: this._change, change: this._change,
}); });
}, }
/** /**
* @param {string=} opt_section * @param {string=} opt_section
@@ -1186,7 +1207,7 @@
Polymer.dom.flush(); Polymer.dom.flush();
this.$.replyOverlay.center(); this.$.replyOverlay.center();
}); });
}, }
_handleReloadChange(e) { _handleReloadChange(e) {
return this._reload().then(() => { return this._reload().then(() => {
@@ -1197,19 +1218,19 @@
Gerrit.Nav.navigateToChange(this._change); Gerrit.Nav.navigateToChange(this._change);
} }
}); });
}, }
_handleGetChangeDetailError(response) { _handleGetChangeDetailError(response) {
this.fire('page-error', {response}); this.fire('page-error', {response});
}, }
_getLoggedIn() { _getLoggedIn() {
return this.$.restAPI.getLoggedIn(); return this.$.restAPI.getLoggedIn();
}, }
_getServerConfig() { _getServerConfig() {
return this.$.restAPI.getConfig(); return this.$.restAPI.getConfig();
}, }
_getProjectConfig() { _getProjectConfig() {
if (!this._change) return; if (!this._change) return;
@@ -1217,18 +1238,18 @@
config => { config => {
this._projectConfig = config; this._projectConfig = config;
}); });
}, }
_getPreferences() { _getPreferences() {
return this.$.restAPI.getPreferences(); return this.$.restAPI.getPreferences();
}, }
_prepareCommitMsgForLinkify(msg) { _prepareCommitMsgForLinkify(msg) {
// TODO(wyatta) switch linkify sequence, see issue 5526. // TODO(wyatta) switch linkify sequence, see issue 5526.
// This is a zero-with space. It is added to prevent the linkify library // This is a zero-with space. It is added to prevent the linkify library
// from including R= or CC= as part of the email address. // from including R= or CC= as part of the email address.
return msg.replace(REVIEWERS_REGEX, '$1=\u200B'); return msg.replace(REVIEWERS_REGEX, '$1=\u200B');
}, }
/** /**
* Utility function to make the necessary modifications to a change in the * Utility function to make the necessary modifications to a change in the
@@ -1258,7 +1279,7 @@
change.revisions[edit.commit.commit].actions = change.revisions[edit.commit.commit].actions =
change.revisions[edit.base_revision].actions; change.revisions[edit.base_revision].actions;
} }
}, }
_getChangeDetail() { _getChangeDetail() {
const detailCompletes = this.$.restAPI.getChangeDetail( const detailCompletes = this.$.restAPI.getChangeDetail(
@@ -1312,16 +1333,16 @@
parseInt(this._patchRange.patchNum, 10)); parseInt(this._patchRange.patchNum, 10));
} }
}); });
}, }
_isSubmitEnabled(revisionActions) { _isSubmitEnabled(revisionActions) {
return !!(revisionActions && revisionActions.submit && return !!(revisionActions && revisionActions.submit &&
revisionActions.submit.enabled); revisionActions.submit.enabled);
}, }
_getEdit() { _getEdit() {
return this.$.restAPI.getChangeEdit(this._changeNum, true); return this.$.restAPI.getChangeEdit(this._changeNum, true);
}, }
_getLatestCommitMessage() { _getLatestCommitMessage() {
return this.$.restAPI.getChangeCommitInfo(this._changeNum, return this.$.restAPI.getChangeCommitInfo(this._changeNum,
@@ -1330,7 +1351,7 @@
this._latestCommitMessage = this._latestCommitMessage =
this._prepareCommitMsgForLinkify(commitInfo.message); this._prepareCommitMsgForLinkify(commitInfo.message);
}); });
}, }
_getLatestRevisionSHA(change) { _getLatestRevisionSHA(change) {
if (change.current_revision) { if (change.current_revision) {
@@ -1349,7 +1370,7 @@
} }
} }
return latestRev; return latestRev;
}, }
_getCommitInfo() { _getCommitInfo() {
return this.$.restAPI.getChangeCommitInfo( return this.$.restAPI.getChangeCommitInfo(
@@ -1357,13 +1378,13 @@
commitInfo => { commitInfo => {
this._commitInfo = commitInfo; this._commitInfo = commitInfo;
}); });
}, }
_reloadDraftsWithCallback(e) { _reloadDraftsWithCallback(e) {
return this._reloadDrafts().then(() => { return this._reloadDrafts().then(() => {
return e.detail.resolve(); return e.detail.resolve();
}); });
}, }
/** /**
* Fetches a new changeComment object, and data for all types of comments * Fetches a new changeComment object, and data for all types of comments
@@ -1377,7 +1398,7 @@
this._commentThreads = this._changeComments.getAllThreadsForChange() this._commentThreads = this._changeComments.getAllThreadsForChange()
.map(c => Object.assign({}, c)); .map(c => Object.assign({}, c));
}); });
}, }
/** /**
* Fetches a new changeComment object, but only updated data for drafts is * Fetches a new changeComment object, but only updated data for drafts is
@@ -1389,7 +1410,7 @@
this._changeComments = comments; this._changeComments = comments;
this._diffDrafts = Object.assign({}, this._changeComments.drafts); this._diffDrafts = Object.assign({}, this._changeComments.drafts);
}); });
}, }
/** /**
* Reload the change. * Reload the change.
@@ -1496,7 +1517,7 @@
}); });
return coreDataPromise; return coreDataPromise;
}, }
/** /**
* Kicks off requests for resources that rely on the patch range * Kicks off requests for resources that rely on the patch range
@@ -1507,7 +1528,7 @@
this._getCommitInfo(), this._getCommitInfo(),
this.$.fileList.reload(), this.$.fileList.reload(),
]); ]);
}, }
_getMergeability() { _getMergeability() {
if (!this._change) { if (!this._change) {
@@ -1527,59 +1548,59 @@
return this.$.restAPI.getMergeable(this._changeNum).then(m => { return this.$.restAPI.getMergeable(this._changeNum).then(m => {
this._mergeable = m.mergeable; this._mergeable = m.mergeable;
}); });
}, }
_computeCanStartReview(change) { _computeCanStartReview(change) {
return !!(change.actions && change.actions.ready && return !!(change.actions && change.actions.ready &&
change.actions.ready.enabled); change.actions.ready.enabled);
}, }
_computeReplyDisabled() { return false; }, _computeReplyDisabled() { return false; }
_computeChangePermalinkAriaLabel(changeNum) { _computeChangePermalinkAriaLabel(changeNum) {
return 'Change ' + changeNum; return 'Change ' + changeNum;
}, }
_computeCommitClass(collapsed, commitMessage) { _computeCommitClass(collapsed, commitMessage) {
if (this._computeCommitToggleHidden(commitMessage)) { return ''; } if (this._computeCommitToggleHidden(commitMessage)) { return ''; }
return collapsed ? 'collapsed' : ''; return collapsed ? 'collapsed' : '';
}, }
_computeRelatedChangesClass(collapsed) { _computeRelatedChangesClass(collapsed) {
return collapsed ? 'collapsed' : ''; return collapsed ? 'collapsed' : '';
}, }
_computeCollapseText(collapsed) { _computeCollapseText(collapsed) {
// Symbols are up and down triangles. // Symbols are up and down triangles.
return collapsed ? '\u25bc Show more' : '\u25b2 Show less'; return collapsed ? '\u25bc Show more' : '\u25b2 Show less';
}, }
_toggleCommitCollapsed() { _toggleCommitCollapsed() {
this._commitCollapsed = !this._commitCollapsed; this._commitCollapsed = !this._commitCollapsed;
if (this._commitCollapsed) { if (this._commitCollapsed) {
window.scrollTo(0, 0); window.scrollTo(0, 0);
} }
}, }
_toggleRelatedChangesCollapsed() { _toggleRelatedChangesCollapsed() {
this._relatedChangesCollapsed = !this._relatedChangesCollapsed; this._relatedChangesCollapsed = !this._relatedChangesCollapsed;
if (this._relatedChangesCollapsed) { if (this._relatedChangesCollapsed) {
window.scrollTo(0, 0); window.scrollTo(0, 0);
} }
}, }
_computeCommitToggleHidden(commitMessage) { _computeCommitToggleHidden(commitMessage) {
if (!commitMessage) { return true; } if (!commitMessage) { return true; }
return commitMessage.split('\n').length < MIN_LINES_FOR_COMMIT_COLLAPSE; return commitMessage.split('\n').length < MIN_LINES_FOR_COMMIT_COLLAPSE;
}, }
_getOffsetHeight(element) { _getOffsetHeight(element) {
return element.offsetHeight; return element.offsetHeight;
}, }
_getScrollHeight(element) { _getScrollHeight(element) {
return element.scrollHeight; return element.scrollHeight;
}, }
/** /**
* Get the line height of an element to the nearest integer. * Get the line height of an element to the nearest integer.
@@ -1587,7 +1608,7 @@
_getLineHeight(element) { _getLineHeight(element) {
const lineHeightStr = getComputedStyle(element).lineHeight; const lineHeightStr = getComputedStyle(element).lineHeight;
return Math.round(lineHeightStr.slice(0, lineHeightStr.length - 2)); return Math.round(lineHeightStr.slice(0, lineHeightStr.length - 2));
}, }
/** /**
* New max height for the related changes section, shorter than the existing * New max height for the related changes section, shorter than the existing
@@ -1646,7 +1667,7 @@
} }
this.updateStyles(stylesToUpdate); this.updateStyles(stylesToUpdate);
}, }
_computeShowRelatedToggle() { _computeShowRelatedToggle() {
// Make sure the max height has been applied, since there is now content // Make sure the max height has been applied, since there is now content
@@ -1666,7 +1687,7 @@
return this._showRelatedToggle = true; return this._showRelatedToggle = true;
} }
this._showRelatedToggle = false; this._showRelatedToggle = false;
}, }
_updateToggleContainerClass(showRelatedToggle) { _updateToggleContainerClass(showRelatedToggle) {
if (showRelatedToggle) { if (showRelatedToggle) {
@@ -1674,7 +1695,7 @@
} else { } else {
this.$.relatedChangesToggle.classList.remove('showToggle'); this.$.relatedChangesToggle.classList.remove('showToggle');
} }
}, }
_startUpdateCheckTimer() { _startUpdateCheckTimer() {
if (!this._serverConfig || if (!this._serverConfig ||
@@ -1717,14 +1738,14 @@
}); });
}); });
}, this._serverConfig.change.update_delay * 1000); }, this._serverConfig.change.update_delay * 1000);
}, }
_cancelUpdateCheckTimer() { _cancelUpdateCheckTimer() {
if (this._updateCheckTimerHandle) { if (this._updateCheckTimerHandle) {
this.cancelAsync(this._updateCheckTimerHandle); this.cancelAsync(this._updateCheckTimerHandle);
} }
this._updateCheckTimerHandle = null; this._updateCheckTimerHandle = null;
}, }
_handleVisibilityChange() { _handleVisibilityChange() {
if (document.hidden && this._updateCheckTimerHandle) { if (document.hidden && this._updateCheckTimerHandle) {
@@ -1732,17 +1753,17 @@
} else if (!this._updateCheckTimerHandle) { } else if (!this._updateCheckTimerHandle) {
this._startUpdateCheckTimer(); this._startUpdateCheckTimer();
} }
}, }
_handleTopicChanged() { _handleTopicChanged() {
this.$.relatedChanges.reload(); this.$.relatedChanges.reload();
}, }
_computeHeaderClass(editMode) { _computeHeaderClass(editMode) {
const classes = ['header']; const classes = ['header'];
if (editMode) { classes.push('editMode'); } if (editMode) { classes.push('editMode'); }
return classes.join(' '); return classes.join(' ');
}, }
_computeEditMode(patchRangeRecord, paramsRecord) { _computeEditMode(patchRangeRecord, paramsRecord) {
if ([patchRangeRecord, paramsRecord].some(arg => arg === undefined)) { if ([patchRangeRecord, paramsRecord].some(arg => arg === undefined)) {
@@ -1753,7 +1774,7 @@
const patchRange = patchRangeRecord.base || {}; const patchRange = patchRangeRecord.base || {};
return this.patchNumEquals(patchRange.patchNum, this.EDIT_NAME); return this.patchNumEquals(patchRange.patchNum, this.EDIT_NAME);
}, }
_handleFileActionTap(e) { _handleFileActionTap(e) {
e.preventDefault(); e.preventDefault();
@@ -1775,11 +1796,11 @@
controls.openRestoreDialog(path); controls.openRestoreDialog(path);
break; break;
} }
}, }
_computeCommitMessageKey(number, revision) { _computeCommitMessageKey(number, revision) {
return `c${number}_rev${revision}`; return `c${number}_rev${revision}`;
}, }
_patchNumChanged(patchNumStr) { _patchNumChanged(patchNumStr) {
if (!this._selectedRevision) { if (!this._selectedRevision) {
@@ -1791,7 +1812,7 @@
} }
this._selectedRevision = Object.values(this._change.revisions).find( this._selectedRevision = Object.values(this._change.revisions).find(
revision => revision._number === patchNum); revision => revision._number === patchNum);
}, }
/** /**
* If an edit exists already, load it. Otherwise, toggle edit mode via the * If an edit exists already, load it. Otherwise, toggle edit mode via the
@@ -1814,31 +1835,33 @@
patchNum = this._patchRange.patchNum; patchNum = this._patchRange.patchNum;
} }
Gerrit.Nav.navigateToChange(this._change, patchNum, null, true); Gerrit.Nav.navigateToChange(this._change, patchNum, null, true);
}, }
_handleStopEditTap() { _handleStopEditTap() {
Gerrit.Nav.navigateToChange(this._change, this._patchRange.patchNum); Gerrit.Nav.navigateToChange(this._change, this._patchRange.patchNum);
}, }
_resetReplyOverlayFocusStops() { _resetReplyOverlayFocusStops() {
this.$.replyOverlay.setFocusStops(this.$.replyDialog.getFocusStops()); this.$.replyOverlay.setFocusStops(this.$.replyDialog.getFocusStops());
}, }
_handleToggleStar(e) { _handleToggleStar(e) {
this.$.restAPI.saveChangeStarred(e.detail.change._number, this.$.restAPI.saveChangeStarred(e.detail.change._number,
e.detail.starred); e.detail.starred);
}, }
_getRevisionInfo(change) { _getRevisionInfo(change) {
return new Gerrit.RevisionInfo(change); return new Gerrit.RevisionInfo(change);
}, }
_computeCurrentRevision(currentRevision, revisions) { _computeCurrentRevision(currentRevision, revisions) {
return currentRevision && revisions && revisions[currentRevision]; return currentRevision && revisions && revisions[currentRevision];
}, }
_computeDiffPrefsDisabled(disableDiffPrefs, loggedIn) { _computeDiffPrefsDisabled(disableDiffPrefs, loggedIn) {
return disableDiffPrefs || !loggedIn; return disableDiffPrefs || !loggedIn;
}, }
}); }
customElements.define(GrChangeView.is, GrChangeView);
})(); })();

View File

@@ -16,32 +16,40 @@
*/ */
(function() { (function() {
'use strict'; 'use strict';
Polymer({
is: 'gr-comment-list',
behaviors: [ /**
* @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.PathListMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrCommentList extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior, Gerrit.BaseUrlBehavior,
Gerrit.PathListBehavior, Gerrit.PathListBehavior,
Gerrit.URLEncodingBehavior, Gerrit.URLEncodingBehavior,
], ], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-comment-list'; }
properties: { static get properties() {
return {
changeNum: Number, changeNum: Number,
comments: Object, comments: Object,
patchNum: Number, patchNum: Number,
projectName: String, projectName: String,
/** @type {?} */ /** @type {?} */
projectConfig: Object, projectConfig: Object,
}, };
}
_computeFilesFromComments(comments) { _computeFilesFromComments(comments) {
const arr = Object.keys(comments || {}); const arr = Object.keys(comments || {});
return arr.sort(this.specialFilePathCompare); return arr.sort(this.specialFilePathCompare);
}, }
_isOnParent(comment) { _isOnParent(comment) {
return comment.side === 'PARENT'; return comment.side === 'PARENT';
}, }
_computeDiffLineURL(file, changeNum, patchNum, comment) { _computeDiffLineURL(file, changeNum, patchNum, comment) {
const basePatchNum = comment.hasOwnProperty('parent') ? const basePatchNum = comment.hasOwnProperty('parent') ?
@@ -49,13 +57,13 @@
return Gerrit.Nav.getUrlForDiffById(this.changeNum, this.projectName, return Gerrit.Nav.getUrlForDiffById(this.changeNum, this.projectName,
file, patchNum, basePatchNum, comment.line, file, patchNum, basePatchNum, comment.line,
this._isOnParent(comment)); this._isOnParent(comment));
}, }
_computeCommentsForFile(comments, file) { _computeCommentsForFile(comments, file) {
// Changes are not picked up by the dom-repeat due to the array instance // Changes are not picked up by the dom-repeat due to the array instance
// identity not changing even when it has elements added/removed from it. // identity not changing even when it has elements added/removed from it.
return (comments[file] || []).slice(); return (comments[file] || []).slice();
}, }
_computePatchDisplayName(comment) { _computePatchDisplayName(comment) {
if (this._isOnParent(comment)) { if (this._isOnParent(comment)) {
@@ -65,6 +73,8 @@
return `PS${comment.patch_set}, `; return `PS${comment.patch_set}, `;
} }
return ''; return '';
}, }
}); }
customElements.define(GrCommentList.is, GrCommentList);
})(); })();

View File

@@ -17,10 +17,13 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrCommitInfo extends Polymer.GestureEventListeners(
is: 'gr-commit-info', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-commit-info'; }
properties: { static get properties() {
return {
change: Object, change: Object,
/** @type {?} */ /** @type {?} */
commitInfo: Object, commitInfo: Object,
@@ -33,7 +36,8 @@
type: String, type: String,
computed: '_computeWebLink(change, commitInfo, serverConfig)', computed: '_computeWebLink(change, commitInfo, serverConfig)',
}, },
}, };
}
_getWeblink(change, commitInfo, config) { _getWeblink(change, commitInfo, config) {
return Gerrit.Nav.getPatchSetWeblink( return Gerrit.Nav.getPatchSetWeblink(
@@ -43,7 +47,7 @@
weblinks: commitInfo.web_links, weblinks: commitInfo.web_links,
config, config,
}); });
}, }
_computeShowWebLink(change, commitInfo, serverConfig) { _computeShowWebLink(change, commitInfo, serverConfig) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -53,7 +57,7 @@
const weblink = this._getWeblink(change, commitInfo, serverConfig); const weblink = this._getWeblink(change, commitInfo, serverConfig);
return !!weblink && !!weblink.url; return !!weblink && !!weblink.url;
}, }
_computeWebLink(change, commitInfo, serverConfig) { _computeWebLink(change, commitInfo, serverConfig) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -63,12 +67,14 @@
const {url} = this._getWeblink(change, commitInfo, serverConfig) || {}; const {url} = this._getWeblink(change, commitInfo, serverConfig) || {};
return url; return url;
}, }
_computeShortHash(commitInfo) { _computeShortHash(commitInfo) {
const {name} = const {name} =
this._getWeblink(this.change, commitInfo, this.serverConfig) || {}; this._getWeblink(this.change, commitInfo, this.serverConfig) || {};
return name; return name;
}, }
}); }
customElements.define(GrCommitInfo.is, GrCommitInfo);
})(); })();

View File

@@ -17,9 +17,17 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-confirm-abandon-dialog', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
*/
class GrConfirmAbandonDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-confirm-abandon-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
* *
@@ -32,41 +40,42 @@
* @event cancel * @event cancel
*/ */
properties: { static get properties() {
return {
message: String, message: String,
}, };
}
behaviors: [ get keyBindings() {
Gerrit.FireBehavior, return {
Gerrit.KeyboardShortcutBehavior,
],
keyBindings: {
'ctrl+enter meta+enter': '_handleEnterKey', 'ctrl+enter meta+enter': '_handleEnterKey',
}, };
}
resetFocus() { resetFocus() {
this.$.messageInput.textarea.focus(); this.$.messageInput.textarea.focus();
}, }
_handleEnterKey(e) { _handleEnterKey(e) {
this._confirm(); this._confirm();
}, }
_handleConfirmTap(e) { _handleConfirmTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this._confirm(); this._confirm();
}, }
_confirm() { _confirm() {
this.fire('confirm', {reason: this.message}, {bubbles: false}); this.fire('confirm', {reason: this.message}, {bubbles: false});
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('cancel', null, {bubbles: false}); this.fire('cancel', null, {bubbles: false});
}, }
}); }
customElements.define(GrConfirmAbandonDialog.is, GrConfirmAbandonDialog);
})(); })();

View File

@@ -17,12 +17,15 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-confirm-cherrypick-conflict-dialog', * @appliesMixin Gerrit.FireMixin
*/
behaviors: [ class GrConfirmCherrypickConflictDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior, Gerrit.FireBehavior,
], ], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-confirm-cherrypick-conflict-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
@@ -40,12 +43,15 @@
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('confirm', null, {bubbles: false}); this.fire('confirm', null, {bubbles: false});
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('cancel', null, {bubbles: false}); this.fire('cancel', null, {bubbles: false});
}, }
}); }
customElements.define(GrConfirmCherrypickConflictDialog.is,
GrConfirmCherrypickConflictDialog);
})(); })();

View File

@@ -19,9 +19,15 @@
const SUGGESTIONS_LIMIT = 15; const SUGGESTIONS_LIMIT = 15;
Polymer({ /**
is: 'gr-confirm-cherrypick-dialog', * @appliesMixin Gerrit.FireMixin
*/
class GrConfirmCherrypickDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-confirm-cherrypick-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
* *
@@ -34,7 +40,8 @@
* @event cancel * @event cancel
*/ */
properties: { static get properties() {
return {
branch: String, branch: String,
baseCommit: String, baseCommit: String,
changeStatus: String, changeStatus: String,
@@ -48,15 +55,14 @@
return this._getProjectBranchesSuggestions.bind(this); return this._getProjectBranchesSuggestions.bind(this);
}, },
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
],
observers: [
'_computeMessage(changeStatus, commitNum, commitMessage)', '_computeMessage(changeStatus, commitNum, commitMessage)',
], ];
}
_computeMessage(changeStatus, commitNum, commitMessage) { _computeMessage(changeStatus, commitNum, commitMessage) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -74,23 +80,23 @@
newMessage += '(cherry picked from commit ' + commitNum + ')'; newMessage += '(cherry picked from commit ' + commitNum + ')';
} }
this.message = newMessage; this.message = newMessage;
}, }
_handleConfirmTap(e) { _handleConfirmTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('confirm', null, {bubbles: false}); this.fire('confirm', null, {bubbles: false});
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('cancel', null, {bubbles: false}); this.fire('cancel', null, {bubbles: false});
}, }
resetFocus() { resetFocus() {
this.$.branchInput.focus(); this.$.branchInput.focus();
}, }
_getProjectBranchesSuggestions(input) { _getProjectBranchesSuggestions(input) {
if (input.startsWith('refs/heads/')) { if (input.startsWith('refs/heads/')) {
@@ -113,6 +119,9 @@
} }
return branches; return branches;
}); });
}, }
}); }
customElements.define(GrConfirmCherrypickDialog.is,
GrConfirmCherrypickDialog);
})(); })();

View File

@@ -19,9 +19,15 @@
const SUGGESTIONS_LIMIT = 15; const SUGGESTIONS_LIMIT = 15;
Polymer({ /**
is: 'gr-confirm-move-dialog', * @appliesMixin Gerrit.FireMixin
*/
class GrConfirmMoveDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-confirm-move-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
* *
@@ -34,7 +40,8 @@
* @event cancel * @event cancel
*/ */
properties: { static get properties() {
return {
branch: String, branch: String,
message: String, message: String,
project: String, project: String,
@@ -44,23 +51,20 @@
return this._getProjectBranchesSuggestions.bind(this); return this._getProjectBranchesSuggestions.bind(this);
}, },
}, },
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
_handleConfirmTap(e) { _handleConfirmTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('confirm', null, {bubbles: false}); this.fire('confirm', null, {bubbles: false});
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('cancel', null, {bubbles: false}); this.fire('cancel', null, {bubbles: false});
}, }
_getProjectBranchesSuggestions(input) { _getProjectBranchesSuggestions(input) {
if (input.startsWith('refs/heads/')) { if (input.startsWith('refs/heads/')) {
@@ -83,6 +87,8 @@
} }
return branches; return branches;
}); });
}, }
}); }
customElements.define(GrConfirmMoveDialog.is, GrConfirmMoveDialog);
})(); })();

View File

@@ -17,9 +17,10 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrConfirmRebaseDialog extends Polymer.GestureEventListeners(
is: 'gr-confirm-rebase-dialog', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-confirm-rebase-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
* *
@@ -32,7 +33,8 @@
* @event cancel * @event cancel
*/ */
properties: { static get properties() {
return {
branch: String, branch: String,
changeNumber: Number, changeNumber: Number,
hasParent: Boolean, hasParent: Boolean,
@@ -45,11 +47,14 @@
}, },
}, },
_recentChanges: Array, _recentChanges: Array,
}, };
}
observers: [ static get observers() {
return [
'_updateSelectedOption(rebaseOnCurrent, hasParent)', '_updateSelectedOption(rebaseOnCurrent, hasParent)',
], ];
}
// This is called by gr-change-actions every time the rebase dialog is // This is called by gr-change-actions every time the rebase dialog is
// re-opened. Unlike other autocompletes that make a request with each // re-opened. Unlike other autocompletes that make a request with each
@@ -71,36 +76,36 @@
this._recentChanges = changes; this._recentChanges = changes;
return this._recentChanges; return this._recentChanges;
}); });
}, }
_getRecentChanges() { _getRecentChanges() {
if (this._recentChanges) { if (this._recentChanges) {
return Promise.resolve(this._recentChanges); return Promise.resolve(this._recentChanges);
} }
return this.fetchRecentChanges(); return this.fetchRecentChanges();
}, }
_getChangeSuggestions(input) { _getChangeSuggestions(input) {
return this._getRecentChanges().then(changes => return this._getRecentChanges().then(changes =>
this._filterChanges(input, changes)); this._filterChanges(input, changes));
}, }
_filterChanges(input, changes) { _filterChanges(input, changes) {
return changes.filter(change => change.name.includes(input) && return changes.filter(change => change.name.includes(input) &&
change.value !== this.changeNumber); change.value !== this.changeNumber);
}, }
_displayParentOption(rebaseOnCurrent, hasParent) { _displayParentOption(rebaseOnCurrent, hasParent) {
return hasParent && rebaseOnCurrent; return hasParent && rebaseOnCurrent;
}, }
_displayParentUpToDateMsg(rebaseOnCurrent, hasParent) { _displayParentUpToDateMsg(rebaseOnCurrent, hasParent) {
return hasParent && !rebaseOnCurrent; return hasParent && !rebaseOnCurrent;
}, }
_displayTipOption(rebaseOnCurrent, hasParent) { _displayTipOption(rebaseOnCurrent, hasParent) {
return !(!rebaseOnCurrent && !hasParent); return !(!rebaseOnCurrent && !hasParent);
}, }
/** /**
* There is a subtle but important difference between setting the base to an * There is a subtle but important difference between setting the base to an
@@ -115,7 +120,7 @@
// Change numbers will have their description appended by the // Change numbers will have their description appended by the
// autocomplete. // autocomplete.
return this._text.split(':')[0]; return this._text.split(':')[0];
}, }
_handleConfirmTap(e) { _handleConfirmTap(e) {
e.preventDefault(); e.preventDefault();
@@ -123,22 +128,22 @@
this.dispatchEvent(new CustomEvent('confirm', this.dispatchEvent(new CustomEvent('confirm',
{detail: {base: this._getSelectedBase()}})); {detail: {base: this._getSelectedBase()}}));
this._text = ''; this._text = '';
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.dispatchEvent(new CustomEvent('cancel')); this.dispatchEvent(new CustomEvent('cancel'));
this._text = ''; this._text = '';
}, }
_handleRebaseOnOther() { _handleRebaseOnOther() {
this.$.parentInput.focus(); this.$.parentInput.focus();
}, }
_handleEnterChangeNumberClick() { _handleEnterChangeNumberClick() {
this.$.rebaseOnOtherInput.checked = true; this.$.rebaseOnOtherInput.checked = true;
}, }
/** /**
* Sets the default radio button based on the state of the app and * Sets the default radio button based on the state of the app and
@@ -157,6 +162,8 @@
} else { } else {
this.$.rebaseOnOtherInput.checked = true; this.$.rebaseOnOtherInput.checked = true;
} }
}, }
}); }
customElements.define(GrConfirmRebaseDialog.is, GrConfirmRebaseDialog);
})(); })();

View File

@@ -20,9 +20,15 @@
const ERR_COMMIT_NOT_FOUND = const ERR_COMMIT_NOT_FOUND =
'Unable to find the commit hash of this change.'; 'Unable to find the commit hash of this change.';
Polymer({ /**
is: 'gr-confirm-revert-dialog', * @appliesMixin Gerrit.FireMixin
*/
class GrConfirmRevertDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-confirm-revert-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
* *
@@ -35,13 +41,11 @@
* @event cancel * @event cancel
*/ */
properties: { static get properties() {
return {
message: String, message: String,
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
populateRevertMessage(message, commitHash) { populateRevertMessage(message, commitHash) {
// Figure out what the revert title should be. // Figure out what the revert title should be.
@@ -55,18 +59,20 @@
this.message = `${revertTitle}\n\n${revertCommitText}\n\n` + this.message = `${revertTitle}\n\n${revertCommitText}\n\n` +
`Reason for revert: <INSERT REASONING HERE>\n`; `Reason for revert: <INSERT REASONING HERE>\n`;
}, }
_handleConfirmTap(e) { _handleConfirmTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('confirm', null, {bubbles: false}); this.fire('confirm', null, {bubbles: false});
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('cancel', null, {bubbles: false}); this.fire('cancel', null, {bubbles: false});
}, }
}); }
customElements.define(GrConfirmRevertDialog.is, GrConfirmRevertDialog);
})(); })();

View File

@@ -20,9 +20,15 @@
const ERR_COMMIT_NOT_FOUND = const ERR_COMMIT_NOT_FOUND =
'Unable to find the commit hash of this change.'; 'Unable to find the commit hash of this change.';
Polymer({ /**
is: 'gr-confirm-revert-submission-dialog', * @appliesMixin Gerrit.FireMixin
*/
class GrConfirmRevertSubmissionDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-confirm-revert-submission-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
* *
@@ -35,13 +41,11 @@
* @event cancel * @event cancel
*/ */
properties: { static get properties() {
return {
message: String, message: String,
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
populateRevertSubmissionMessage(message, commitHash) { populateRevertSubmissionMessage(message, commitHash) {
// Follow the same convention of the revert // Follow the same convention of the revert
@@ -52,18 +56,21 @@
} }
this.message = `${revertTitle}\n\n` + this.message = `${revertTitle}\n\n` +
`Reason for revert: <INSERT REASONING HERE>\n`; `Reason for revert: <INSERT REASONING HERE>\n`;
}, }
_handleConfirmTap(e) { _handleConfirmTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('confirm', null, {bubbles: false}); this.fire('confirm', null, {bubbles: false});
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('cancel', null, {bubbles: false}); this.fire('cancel', null, {bubbles: false});
}, }
}); }
customElements.define(GrConfirmRevertSubmissionDialog.is,
GrConfirmRevertSubmissionDialog);
})(); })();

View File

@@ -17,9 +17,10 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrConfirmSubmitDialog extends Polymer.GestureEventListeners(
is: 'gr-confirm-submit-dialog', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-confirm-submit-dialog'; }
/** /**
* Fired when the confirm button is pressed. * Fired when the confirm button is pressed.
* *
@@ -32,7 +33,8 @@
* @event cancel * @event cancel
*/ */
properties: { static get properties() {
return {
/** /**
* @type {{ * @type {{
* is_private: boolean, * is_private: boolean,
@@ -47,22 +49,25 @@
* }} * }}
*/ */
action: Object, action: Object,
}, };
}
resetFocus(e) { resetFocus(e) {
this.$.dialog.resetFocus(); this.$.dialog.resetFocus();
}, }
_handleConfirmTap(e) { _handleConfirmTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.dispatchEvent(new CustomEvent('confirm', {bubbles: false})); this.dispatchEvent(new CustomEvent('confirm', {bubbles: false}));
}, }
_handleCancelTap(e) { _handleCancelTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.dispatchEvent(new CustomEvent('cancel', {bubbles: false})); this.dispatchEvent(new CustomEvent('cancel', {bubbles: false}));
}, }
}); }
customElements.define(GrConfirmSubmitDialog.is, GrConfirmSubmitDialog);
})(); })();

View File

@@ -17,16 +17,27 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-download-dialog', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.RESTClientMixin
*/
class GrDownloadDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-download-dialog'; }
/** /**
* Fired when the user presses the close button. * Fired when the user presses the close button.
* *
* @event close * @event close
*/ */
properties: { static get properties() {
return {
/** @type {{ revisions: Array }} */ /** @type {{ revisions: Array }} */
change: Object, change: Object,
patchNum: String, patchNum: String,
@@ -40,17 +51,13 @@
observer: '_schemesChanged', observer: '_schemesChanged',
}, },
_selectedScheme: String, _selectedScheme: String,
}, };
}
hostAttributes: { ready() {
role: 'dialog', super.ready();
}, this._ensureAttribute('role', 'dialog');
}
behaviors: [
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
],
focus() { focus() {
if (this._schemes.length) { if (this._schemes.length) {
@@ -58,7 +65,7 @@
} else { } else {
this.$.download.focus(); this.$.download.focus();
} }
}, }
getFocusStops() { getFocusStops() {
const links = this.$$('#archives').querySelectorAll('a'); const links = this.$$('#archives').querySelectorAll('a');
@@ -66,7 +73,7 @@
start: this.$.closeButton, start: this.$.closeButton,
end: links[links.length - 1], end: links[links.length - 1],
}; };
}, }
_computeDownloadCommands(change, patchNum, _selectedScheme) { _computeDownloadCommands(change, patchNum, _selectedScheme) {
let commandObj; let commandObj;
@@ -87,7 +94,7 @@
}); });
} }
return commands; return commands;
}, }
/** /**
* @param {!Object} change * @param {!Object} change
@@ -97,7 +104,7 @@
*/ */
_computeZipDownloadLink(change, patchNum) { _computeZipDownloadLink(change, patchNum) {
return this._computeDownloadLink(change, patchNum, true); return this._computeDownloadLink(change, patchNum, true);
}, }
/** /**
* @param {!Object} change * @param {!Object} change
@@ -107,7 +114,7 @@
*/ */
_computeZipDownloadFilename(change, patchNum) { _computeZipDownloadFilename(change, patchNum) {
return this._computeDownloadFilename(change, patchNum, true); return this._computeDownloadFilename(change, patchNum, true);
}, }
/** /**
* @param {!Object} change * @param {!Object} change
@@ -123,7 +130,7 @@
} }
return this.changeBaseURL(change.project, change._number, patchNum) + return this.changeBaseURL(change.project, change._number, patchNum) +
'/patch?' + (opt_zip ? 'zip' : 'download'); '/patch?' + (opt_zip ? 'zip' : 'download');
}, }
/** /**
* @param {!Object} change * @param {!Object} change
@@ -146,7 +153,7 @@
} }
} }
return shortRev + '.diff.' + (opt_zip ? 'zip' : 'base64'); return shortRev + '.diff.' + (opt_zip ? 'zip' : 'base64');
}, }
_computeHidePatchFile(change, patchNum) { _computeHidePatchFile(change, patchNum) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -161,7 +168,7 @@
} }
} }
return false; return false;
}, }
_computeArchiveDownloadLink(change, patchNum, format) { _computeArchiveDownloadLink(change, patchNum, format) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -170,7 +177,7 @@
} }
return this.changeBaseURL(change.project, change._number, patchNum) + return this.changeBaseURL(change.project, change._number, patchNum) +
'/archive?format=' + format; '/archive?format=' + format;
}, }
_computeSchemes(change, patchNum) { _computeSchemes(change, patchNum) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -188,28 +195,30 @@
} }
} }
return []; return [];
}, }
_computePatchSetQuantity(revisions) { _computePatchSetQuantity(revisions) {
if (!revisions) { return 0; } if (!revisions) { return 0; }
return Object.keys(revisions).length; return Object.keys(revisions).length;
}, }
_handleCloseTap(e) { _handleCloseTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('close', null, {bubbles: false}); this.fire('close', null, {bubbles: false});
}, }
_schemesChanged(schemes) { _schemesChanged(schemes) {
if (schemes.length === 0) { return; } if (schemes.length === 0) { return; }
if (!schemes.includes(this._selectedScheme)) { if (!schemes.includes(this._selectedScheme)) {
this._selectedScheme = schemes.sort()[0]; this._selectedScheme = schemes.sort()[0];
} }
}, }
_computeShowDownloadCommands(schemes) { _computeShowDownloadCommands(schemes) {
return schemes.length ? '' : 'hidden'; return schemes.length ? '' : 'hidden';
}, }
}); }
customElements.define(GrDownloadDialog.is, GrDownloadDialog);
})(); })();

View File

@@ -21,9 +21,17 @@
const PATCH_DESC_MAX_LENGTH = 500; const PATCH_DESC_MAX_LENGTH = 500;
const MERGED_STATUS = 'MERGED'; const MERGED_STATUS = 'MERGED';
Polymer({ /**
is: 'gr-file-list-header', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.PatchSetMixin
*/
class GrFileListHeader extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-file-list-header'; }
/** /**
* @event expand-diffs * @event expand-diffs
*/ */
@@ -48,7 +56,8 @@
* @event open-upload-help-dialog * @event open-upload-help-dialog
*/ */
properties: { static get properties() {
return {
account: Object, account: Object,
allPatchSets: Array, allPatchSets: Array,
/** @type {?} */ /** @type {?} */
@@ -90,30 +99,28 @@
computed: '_computeDescriptionReadOnly(loggedIn, change, account)', computed: '_computeDescriptionReadOnly(loggedIn, change, account)',
}, },
revisionInfo: Object, revisionInfo: Object,
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
Gerrit.PatchSetBehavior,
],
observers: [
'_computePatchSetDescription(change, patchNum)', '_computePatchSetDescription(change, patchNum)',
], ];
}
setDiffViewMode(mode) { setDiffViewMode(mode) {
this.$.modeSelect.setMode(mode); this.$.modeSelect.setMode(mode);
}, }
_expandAllDiffs() { _expandAllDiffs() {
this._expanded = true; this._expanded = true;
this.fire('expand-diffs'); this.fire('expand-diffs');
}, }
_collapseAllDiffs() { _collapseAllDiffs() {
this._expanded = false; this._expanded = false;
this.fire('collapse-diffs'); this.fire('collapse-diffs');
}, }
_computeExpandedClass(filesExpanded) { _computeExpandedClass(filesExpanded) {
const classes = []; const classes = [];
@@ -125,11 +132,11 @@
classes.push('openFile'); classes.push('openFile');
} }
return classes.join(' '); return classes.join(' ');
}, }
_computeDescriptionPlaceholder(readOnly) { _computeDescriptionPlaceholder(readOnly) {
return (readOnly ? 'No' : 'Add') + ' patchset description'; return (readOnly ? 'No' : 'Add') + ' patchset description';
}, }
_computeDescriptionReadOnly(loggedIn, change, account) { _computeDescriptionReadOnly(loggedIn, change, account) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -138,7 +145,7 @@
} }
return !(loggedIn && (account._account_id === change.owner._account_id)); return !(loggedIn && (account._account_id === change.owner._account_id));
}, }
_computePatchSetDescription(change, patchNum) { _computePatchSetDescription(change, patchNum) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -149,11 +156,11 @@
const rev = this.getRevisionByPatchNum(change.revisions, patchNum); const rev = this.getRevisionByPatchNum(change.revisions, patchNum);
this._patchsetDescription = (rev && rev.description) ? this._patchsetDescription = (rev && rev.description) ?
rev.description.substring(0, PATCH_DESC_MAX_LENGTH) : ''; rev.description.substring(0, PATCH_DESC_MAX_LENGTH) : '';
}, }
_handleDescriptionRemoved(e) { _handleDescriptionRemoved(e) {
return this._updateDescription('', e); return this._updateDescription('', e);
}, }
/** /**
* @param {!Object} revisions The revisions object keyed by revision hashes * @param {!Object} revisions The revisions object keyed by revision hashes
@@ -167,12 +174,12 @@
return rev; return rev;
} }
} }
}, }
_handleDescriptionChanged(e) { _handleDescriptionChanged(e) {
const desc = e.detail.trim(); const desc = e.detail.trim();
this._updateDescription(desc, e); this._updateDescription(desc, e);
}, }
/** /**
* Update the patchset description with the rest API. * Update the patchset description with the rest API.
@@ -197,43 +204,43 @@
if (target) { target.disabled = false; } if (target) { target.disabled = false; }
return; return;
}); });
}, }
_computePrefsButtonHidden(prefs, diffPrefsDisabled) { _computePrefsButtonHidden(prefs, diffPrefsDisabled) {
return diffPrefsDisabled || !prefs; return diffPrefsDisabled || !prefs;
}, }
_fileListActionsVisible(shownFileCount, maxFilesForBulkActions) { _fileListActionsVisible(shownFileCount, maxFilesForBulkActions) {
return shownFileCount <= maxFilesForBulkActions; return shownFileCount <= maxFilesForBulkActions;
}, }
_handlePatchChange(e) { _handlePatchChange(e) {
const {basePatchNum, patchNum} = e.detail; const {basePatchNum, patchNum} = e.detail;
if (this.patchNumEquals(basePatchNum, this.basePatchNum) && if (this.patchNumEquals(basePatchNum, this.basePatchNum) &&
this.patchNumEquals(patchNum, this.patchNum)) { return; } this.patchNumEquals(patchNum, this.patchNum)) { return; }
Gerrit.Nav.navigateToChange(this.change, patchNum, basePatchNum); Gerrit.Nav.navigateToChange(this.change, patchNum, basePatchNum);
}, }
_handlePrefsTap(e) { _handlePrefsTap(e) {
e.preventDefault(); e.preventDefault();
this.fire('open-diff-prefs'); this.fire('open-diff-prefs');
}, }
_handleIncludedInTap(e) { _handleIncludedInTap(e) {
e.preventDefault(); e.preventDefault();
this.fire('open-included-in-dialog'); this.fire('open-included-in-dialog');
}, }
_handleDownloadTap(e) { _handleDownloadTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('open-download-dialog', {bubbles: false})); new CustomEvent('open-download-dialog', {bubbles: false}));
}, }
_computeEditModeClass(editMode) { _computeEditModeClass(editMode) {
return editMode ? 'editMode' : ''; return editMode ? 'editMode' : '';
}, }
_computePatchInfoClass(patchNum, allPatchSets) { _computePatchInfoClass(patchNum, allPatchSets) {
const latestNum = this.computeLatestPatchNum(allPatchSets); const latestNum = this.computeLatestPatchNum(allPatchSets);
@@ -241,18 +248,18 @@
return ''; return '';
} }
return 'patchInfoOldPatchSet'; return 'patchInfoOldPatchSet';
}, }
_hideIncludedIn(change) { _hideIncludedIn(change) {
return change && change.status === MERGED_STATUS ? '' : 'hide'; return change && change.status === MERGED_STATUS ? '' : 'hide';
}, }
_handleUploadTap(e) { _handleUploadTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('open-upload-help-dialog', {bubbles: false})); new CustomEvent('open-upload-help-dialog', {bubbles: false}));
}, }
_computeUploadHelpContainerClass(change, account) { _computeUploadHelpContainerClass(change, account) {
const changeIsMerged = change && change.status === MERGED_STATUS; const changeIsMerged = change && change.status === MERGED_STATUS;
@@ -262,6 +269,8 @@
const userIsOwner = ownerId && userId && ownerId === userId; const userIsOwner = ownerId && userId && ownerId === userId;
const hideContainer = !userIsOwner || changeIsMerged; const hideContainer = !userIsOwner || changeIsMerged;
return 'uploadContainer desktop' + (hideContainer ? ' hide' : ''); return 'uploadContainer desktop' + (hideContainer ? ' hide' : '');
}, }
}); }
customElements.define(GrFileListHeader.is, GrFileListHeader);
})(); })();

View File

@@ -41,16 +41,33 @@
U: 'Unchanged', U: 'Unchanged',
}; };
Polymer({ /**
is: 'gr-file-list', * @appliesMixin Gerrit.AsyncForeachMixin
* @appliesMixin Gerrit.DomUtilMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.PathListMixin
*/
class GrFileList extends Polymer.mixinBehaviors( [
Gerrit.AsyncForeachBehavior,
Gerrit.DomUtilBehavior,
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.PathListBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-file-list'; }
/** /**
* Fired when a draft refresh should get triggered * Fired when a draft refresh should get triggered
* *
* @event reload-drafts * @event reload-drafts
*/ */
properties: { static get properties() {
return {
/** @type {?} */ /** @type {?} */
patchRange: Object, patchRange: Object,
patchNum: String, patchNum: String,
@@ -177,26 +194,22 @@
_dynamicSummaryEndpoints: { _dynamicSummaryEndpoints: {
type: Array, type: Array,
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.AsyncForeachBehavior, return [
Gerrit.DomUtilBehavior,
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.PathListBehavior,
],
observers: [
'_expandedPathsChanged(_expandedFilePaths.splices)', '_expandedPathsChanged(_expandedFilePaths.splices)',
'_computeFiles(_filesByPath, changeComments, patchRange, _reviewed, ' + '_computeFiles(_filesByPath, changeComments, patchRange, _reviewed, ' +
'_loading)', '_loading)',
], ];
}
keyBindings: { get keyBindings() {
return {
esc: '_handleEscKey', esc: '_handleEscKey',
}, };
}
keyboardShortcuts() { keyboardShortcuts() {
return { return {
@@ -221,12 +234,16 @@
[this.Shortcut.EXPAND_ALL_COMMENT_THREADS]: null, [this.Shortcut.EXPAND_ALL_COMMENT_THREADS]: null,
[this.Shortcut.COLLAPSE_ALL_COMMENT_THREADS]: null, [this.Shortcut.COLLAPSE_ALL_COMMENT_THREADS]: null,
}; };
}, }
listeners: {
keydown: '_scopedKeydownHandler', created() {
}, super.created();
this.addEventListener('keydown',
e => this._scopedKeydownHandler(e));
}
attached() { attached() {
super.attached();
Gerrit.awaitPluginsLoaded().then(() => { Gerrit.awaitPluginsLoaded().then(() => {
this._dynamicHeaderEndpoints = Gerrit._endpoints.getDynamicEndpoints( this._dynamicHeaderEndpoints = Gerrit._endpoints.getDynamicEndpoints(
'change-view-file-list-header'); 'change-view-file-list-header');
@@ -246,11 +263,12 @@
'Different number of dynamic file-list headers and summary.'); 'Different number of dynamic file-list headers and summary.');
} }
}); });
}, }
detached() { detached() {
super.detached();
this._cancelDiffs(); this._cancelDiffs();
}, }
/** /**
* Iron-a11y-keys-behavior catches keyboard events globally. Some keyboard * Iron-a11y-keys-behavior catches keyboard events globally. Some keyboard
@@ -264,7 +282,7 @@
// Enter. // Enter.
this._handleOpenFile(e); this._handleOpenFile(e);
} }
}, }
reload() { reload() {
if (!this.changeNum || !this.patchRange.patchNum) { if (!this.changeNum || !this.patchRange.patchNum) {
@@ -302,23 +320,23 @@
this._detectChromiteButler(); this._detectChromiteButler();
this.$.reporting.fileListDisplayed(); this.$.reporting.fileListDisplayed();
}); });
}, }
_detectChromiteButler() { _detectChromiteButler() {
const hasButler = !!document.getElementById('butler-suggested-owners'); const hasButler = !!document.getElementById('butler-suggested-owners');
if (hasButler) { if (hasButler) {
this.$.reporting.reportExtension('butler'); this.$.reporting.reportExtension('butler');
} }
}, }
get diffs() { get diffs() {
return Array.from( return Array.from(
Polymer.dom(this.root).querySelectorAll('gr-diff-host')); Polymer.dom(this.root).querySelectorAll('gr-diff-host'));
}, }
openDiffPrefs() { openDiffPrefs() {
this.$.diffPreferencesDialog.open(); this.$.diffPreferencesDialog.open();
}, }
_calculatePatchChange(files) { _calculatePatchChange(files) {
const magicFilesExcluded = files.filter(files => { const magicFilesExcluded = files.filter(files => {
@@ -343,15 +361,15 @@
}; };
}, {inserted: 0, deleted: 0, size_delta_inserted: 0, }, {inserted: 0, deleted: 0, size_delta_inserted: 0,
size_delta_deleted: 0, total_size: 0}); size_delta_deleted: 0, total_size: 0});
}, }
_getDiffPreferences() { _getDiffPreferences() {
return this.$.restAPI.getDiffPreferences(); return this.$.restAPI.getDiffPreferences();
}, }
_getPreferences() { _getPreferences() {
return this.$.restAPI.getPreferences(); return this.$.restAPI.getPreferences();
}, }
_togglePathExpanded(path) { _togglePathExpanded(path) {
// Is the path in the list of expanded diffs? IF so remove it, otherwise // Is the path in the list of expanded diffs? IF so remove it, otherwise
@@ -362,11 +380,11 @@
} else { } else {
this.splice('_expandedFilePaths', pathIndex, 1); this.splice('_expandedFilePaths', pathIndex, 1);
} }
}, }
_togglePathExpandedByIndex(index) { _togglePathExpandedByIndex(index) {
this._togglePathExpanded(this._files[index].__path); this._togglePathExpanded(this._files[index].__path);
}, }
_updateDiffPreferences() { _updateDiffPreferences() {
if (!this.diffs.length) { return; } if (!this.diffs.length) { return; }
@@ -374,14 +392,14 @@
this.$.reporting.time(EXPAND_ALL_TIMING_LABEL); this.$.reporting.time(EXPAND_ALL_TIMING_LABEL);
this._renderInOrder(this._expandedFilePaths, this.diffs, this._renderInOrder(this._expandedFilePaths, this.diffs,
this._expandedFilePaths.length); this._expandedFilePaths.length);
}, }
_forEachDiff(fn) { _forEachDiff(fn) {
const diffs = this.diffs; const diffs = this.diffs;
for (let i = 0; i < diffs.length; i++) { for (let i = 0; i < diffs.length; i++) {
fn(diffs[i]); fn(diffs[i]);
} }
}, }
expandAllDiffs() { expandAllDiffs() {
this._showInlineDiffs = true; this._showInlineDiffs = true;
@@ -398,7 +416,7 @@
} }
this.splice(...['_expandedFilePaths', 0, 0].concat(newPaths)); this.splice(...['_expandedFilePaths', 0, 0].concat(newPaths));
}, }
collapseAllDiffs() { collapseAllDiffs() {
this._showInlineDiffs = false; this._showInlineDiffs = false;
@@ -406,7 +424,7 @@
this.filesExpanded = this._computeExpandedFiles( this.filesExpanded = this._computeExpandedFiles(
this._expandedFilePaths.length, this._files.length); this._expandedFilePaths.length, this._files.length);
this.$.diffCursor.handleDiffUpdate(); this.$.diffCursor.handleDiffUpdate();
}, }
/** /**
* Computes a string with the number of comments and unresolved comments. * Computes a string with the number of comments and unresolved comments.
@@ -433,7 +451,7 @@
(commentString && unresolvedString ? ' ' : '') + (commentString && unresolvedString ? ' ' : '') +
// Add parentheses around unresolved if it exists. // Add parentheses around unresolved if it exists.
(unresolvedString ? `(${unresolvedString})` : ''); (unresolvedString ? `(${unresolvedString})` : '');
}, }
/** /**
* Computes a string with the number of drafts. * Computes a string with the number of drafts.
@@ -448,7 +466,7 @@
changeComments.computeDraftCount(patchRange.basePatchNum, path) + changeComments.computeDraftCount(patchRange.basePatchNum, path) +
changeComments.computeDraftCount(patchRange.patchNum, path); changeComments.computeDraftCount(patchRange.patchNum, path);
return GrCountStringFormatter.computePluralString(draftCount, 'draft'); return GrCountStringFormatter.computePluralString(draftCount, 'draft');
}, }
/** /**
* Computes a shortened string with the number of drafts. * Computes a shortened string with the number of drafts.
@@ -463,7 +481,7 @@
changeComments.computeDraftCount(patchRange.basePatchNum, path) + changeComments.computeDraftCount(patchRange.basePatchNum, path) +
changeComments.computeDraftCount(patchRange.patchNum, path); changeComments.computeDraftCount(patchRange.patchNum, path);
return GrCountStringFormatter.computeShortString(draftCount, 'd'); return GrCountStringFormatter.computeShortString(draftCount, 'd');
}, }
/** /**
* Computes a shortened string with the number of comments. * Computes a shortened string with the number of comments.
@@ -478,7 +496,7 @@
changeComments.computeCommentCount(patchRange.basePatchNum, path) + changeComments.computeCommentCount(patchRange.basePatchNum, path) +
changeComments.computeCommentCount(patchRange.patchNum, path); changeComments.computeCommentCount(patchRange.patchNum, path);
return GrCountStringFormatter.computeShortString(commentCount, 'c'); return GrCountStringFormatter.computeShortString(commentCount, 'c');
}, }
/** /**
* @param {string} path * @param {string} path
@@ -495,27 +513,27 @@
} }
this._saveReviewedState(path, reviewed); this._saveReviewedState(path, reviewed);
}, }
_saveReviewedState(path, reviewed) { _saveReviewedState(path, reviewed) {
return this.$.restAPI.saveFileReviewed(this.changeNum, return this.$.restAPI.saveFileReviewed(this.changeNum,
this.patchRange.patchNum, path, reviewed); this.patchRange.patchNum, path, reviewed);
}, }
_getLoggedIn() { _getLoggedIn() {
return this.$.restAPI.getLoggedIn(); return this.$.restAPI.getLoggedIn();
}, }
_getReviewedFiles() { _getReviewedFiles() {
if (this.editMode) { return Promise.resolve([]); } if (this.editMode) { return Promise.resolve([]); }
return this.$.restAPI.getReviewedFiles(this.changeNum, return this.$.restAPI.getReviewedFiles(this.changeNum,
this.patchRange.patchNum); this.patchRange.patchNum);
}, }
_getFiles() { _getFiles() {
return this.$.restAPI.getChangeOrEditFiles( return this.$.restAPI.getChangeOrEditFiles(
this.changeNum, this.patchRange); this.changeNum, this.patchRange);
}, }
/** /**
* The closure compiler doesn't realize this.specialFilePathCompare is * The closure compiler doesn't realize this.specialFilePathCompare is
@@ -534,7 +552,7 @@
files.push(info); files.push(info);
} }
return files; return files;
}, }
/** /**
* Handle all events from the file list dom-repeat so event handleers don't * Handle all events from the file list dom-repeat so event handleers don't
@@ -564,7 +582,7 @@
e.preventDefault(); e.preventDefault();
this._togglePathExpanded(path); this._togglePathExpanded(path);
}, }
_handleLeftPane(e) { _handleLeftPane(e) {
if (this.shouldSuppressKeyboardShortcut(e) || this._noDiffsExpanded()) { if (this.shouldSuppressKeyboardShortcut(e) || this._noDiffsExpanded()) {
@@ -573,7 +591,7 @@
e.preventDefault(); e.preventDefault();
this.$.diffCursor.moveLeft(); this.$.diffCursor.moveLeft();
}, }
_handleRightPane(e) { _handleRightPane(e) {
if (this.shouldSuppressKeyboardShortcut(e) || this._noDiffsExpanded()) { if (this.shouldSuppressKeyboardShortcut(e) || this._noDiffsExpanded()) {
@@ -582,7 +600,7 @@
e.preventDefault(); e.preventDefault();
this.$.diffCursor.moveRight(); this.$.diffCursor.moveRight();
}, }
_handleToggleInlineDiff(e) { _handleToggleInlineDiff(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -591,14 +609,14 @@
e.preventDefault(); e.preventDefault();
this._togglePathExpandedByIndex(this.$.fileCursor.index); this._togglePathExpandedByIndex(this.$.fileCursor.index);
}, }
_handleToggleAllInlineDiffs(e) { _handleToggleAllInlineDiffs(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
e.preventDefault(); e.preventDefault();
this._toggleInlineDiffs(); this._toggleInlineDiffs();
}, }
_handleCursorNext(e) { _handleCursorNext(e) {
if (this.shouldSuppressKeyboardShortcut(e) || this.modifierPressed(e)) { if (this.shouldSuppressKeyboardShortcut(e) || this.modifierPressed(e)) {
@@ -616,7 +634,7 @@
this.$.fileCursor.next(); this.$.fileCursor.next();
this.selectedIndex = this.$.fileCursor.index; this.selectedIndex = this.$.fileCursor.index;
} }
}, }
_handleCursorPrev(e) { _handleCursorPrev(e) {
if (this.shouldSuppressKeyboardShortcut(e) || this.modifierPressed(e)) { if (this.shouldSuppressKeyboardShortcut(e) || this.modifierPressed(e)) {
@@ -634,14 +652,14 @@
this.$.fileCursor.previous(); this.$.fileCursor.previous();
this.selectedIndex = this.$.fileCursor.index; this.selectedIndex = this.$.fileCursor.index;
} }
}, }
_handleNewComment(e) { _handleNewComment(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
this.modifierPressed(e)) { return; } this.modifierPressed(e)) { return; }
e.preventDefault(); e.preventDefault();
this.$.diffCursor.createCommentInPlace(); this.$.diffCursor.createCommentInPlace();
}, }
_handleOpenLastFile(e) { _handleOpenLastFile(e) {
// Check for meta key to avoid overriding native chrome shortcut. // Check for meta key to avoid overriding native chrome shortcut.
@@ -650,7 +668,7 @@
e.preventDefault(); e.preventDefault();
this._openSelectedFile(this._files.length - 1); this._openSelectedFile(this._files.length - 1);
}, }
_handleOpenFirstFile(e) { _handleOpenFirstFile(e) {
// Check for meta key to avoid overriding native chrome shortcut. // Check for meta key to avoid overriding native chrome shortcut.
@@ -659,7 +677,7 @@
e.preventDefault(); e.preventDefault();
this._openSelectedFile(0); this._openSelectedFile(0);
}, }
_handleOpenFile(e) { _handleOpenFile(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -672,7 +690,7 @@
} }
this._openSelectedFile(); this._openSelectedFile();
}, }
_handleNextChunk(e) { _handleNextChunk(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -687,7 +705,7 @@
} else { } else {
this.$.diffCursor.moveToNextChunk(); this.$.diffCursor.moveToNextChunk();
} }
}, }
_handlePrevChunk(e) { _handlePrevChunk(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -702,7 +720,7 @@
} else { } else {
this.$.diffCursor.moveToPreviousChunk(); this.$.diffCursor.moveToPreviousChunk();
} }
}, }
_handleToggleFileReviewed(e) { _handleToggleFileReviewed(e) {
if (this.shouldSuppressKeyboardShortcut(e) || this.modifierPressed(e)) { if (this.shouldSuppressKeyboardShortcut(e) || this.modifierPressed(e)) {
@@ -712,7 +730,7 @@
e.preventDefault(); e.preventDefault();
if (!this._files[this.$.fileCursor.index]) { return; } if (!this._files[this.$.fileCursor.index]) { return; }
this._reviewFile(this._files[this.$.fileCursor.index].__path); this._reviewFile(this._files[this.$.fileCursor.index].__path);
}, }
_handleToggleLeftPane(e) { _handleToggleLeftPane(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -721,7 +739,7 @@
this._forEachDiff(diff => { this._forEachDiff(diff => {
diff.toggleLeftDiff(); diff.toggleLeftDiff();
}); });
}, }
_toggleInlineDiffs() { _toggleInlineDiffs() {
if (this._showInlineDiffs) { if (this._showInlineDiffs) {
@@ -729,13 +747,13 @@
} else { } else {
this.expandAllDiffs(); this.expandAllDiffs();
} }
}, }
_openCursorFile() { _openCursorFile() {
const diff = this.$.diffCursor.getTargetDiffElement(); const diff = this.$.diffCursor.getTargetDiffElement();
Gerrit.Nav.navigateToDiff(this.change, diff.path, Gerrit.Nav.navigateToDiff(this.change, diff.path,
diff.patchRange.patchNum, this.patchRange.basePatchNum); diff.patchRange.patchNum, this.patchRange.basePatchNum);
}, }
/** /**
* @param {number=} opt_index * @param {number=} opt_index
@@ -748,7 +766,7 @@
Gerrit.Nav.navigateToDiff(this.change, Gerrit.Nav.navigateToDiff(this.change,
this._files[this.$.fileCursor.index].__path, this.patchRange.patchNum, this._files[this.$.fileCursor.index].__path, this.patchRange.patchNum,
this.patchRange.basePatchNum); this.patchRange.basePatchNum);
}, }
_addDraftAtTarget() { _addDraftAtTarget() {
const diff = this.$.diffCursor.getTargetDiffElement(); const diff = this.$.diffCursor.getTargetDiffElement();
@@ -756,20 +774,20 @@
if (diff && target) { if (diff && target) {
diff.addDraftAtLine(target); diff.addDraftAtLine(target);
} }
}, }
_shouldHideChangeTotals(_patchChange) { _shouldHideChangeTotals(_patchChange) {
return _patchChange.inserted === 0 && _patchChange.deleted === 0; return _patchChange.inserted === 0 && _patchChange.deleted === 0;
}, }
_shouldHideBinaryChangeTotals(_patchChange) { _shouldHideBinaryChangeTotals(_patchChange) {
return _patchChange.size_delta_inserted === 0 && return _patchChange.size_delta_inserted === 0 &&
_patchChange.size_delta_deleted === 0; _patchChange.size_delta_deleted === 0;
}, }
_computeFileStatus(status) { _computeFileStatus(status) {
return status || 'M'; return status || 'M';
}, }
_computeDiffURL(change, patchNum, basePatchNum, path, editMode) { _computeDiffURL(change, patchNum, basePatchNum, path, editMode) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -784,7 +802,7 @@
basePatchNum); basePatchNum);
} }
return Gerrit.Nav.getUrlForDiff(change, path, patchNum, basePatchNum); return Gerrit.Nav.getUrlForDiff(change, path, patchNum, basePatchNum);
}, }
_formatBytes(bytes) { _formatBytes(bytes) {
if (bytes == 0) return '+/-0 B'; if (bytes == 0) return '+/-0 B';
@@ -796,7 +814,7 @@
const prepend = bytes > 0 ? '+' : ''; const prepend = bytes > 0 ? '+' : '';
return prepend + parseFloat((bytes / Math.pow(bits, exponent)) return prepend + parseFloat((bytes / Math.pow(bits, exponent))
.toFixed(decimals)) + ' ' + sizes[exponent]; .toFixed(decimals)) + ' ' + sizes[exponent];
}, }
_formatPercentage(size, delta) { _formatPercentage(size, delta) {
const oldSize = size - delta; const oldSize = size - delta;
@@ -805,12 +823,12 @@
const percentage = Math.round(Math.abs(delta * 100 / oldSize)); const percentage = Math.round(Math.abs(delta * 100 / oldSize));
return '(' + (delta > 0 ? '+' : '-') + percentage + '%)'; return '(' + (delta > 0 ? '+' : '-') + percentage + '%)';
}, }
_computeBinaryClass(delta) { _computeBinaryClass(delta) {
if (delta === 0) { return; } if (delta === 0) { return; }
return delta >= 0 ? 'added' : 'removed'; return delta >= 0 ? 'added' : 'removed';
}, }
/** /**
* @param {string} baseClass * @param {string} baseClass
@@ -825,16 +843,16 @@
classes.push('invisible'); classes.push('invisible');
} }
return classes.join(' '); return classes.join(' ');
}, }
_computePathClass(path, expandedFilesRecord) { _computePathClass(path, expandedFilesRecord) {
return this._isFileExpanded(path, expandedFilesRecord) ? 'expanded' : ''; return this._isFileExpanded(path, expandedFilesRecord) ? 'expanded' : '';
}, }
_computeShowHideIcon(path, expandedFilesRecord) { _computeShowHideIcon(path, expandedFilesRecord) {
return this._isFileExpanded(path, expandedFilesRecord) ? return this._isFileExpanded(path, expandedFilesRecord) ?
'gr-icons:expand-less' : 'gr-icons:expand-more'; 'gr-icons:expand-less' : 'gr-icons:expand-more';
}, }
_computeFiles(filesByPath, changeComments, patchRange, reviewed, loading) { _computeFiles(filesByPath, changeComments, patchRange, reviewed, loading) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -864,7 +882,7 @@
} }
this._files = this._normalizeChangeFilesResponse(files); this._files = this._normalizeChangeFilesResponse(files);
}, }
_computeFilesShown(numFilesShown, files) { _computeFilesShown(numFilesShown, files) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -888,13 +906,13 @@
Math.max(0, filesShown.length - previousNumFilesShown); Math.max(0, filesShown.length - previousNumFilesShown);
return filesShown; return filesShown;
}, }
_updateDiffCursor() { _updateDiffCursor() {
// Overwrite the cursor's list of diffs: // Overwrite the cursor's list of diffs:
this.$.diffCursor.splice( this.$.diffCursor.splice(
...['diffs', 0, this.$.diffCursor.diffs.length].concat(this.diffs)); ...['diffs', 0, this.$.diffCursor.diffs.length].concat(this.diffs));
}, }
_filesChanged() { _filesChanged() {
if (this._files && this._files.length > 0) { if (this._files && this._files.length > 0) {
@@ -904,41 +922,41 @@
this.$.fileCursor.stops = files; this.$.fileCursor.stops = files;
this.$.fileCursor.setCursorAtIndex(this.selectedIndex, true); this.$.fileCursor.setCursorAtIndex(this.selectedIndex, true);
} }
}, }
_incrementNumFilesShown() { _incrementNumFilesShown() {
this.numFilesShown += this.fileListIncrement; this.numFilesShown += this.fileListIncrement;
}, }
_computeFileListControlClass(numFilesShown, files) { _computeFileListControlClass(numFilesShown, files) {
return numFilesShown >= files.length ? 'invisible' : ''; return numFilesShown >= files.length ? 'invisible' : '';
}, }
_computeIncrementText(numFilesShown, files) { _computeIncrementText(numFilesShown, files) {
if (!files) { return ''; } if (!files) { return ''; }
const text = const text =
Math.min(this.fileListIncrement, files.length - numFilesShown); Math.min(this.fileListIncrement, files.length - numFilesShown);
return 'Show ' + text + ' more'; return 'Show ' + text + ' more';
}, }
_computeShowAllText(files) { _computeShowAllText(files) {
if (!files) { return ''; } if (!files) { return ''; }
return 'Show all ' + files.length + ' files'; return 'Show all ' + files.length + ' files';
}, }
_computeWarnShowAll(files) { _computeWarnShowAll(files) {
return files.length > WARN_SHOW_ALL_THRESHOLD; return files.length > WARN_SHOW_ALL_THRESHOLD;
}, }
_computeShowAllWarning(files) { _computeShowAllWarning(files) {
if (!this._computeWarnShowAll(files)) { return ''; } if (!this._computeWarnShowAll(files)) { return ''; }
return 'Warning: showing all ' + files.length + return 'Warning: showing all ' + files.length +
' files may take several seconds.'; ' files may take several seconds.';
}, }
_showAllFiles() { _showAllFiles() {
this.numFilesShown = this._files.length; this.numFilesShown = this._files.length;
}, }
_computePatchSetDescription(revisions, patchNum) { _computePatchSetDescription(revisions, patchNum) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -949,7 +967,7 @@
const rev = this.getRevisionByPatchNum(revisions, patchNum); const rev = this.getRevisionByPatchNum(revisions, patchNum);
return (rev && rev.description) ? return (rev && rev.description) ?
rev.description.substring(0, PATCH_DESC_MAX_LENGTH) : ''; rev.description.substring(0, PATCH_DESC_MAX_LENGTH) : '';
}, }
/** /**
* Get a descriptive label for use in the status indicator's tooltip and * Get a descriptive label for use in the status indicator's tooltip and
@@ -961,16 +979,16 @@
const statusCode = this._computeFileStatus(status); const statusCode = this._computeFileStatus(status);
return FileStatus.hasOwnProperty(statusCode) ? return FileStatus.hasOwnProperty(statusCode) ?
FileStatus[statusCode] : 'Status Unknown'; FileStatus[statusCode] : 'Status Unknown';
}, }
_isFileExpanded(path, expandedFilesRecord) { _isFileExpanded(path, expandedFilesRecord) {
return expandedFilesRecord.base.includes(path); return expandedFilesRecord.base.includes(path);
}, }
_onLineSelected(e, detail) { _onLineSelected(e, detail) {
this.$.diffCursor.moveToLineNumber(detail.number, detail.side, this.$.diffCursor.moveToLineNumber(detail.number, detail.side,
detail.path); detail.path);
}, }
_computeExpandedFiles(expandedCount, totalCount) { _computeExpandedFiles(expandedCount, totalCount) {
if (expandedCount === 0) { if (expandedCount === 0) {
@@ -979,7 +997,7 @@
return GrFileListConstants.FilesExpandedState.ALL; return GrFileListConstants.FilesExpandedState.ALL;
} }
return GrFileListConstants.FilesExpandedState.SOME; return GrFileListConstants.FilesExpandedState.SOME;
}, }
/** /**
* Handle splices to the list of expanded file paths. If there are any new * Handle splices to the list of expanded file paths. If there are any new
@@ -1017,14 +1035,14 @@
this._updateDiffCursor(); this._updateDiffCursor();
this.$.diffCursor.handleDiffUpdate(); this.$.diffCursor.handleDiffUpdate();
}, }
_clearCollapsedDiffs(collapsedDiffs) { _clearCollapsedDiffs(collapsedDiffs) {
for (const diff of collapsedDiffs) { for (const diff of collapsedDiffs) {
diff.cancel(); diff.cancel();
diff.clearDiffContent(); diff.clearDiffContent();
} }
}, }
/** /**
* Given an array of paths and a NodeList of diff elements, render the diff * Given an array of paths and a NodeList of diff elements, render the diff
@@ -1065,13 +1083,13 @@
this.$.diffCursor.handleDiffUpdate(); this.$.diffCursor.handleDiffUpdate();
}); });
}); });
}, }
/** Cancel the rendering work of every diff in the list */ /** Cancel the rendering work of every diff in the list */
_cancelDiffs() { _cancelDiffs() {
if (this._cancelForEachDiff) { this._cancelForEachDiff(); } if (this._cancelForEachDiff) { this._cancelForEachDiff(); }
this._forEachDiff(d => d.cancel()); this._forEachDiff(d => d.cancel());
}, }
/** /**
* In the given NodeList of diff elements, find the diff for the given path. * In the given NodeList of diff elements, find the diff for the given path.
@@ -1085,7 +1103,7 @@
return diffElements[i]; return diffElements[i];
} }
} }
}, }
/** /**
* Reset the comments of a modified thread * Reset the comments of a modified thread
@@ -1122,14 +1140,14 @@
}); });
Polymer.dom.flush(); Polymer.dom.flush();
return; return;
}, }
_handleEscKey(e) { _handleEscKey(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
this.modifierPressed(e)) { return; } this.modifierPressed(e)) { return; }
e.preventDefault(); e.preventDefault();
this._displayLine = false; this._displayLine = false;
}, }
/** /**
* Update the loading class for the file list rows. The update is inside a * Update the loading class for the file list rows. The update is inside a
@@ -1143,19 +1161,19 @@
// this way, the gray loading style is not shown on initial loads. // this way, the gray loading style is not shown on initial loads.
this.classList.toggle('loading', loading && !!this._files.length); this.classList.toggle('loading', loading && !!this._files.length);
}, LOADING_DEBOUNCE_INTERVAL); }, LOADING_DEBOUNCE_INTERVAL);
}, }
_editModeChanged(editMode) { _editModeChanged(editMode) {
this.classList.toggle('editMode', editMode); this.classList.toggle('editMode', editMode);
}, }
_computeReviewedClass(isReviewed) { _computeReviewedClass(isReviewed) {
return isReviewed ? 'isReviewed' : ''; return isReviewed ? 'isReviewed' : '';
}, }
_computeReviewedText(isReviewed) { _computeReviewedText(isReviewed) {
return isReviewed ? 'MARK UNREVIEWED' : 'MARK REVIEWED'; return isReviewed ? 'MARK UNREVIEWED' : 'MARK REVIEWED';
}, }
/** /**
* Given a file path, return whether that path should have visible size bars * Given a file path, return whether that path should have visible size bars
@@ -1165,7 +1183,7 @@
*/ */
_showBarsForPath(path) { _showBarsForPath(path) {
return path !== this.COMMIT_MESSAGE_PATH && path !== this.MERGE_LIST_PATH; return path !== this.COMMIT_MESSAGE_PATH && path !== this.MERGE_LIST_PATH;
}, }
/** /**
* Compute size bar layout values from the file list. * Compute size bar layout values from the file list.
@@ -1199,7 +1217,7 @@
stats.deletionOffset = stats.maxAdditionWidth + SIZE_BAR_GAP_WIDTH; stats.deletionOffset = stats.maxAdditionWidth + SIZE_BAR_GAP_WIDTH;
} }
return stats; return stats;
}, }
/** /**
* Get the width of the addition bar for a file. * Get the width of the addition bar for a file.
@@ -1216,7 +1234,7 @@
const width = const width =
stats.maxAdditionWidth * file.lines_inserted / stats.maxInserted; stats.maxAdditionWidth * file.lines_inserted / stats.maxInserted;
return width === 0 ? 0 : Math.max(SIZE_BAR_MIN_WIDTH, width); return width === 0 ? 0 : Math.max(SIZE_BAR_MIN_WIDTH, width);
}, }
/** /**
* Get the x-offset of the addition bar for a file. * Get the x-offset of the addition bar for a file.
@@ -1227,7 +1245,7 @@
_computeBarAdditionX(file, stats) { _computeBarAdditionX(file, stats) {
return stats.maxAdditionWidth - return stats.maxAdditionWidth -
this._computeBarAdditionWidth(file, stats); this._computeBarAdditionWidth(file, stats);
}, }
/** /**
* Get the width of the deletion bar for a file. * Get the width of the deletion bar for a file.
@@ -1244,7 +1262,7 @@
const width = const width =
stats.maxDeletionWidth * file.lines_deleted / stats.maxDeleted; stats.maxDeletionWidth * file.lines_deleted / stats.maxDeleted;
return width === 0 ? 0 : Math.max(SIZE_BAR_MIN_WIDTH, width); return width === 0 ? 0 : Math.max(SIZE_BAR_MIN_WIDTH, width);
}, }
/** /**
* Get the x-offset of the deletion bar for a file. * Get the x-offset of the deletion bar for a file.
@@ -1253,11 +1271,11 @@
*/ */
_computeBarDeletionX(stats) { _computeBarDeletionX(stats) {
return stats.deletionOffset; return stats.deletionOffset;
}, }
_computeShowSizeBars(userPrefs) { _computeShowSizeBars(userPrefs) {
return !!userPrefs.size_bar_in_change_table; return !!userPrefs.size_bar_in_change_table;
}, }
_computeSizeBarsClass(showSizeBars, path) { _computeSizeBarsClass(showSizeBars, path) {
let hideClass = ''; let hideClass = '';
@@ -1267,7 +1285,7 @@
hideClass = 'invisible'; hideClass = 'invisible';
} }
return `sizeBars desktop ${hideClass}`; return `sizeBars desktop ${hideClass}`;
}, }
/** /**
* Shows registered dynamic columns iff the 'header', 'content' and * Shows registered dynamic columns iff the 'header', 'content' and
@@ -1280,7 +1298,7 @@
return headerEndpoints && contentEndpoints && summaryEndpoints && return headerEndpoints && contentEndpoints && summaryEndpoints &&
headerEndpoints.length === contentEndpoints.length && headerEndpoints.length === contentEndpoints.length &&
headerEndpoints.length === summaryEndpoints.length; headerEndpoints.length === summaryEndpoints.length;
}, }
/** /**
* Returns true if none of the inline diffs have been expanded. * Returns true if none of the inline diffs have been expanded.
@@ -1288,7 +1306,7 @@
*/ */
_noDiffsExpanded() { _noDiffsExpanded() {
return this.filesExpanded === GrFileListConstants.FilesExpandedState.NONE; return this.filesExpanded === GrFileListConstants.FilesExpandedState.NONE;
}, }
/** /**
* Method to call via binding when each file list row is rendered. This * Method to call via binding when each file list row is rendered. This
@@ -1305,7 +1323,7 @@
}, 1); }, 1);
} }
return ''; return '';
}, }
_reviewedTitle(reviewed) { _reviewedTitle(reviewed) {
if (reviewed) { if (reviewed) {
@@ -1313,12 +1331,14 @@
} }
return 'Mark as reviewed (shortcut: r)'; return 'Mark as reviewed (shortcut: r)';
}, }
_handleReloadingDiffPreference() { _handleReloadingDiffPreference() {
this._getDiffPreferences().then(prefs => { this._getDiffPreferences().then(prefs => {
this.diffPrefs = prefs; this.diffPrefs = prefs;
}); });
}, }
}); }
customElements.define(GrFileList.is, GrFileList);
})(); })();

View File

@@ -17,16 +17,23 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-included-in-dialog', * @appliesMixin Gerrit.FireMixin
*/
class GrIncludedInDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-included-in-dialog'; }
/** /**
* Fired when the user presses the close button. * Fired when the user presses the close button.
* *
* @event close * @event close
*/ */
properties: { static get properties() {
return {
/** @type {?} */ /** @type {?} */
changeNum: { changeNum: {
type: Object, type: Object,
@@ -42,11 +49,8 @@
type: String, type: String,
value: '', value: '',
}, },
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
loadData() { loadData() {
if (!this.changeNum) { return; } if (!this.changeNum) { return; }
@@ -57,12 +61,12 @@
this._includedIn = configs; this._includedIn = configs;
this._loaded = true; this._loaded = true;
}); });
}, }
_resetData() { _resetData() {
this._includedIn = null; this._includedIn = null;
this._loaded = false; this._loaded = false;
}, }
_computeGroups(includedIn, filterText) { _computeGroups(includedIn, filterText) {
if (!includedIn) { return []; } if (!includedIn) { return []; }
@@ -83,22 +87,24 @@
} }
} }
return groups.filter(g => g.items.length); return groups.filter(g => g.items.length);
}, }
_handleCloseTap(e) { _handleCloseTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('close', null, {bubbles: false}); this.fire('close', null, {bubbles: false});
}, }
_computeLoadingClass(loaded) { _computeLoadingClass(loaded) {
return loaded ? 'loading loaded' : 'loading'; return loaded ? 'loading loaded' : 'loading';
}, }
_onFilterChanged() { _onFilterChanged() {
this.debounce('filter-change', () => { this.debounce('filter-change', () => {
this._filterText = this.$.filterInput.bindValue; this._filterText = this.$.filterInput.bindValue;
}, 100); }, 100);
}, }
}); }
customElements.define(GrIncludedInDialog.is, GrIncludedInDialog);
})(); })();

View File

@@ -17,16 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrLabelScoreRow extends Polymer.GestureEventListeners(
is: 'gr-label-score-row', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-label-score-row'; }
/** /**
* Fired when any label is changed. * Fired when any label is changed.
* *
* @event labels-changed * @event labels-changed
*/ */
properties: { static get properties() {
return {
/** /**
* @type {{ name: string }} * @type {{ name: string }}
*/ */
@@ -46,27 +48,28 @@
type: Array, type: Array,
computed: '_computePermittedLabelValues(permittedLabels, label.name)', computed: '_computePermittedLabelValues(permittedLabels, label.name)',
}, },
}, };
}
get selectedItem() { get selectedItem() {
if (!this._ironSelector) { return undefined; } if (!this._ironSelector) { return undefined; }
return this._ironSelector.selectedItem; return this._ironSelector.selectedItem;
}, }
get selectedValue() { get selectedValue() {
if (!this._ironSelector) { return undefined; } if (!this._ironSelector) { return undefined; }
return this._ironSelector.selected; return this._ironSelector.selected;
}, }
setSelectedValue(value) { setSelectedValue(value) {
// The selector may not be present if its not at the latest patch set. // The selector may not be present if its not at the latest patch set.
if (!this._ironSelector) { return; } if (!this._ironSelector) { return; }
this._ironSelector.select(value); this._ironSelector.select(value);
}, }
get _ironSelector() { get _ironSelector() {
return this.$ && this.$.labelSelector; return this.$ && this.$.labelSelector;
}, }
_computeBlankItems(permittedLabels, label, side) { _computeBlankItems(permittedLabels, label, side) {
if (!permittedLabels || !permittedLabels[label] || if (!permittedLabels || !permittedLabels[label] ||
@@ -82,7 +85,7 @@
const endPosition = this.labelValues[parseInt( const endPosition = this.labelValues[parseInt(
permittedLabels[label][permittedLabels[label].length - 1], 10)]; permittedLabels[label][permittedLabels[label].length - 1], 10)];
return new Array(Object.keys(this.labelValues).length - endPosition - 1); return new Array(Object.keys(this.labelValues).length - endPosition - 1);
}, }
_getLabelValue(labels, permittedLabels, label) { _getLabelValue(labels, permittedLabels, label) {
if (label.value) { if (label.value) {
@@ -93,7 +96,7 @@
return permittedLabels[label.name].find( return permittedLabels[label.name].find(
value => parseInt(value, 10) === labels[label.name].default_value); value => parseInt(value, 10) === labels[label.name].default_value);
} }
}, }
_computeButtonClass(value, index, totalItems) { _computeButtonClass(value, index, totalItems) {
const classes = []; const classes = [];
@@ -114,7 +117,7 @@
} }
return classes.join(' '); return classes.join(' ');
}, }
_computeLabelValue(labels, permittedLabels, label) { _computeLabelValue(labels, permittedLabels, label) {
if ([labels, permittedLabels, label].some(arg => arg === undefined)) { if ([labels, permittedLabels, label].some(arg => arg === undefined)) {
@@ -131,7 +134,7 @@
} }
} }
return null; return null;
}, }
_setSelectedValueText(e) { _setSelectedValueText(e) {
// Needed because when the selected item changes, it first changes to // Needed because when the selected item changes, it first changes to
@@ -145,17 +148,17 @@
this.dispatchEvent(new CustomEvent( this.dispatchEvent(new CustomEvent(
'labels-changed', 'labels-changed',
{detail: {name, value}, bubbles: true, composed: true})); {detail: {name, value}, bubbles: true, composed: true}));
}, }
_computeAnyPermittedLabelValues(permittedLabels, label) { _computeAnyPermittedLabelValues(permittedLabels, label) {
return permittedLabels && permittedLabels.hasOwnProperty(label) && return permittedLabels && permittedLabels.hasOwnProperty(label) &&
permittedLabels[label].length; permittedLabels[label].length;
}, }
_computeHiddenClass(permittedLabels, label) { _computeHiddenClass(permittedLabels, label) {
return !this._computeAnyPermittedLabelValues(permittedLabels, label) ? return !this._computeAnyPermittedLabelValues(permittedLabels, label) ?
'hidden' : ''; 'hidden' : '';
}, }
_computePermittedLabelValues(permittedLabels, label) { _computePermittedLabelValues(permittedLabels, label) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -164,12 +167,14 @@
} }
return permittedLabels[label]; return permittedLabels[label];
}, }
_computeLabelValueTitle(labels, label, value) { _computeLabelValueTitle(labels, label, value) {
return labels[label] && return labels[label] &&
labels[label].values && labels[label].values &&
labels[label].values[value]; labels[label].values[value];
}, }
}); }
customElements.define(GrLabelScoreRow.is, GrLabelScoreRow);
})(); })();

View File

@@ -17,10 +17,13 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrLabelScores extends Polymer.GestureEventListeners(
is: 'gr-label-scores', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-label-scores'; }
properties: { static get properties() {
return {
_labels: { _labels: {
type: Array, type: Array,
computed: '_computeLabels(change.labels.*, account)', computed: '_computeLabels(change.labels.*, account)',
@@ -35,7 +38,8 @@
account: Object, account: Object,
_labelValues: Object, _labelValues: Object,
}, };
}
getLabelValues() { getLabelValues() {
const labels = {}; const labels = {};
@@ -61,7 +65,7 @@
} }
} }
return labels; return labels;
}, }
_getStringLabelValue(labels, labelName, numberValue) { _getStringLabelValue(labels, labelName, numberValue) {
for (const k in labels[labelName].values) { for (const k in labels[labelName].values) {
@@ -70,7 +74,7 @@
} }
} }
return numberValue; return numberValue;
}, }
_getVoteForAccount(labels, labelName, account) { _getVoteForAccount(labels, labelName, account) {
const votes = labels[labelName]; const votes = labels[labelName];
@@ -83,7 +87,7 @@
} }
} }
return null; return null;
}, }
_computeLabels(labelRecord, account) { _computeLabels(labelRecord, account) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -99,7 +103,7 @@
value: this._getVoteForAccount(labelsObj, key, this.account), value: this._getVoteForAccount(labelsObj, key, this.account),
}; };
}); });
}, }
_computeColumns(permittedLabels) { _computeColumns(permittedLabels) {
const labels = Object.keys(permittedLabels); const labels = Object.keys(permittedLabels);
@@ -118,11 +122,11 @@
values[orderedValues[i]] = i; values[orderedValues[i]] = i;
} }
this._labelValues = values; this._labelValues = values;
}, }
_changeIsMerged(changeStatus) { _changeIsMerged(changeStatus) {
return changeStatus === 'MERGED'; return changeStatus === 'MERGED';
}, }
/** /**
* @param label {string|undefined} * @param label {string|undefined}
@@ -136,6 +140,8 @@
return permittedLabels.hasOwnProperty(label) && return permittedLabels.hasOwnProperty(label) &&
permittedLabels[label].length ? 'access' : 'no-access'; permittedLabels[label].length ? 'access' : 'no-access';
}, }
}); }
customElements.define(GrLabelScores.is, GrLabelScores);
})(); })();

View File

@@ -20,9 +20,15 @@
const PATCH_SET_PREFIX_PATTERN = /^Patch Set \d+: /; const PATCH_SET_PREFIX_PATTERN = /^Patch Set \d+: /;
const LABEL_TITLE_SCORE_PATTERN = /^([A-Za-z0-9-]+)([+-]\d+)$/; const LABEL_TITLE_SCORE_PATTERN = /^([A-Za-z0-9-]+)([+-]\d+)$/;
Polymer({ /**
is: 'gr-message', * @appliesMixin Gerrit.FireMixin
*/
class GrMessage extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-message'; }
/** /**
* Fired when this message's reply link is tapped. * Fired when this message's reply link is tapped.
* *
@@ -35,11 +41,8 @@
* @event message-anchor-tap * @event message-anchor-tap
*/ */
listeners: { static get properties() {
click: '_handleClick', return {
},
properties: {
changeNum: Number, changeNum: Number,
/** @type {?} */ /** @type {?} */
message: Object, message: Object,
@@ -101,24 +104,30 @@
type: Boolean, type: Boolean,
value: false, value: false,
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
],
observers: [
'_updateExpandedClass(message.expanded)', '_updateExpandedClass(message.expanded)',
], ];
}
created() {
super.created();
this.addEventListener('click',
e => this._handleClick(e));
}
ready() { ready() {
super.ready();
this.$.restAPI.getConfig().then(config => { this.$.restAPI.getConfig().then(config => {
this.config = config; this.config = config;
}); });
this.$.restAPI.getLoggedIn().then(loggedIn => { this.$.restAPI.getLoggedIn().then(loggedIn => {
this._loggedIn = loggedIn; this._loggedIn = loggedIn;
}); });
}, }
_updateExpandedClass(expanded) { _updateExpandedClass(expanded) {
if (expanded) { if (expanded) {
@@ -126,30 +135,30 @@
} else { } else {
this.classList.remove('expanded'); this.classList.remove('expanded');
} }
}, }
_computeAuthor(message) { _computeAuthor(message) {
return message.author || message.updated_by; return message.author || message.updated_by;
}, }
_computeShowAvatar(author, config) { _computeShowAvatar(author, config) {
return !!(author && config && config.plugin && config.plugin.has_avatars); return !!(author && config && config.plugin && config.plugin.has_avatars);
}, }
_computeShowOnBehalfOf(message) { _computeShowOnBehalfOf(message) {
const author = message.author || message.updated_by; const author = message.author || message.updated_by;
return !!(author && message.real_author && return !!(author && message.real_author &&
author._account_id != message.real_author._account_id); author._account_id != message.real_author._account_id);
}, }
_computeShowReplyButton(message, loggedIn) { _computeShowReplyButton(message, loggedIn) {
return message && !!message.message && loggedIn && return message && !!message.message && loggedIn &&
!this._computeIsAutomated(message); !this._computeIsAutomated(message);
}, }
_computeExpanded(expanded) { _computeExpanded(expanded) {
return expanded; return expanded;
}, }
/** /**
* If there is no value set on the message object as to whether _expanded * If there is no value set on the message object as to whether _expanded
@@ -160,33 +169,33 @@
if (this.message && this.message.expanded === undefined) { if (this.message && this.message.expanded === undefined) {
this.set('message.expanded', Object.keys(value || {}).length > 0); this.set('message.expanded', Object.keys(value || {}).length > 0);
} }
}, }
_handleClick(e) { _handleClick(e) {
if (this.message.expanded) { return; } if (this.message.expanded) { return; }
e.stopPropagation(); e.stopPropagation();
this.set('message.expanded', true); this.set('message.expanded', true);
}, }
_handleAuthorClick(e) { _handleAuthorClick(e) {
if (!this.message.expanded) { return; } if (!this.message.expanded) { return; }
e.stopPropagation(); e.stopPropagation();
this.set('message.expanded', false); this.set('message.expanded', false);
}, }
_computeIsAutomated(message) { _computeIsAutomated(message) {
return !!(message.reviewer || return !!(message.reviewer ||
this._computeIsReviewerUpdate(message) || this._computeIsReviewerUpdate(message) ||
(message.tag && message.tag.startsWith('autogenerated'))); (message.tag && message.tag.startsWith('autogenerated')));
}, }
_computeIsHidden(hideAutomated, isAutomated) { _computeIsHidden(hideAutomated, isAutomated) {
return hideAutomated && isAutomated; return hideAutomated && isAutomated;
}, }
_computeIsReviewerUpdate(event) { _computeIsReviewerUpdate(event) {
return event.type === 'REVIEWER_UPDATE'; return event.type === 'REVIEWER_UPDATE';
}, }
_getScores(message) { _getScores(message) {
if (!message.message) { return []; } if (!message.message) { return []; }
@@ -199,7 +208,7 @@
.map(s => s.match(LABEL_TITLE_SCORE_PATTERN)) .map(s => s.match(LABEL_TITLE_SCORE_PATTERN))
.filter(ms => ms && ms.length === 3) .filter(ms => ms && ms.length === 3)
.map(ms => ({label: ms[1], value: ms[2]})); .map(ms => ({label: ms[1], value: ms[2]}));
}, }
_computeScoreClass(score, labelExtremes) { _computeScoreClass(score, labelExtremes) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -222,14 +231,14 @@
} }
} }
return classes.join(' '); return classes.join(' ');
}, }
_computeClass(expanded, showAvatar, message) { _computeClass(expanded, showAvatar, message) {
const classes = []; const classes = [];
classes.push(expanded ? 'expanded' : 'collapsed'); classes.push(expanded ? 'expanded' : 'collapsed');
classes.push(showAvatar ? 'showAvatar' : 'hideAvatar'); classes.push(showAvatar ? 'showAvatar' : 'hideAvatar');
return classes.join(' '); return classes.join(' ');
}, }
_handleAnchorClick(e) { _handleAnchorClick(e) {
e.preventDefault(); e.preventDefault();
@@ -238,26 +247,28 @@
composed: true, composed: true,
detail: {id: this.message.id}, detail: {id: this.message.id},
})); }));
}, }
_handleReplyTap(e) { _handleReplyTap(e) {
e.preventDefault(); e.preventDefault();
this.fire('reply', {message: this.message}); this.fire('reply', {message: this.message});
}, }
_projectNameChanged(name) { _projectNameChanged(name) {
this.$.restAPI.getProjectConfig(name).then(config => { this.$.restAPI.getProjectConfig(name).then(config => {
this._projectConfig = config; this._projectConfig = config;
}); });
}, }
_computeExpandToggleIcon(expanded) { _computeExpandToggleIcon(expanded) {
return expanded ? 'gr-icons:expand-less' : 'gr-icons:expand-more'; return expanded ? 'gr-icons:expand-less' : 'gr-icons:expand-more';
}, }
_toggleExpanded(e) { _toggleExpanded(e) {
e.stopPropagation(); e.stopPropagation();
this.set('message.expanded', !this.message.expanded); this.set('message.expanded', !this.message.expanded);
}, }
}); }
customElements.define(GrMessage.is, GrMessage);
})(); })();

View File

@@ -25,10 +25,13 @@
SHOW_MORE: 'show-more-messages', SHOW_MORE: 'show-more-messages',
}; };
Polymer({ class GrMessagesList extends Polymer.GestureEventListeners(
is: 'gr-messages-list', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-messages-list'; }
properties: { static get properties() {
return {
changeNum: Number, changeNum: Number,
messages: { messages: {
type: Array, type: Array,
@@ -75,7 +78,8 @@
type: Object, type: Object,
computed: '_computeLabelExtremes(labels.*)', computed: '_computeLabelExtremes(labels.*)',
}, },
}, };
}
scrollToMessage(messageID) { scrollToMessage(messageID) {
let el = this.$$('[data-message-id="' + messageID + '"]'); let el = this.$$('[data-message-id="' + messageID + '"]');
@@ -108,12 +112,12 @@
} }
window.scrollTo(0, top); window.scrollTo(0, top);
this._highlightEl(el); this._highlightEl(el);
}, }
_isAutomated(message) { _isAutomated(message) {
return !!(message.reviewer || return !!(message.reviewer ||
(message.tag && message.tag.startsWith('autogenerated'))); (message.tag && message.tag.startsWith('autogenerated')));
}, }
_computeItems(messages, reviewerUpdates) { _computeItems(messages, reviewerUpdates) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -152,7 +156,7 @@
} }
} }
return result; return result;
}, }
_expandedChanged(exp) { _expandedChanged(exp) {
if (this._processedMessages) { if (this._processedMessages) {
@@ -169,7 +173,7 @@
this.notifyPath(`_visibleMessages.${i}.expanded`); this.notifyPath(`_visibleMessages.${i}.expanded`);
} }
} }
}, }
_highlightEl(el) { _highlightEl(el) {
const highlightedEls = const highlightedEls =
@@ -183,23 +187,23 @@
} }
el.addEventListener('animationend', handleAnimationEnd); el.addEventListener('animationend', handleAnimationEnd);
el.classList.add('highlighted'); el.classList.add('highlighted');
}, }
/** /**
* @param {boolean} expand * @param {boolean} expand
*/ */
handleExpandCollapse(expand) { handleExpandCollapse(expand) {
this._expanded = expand; this._expanded = expand;
}, }
_handleExpandCollapseTap(e) { _handleExpandCollapseTap(e) {
e.preventDefault(); e.preventDefault();
this.handleExpandCollapse(!this._expanded); this.handleExpandCollapse(!this._expanded);
}, }
_handleAnchorClick(e) { _handleAnchorClick(e) {
this.scrollToMessage(e.detail.id); this.scrollToMessage(e.detail.id);
}, }
_hasAutomatedMessages(messages) { _hasAutomatedMessages(messages) {
if (!messages) { return false; } if (!messages) { return false; }
@@ -209,11 +213,11 @@
} }
} }
return false; return false;
}, }
_computeExpandCollapseMessage(expanded) { _computeExpandCollapseMessage(expanded) {
return expanded ? 'Collapse all' : 'Expand all'; return expanded ? 'Collapse all' : 'Expand all';
}, }
/** /**
* Computes message author's file comments for change's message. * Computes message author's file comments for change's message.
@@ -268,7 +272,7 @@
} }
} }
return msgComments; return msgComments;
}, }
/** /**
* Returns the number of messages to splice to the beginning of * Returns the number of messages to splice to the beginning of
@@ -293,7 +297,7 @@
delta = msgsRemaining - i; delta = msgsRemaining - i;
} }
return Math.min(msgsRemaining, delta); return Math.min(msgsRemaining, delta);
}, }
/** /**
* Gets the number of messages that would be visible, but do not currently * Gets the number of messages that would be visible, but do not currently
@@ -309,20 +313,20 @@
this._getHumanMessages(visibleMessages).length; this._getHumanMessages(visibleMessages).length;
} }
return messages.length - visibleMessages.length; return messages.length - visibleMessages.length;
}, }
_computeIncrementText(visibleMessages, messages, hideAutomated) { _computeIncrementText(visibleMessages, messages, hideAutomated) {
let delta = this._getDelta(visibleMessages, messages, hideAutomated); let delta = this._getDelta(visibleMessages, messages, hideAutomated);
delta = Math.min( delta = Math.min(
this._numRemaining(visibleMessages, messages, hideAutomated), delta); this._numRemaining(visibleMessages, messages, hideAutomated), delta);
return 'Show ' + Math.min(MESSAGES_INCREMENT, delta) + ' more'; return 'Show ' + Math.min(MESSAGES_INCREMENT, delta) + ' more';
}, }
_getHumanMessages(messages) { _getHumanMessages(messages) {
return messages.filter(msg => { return messages.filter(msg => {
return !this._isAutomated(msg); return !this._isAutomated(msg);
}); });
}, }
_computeShowHideTextHidden(visibleMessages, messages, _computeShowHideTextHidden(visibleMessages, messages,
hideAutomated) { hideAutomated) {
@@ -335,12 +339,12 @@
visibleMessages = this._getHumanMessages(visibleMessages); visibleMessages = this._getHumanMessages(visibleMessages);
} }
return visibleMessages.length >= messages.length; return visibleMessages.length >= messages.length;
}, }
_handleShowAllTap() { _handleShowAllTap() {
this._visibleMessages = this._processedMessages; this._visibleMessages = this._processedMessages;
this.$.reporting.reportInteraction(ReportingEvent.SHOW_ALL); this.$.reporting.reportInteraction(ReportingEvent.SHOW_ALL);
}, }
_handleIncrementShownMessages() { _handleIncrementShownMessages() {
const delta = this._getDelta(this._visibleMessages, const delta = this._getDelta(this._visibleMessages,
@@ -350,27 +354,27 @@
// Add newMessages to the beginning of _visibleMessages // Add newMessages to the beginning of _visibleMessages
this.splice(...['_visibleMessages', 0, 0].concat(newMessages)); this.splice(...['_visibleMessages', 0, 0].concat(newMessages));
this.$.reporting.reportInteraction(ReportingEvent.SHOW_MORE); this.$.reporting.reportInteraction(ReportingEvent.SHOW_MORE);
}, }
_processedMessagesChanged(messages) { _processedMessagesChanged(messages) {
if (messages) { if (messages) {
this._visibleMessages = messages.slice(-MAX_INITIAL_SHOWN_MESSAGES); this._visibleMessages = messages.slice(-MAX_INITIAL_SHOWN_MESSAGES);
} }
}, }
_computeNumMessagesText(visibleMessages, messages, _computeNumMessagesText(visibleMessages, messages,
hideAutomated) { hideAutomated) {
const total = const total =
this._numRemaining(visibleMessages, messages, hideAutomated); this._numRemaining(visibleMessages, messages, hideAutomated);
return total === 1 ? 'Show 1 message' : 'Show all ' + total + ' messages'; return total === 1 ? 'Show 1 message' : 'Show all ' + total + ' messages';
}, }
_computeIncrementHidden(visibleMessages, messages, _computeIncrementHidden(visibleMessages, messages,
hideAutomated) { hideAutomated) {
const total = const total =
this._numRemaining(visibleMessages, messages, hideAutomated); this._numRemaining(visibleMessages, messages, hideAutomated);
return total <= this._getDelta(visibleMessages, messages, hideAutomated); return total <= this._getDelta(visibleMessages, messages, hideAutomated);
}, }
/** /**
* Compute a mapping from label name to objects representing the minimum and * Compute a mapping from label name to objects representing the minimum and
@@ -389,6 +393,8 @@
extremes[key] = {min: values[0], max: values[values.length - 1]}; extremes[key] = {min: values[0], max: values[values.length - 1]};
} }
return extremes; return extremes;
}, }
}); }
customElements.define(GrMessagesList.is, GrMessagesList);
})(); })();

View File

@@ -17,9 +17,19 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-related-changes-list', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.RESTClientMixin
*/
class GrRelatedChangesList extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-related-changes-list'; }
/** /**
* Fired when a new section is loaded so that the change view can determine * Fired when a new section is loaded so that the change view can determine
* a show more button is needed, sometimes before all the sections finish * a show more button is needed, sometimes before all the sections finish
@@ -28,7 +38,8 @@
* @event new-section-loaded * @event new-section-loaded
*/ */
properties: { static get properties() {
return {
change: Object, change: Object,
hasParent: { hasParent: {
type: Boolean, type: Boolean,
@@ -74,18 +85,15 @@
type: Array, type: Array,
value() { return []; }, value() { return []; },
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
],
observers: [
'_resultsChanged(_relatedResponse, _submittedTogether, ' + '_resultsChanged(_relatedResponse, _submittedTogether, ' +
'_conflicts, _cherryPicks, _sameTopic)', '_conflicts, _cherryPicks, _sameTopic)',
], ];
}
clear() { clear() {
this.loading = true; this.loading = true;
@@ -96,7 +104,7 @@
this._conflicts = []; this._conflicts = [];
this._cherryPicks = []; this._cherryPicks = [];
this._sameTopic = []; this._sameTopic = [];
}, }
reload() { reload() {
if (!this.change || !this.patchNum) { if (!this.change || !this.patchNum) {
@@ -144,7 +152,7 @@
return Promise.all(promises).then(() => { return Promise.all(promises).then(() => {
this.loading = false; this.loading = false;
}); });
}, }
_fireReloadEvent() { _fireReloadEvent() {
// The listener on the change computes height of the related changes // The listener on the change computes height of the related changes
@@ -152,7 +160,7 @@
// that requires a flush. // that requires a flush.
Polymer.dom.flush(); Polymer.dom.flush();
this.dispatchEvent(new CustomEvent('new-section-loaded')); this.dispatchEvent(new CustomEvent('new-section-loaded'));
}, }
/** /**
* Determines whether or not the given change has a parent change. If there * Determines whether or not the given change has a parent change. If there
@@ -166,34 +174,34 @@
return relatedChanges.length > 0 && return relatedChanges.length > 0 &&
relatedChanges[relatedChanges.length - 1].change_id !== relatedChanges[relatedChanges.length - 1].change_id !==
currentChangeId; currentChangeId;
}, }
_getRelatedChanges() { _getRelatedChanges() {
return this.$.restAPI.getRelatedChanges(this.change._number, return this.$.restAPI.getRelatedChanges(this.change._number,
this.patchNum); this.patchNum);
}, }
_getSubmittedTogether() { _getSubmittedTogether() {
return this.$.restAPI.getChangesSubmittedTogether(this.change._number); return this.$.restAPI.getChangesSubmittedTogether(this.change._number);
}, }
_getServerConfig() { _getServerConfig() {
return this.$.restAPI.getConfig(); return this.$.restAPI.getConfig();
}, }
_getConflicts() { _getConflicts() {
return this.$.restAPI.getChangeConflicts(this.change._number); return this.$.restAPI.getChangeConflicts(this.change._number);
}, }
_getCherryPicks() { _getCherryPicks() {
return this.$.restAPI.getChangeCherryPicks(this.change.project, return this.$.restAPI.getChangeCherryPicks(this.change.project,
this.change.change_id, this.change._number); this.change.change_id, this.change._number);
}, }
_getChangesWithSameTopic() { _getChangesWithSameTopic() {
return this.$.restAPI.getChangesWithSameTopic(this.change.topic, return this.$.restAPI.getChangesWithSameTopic(this.change.topic,
this.change._number); this.change._number);
}, }
/** /**
* @param {number} changeNum * @param {number} changeNum
@@ -203,7 +211,7 @@
*/ */
_computeChangeURL(changeNum, project, opt_patchNum) { _computeChangeURL(changeNum, project, opt_patchNum) {
return Gerrit.Nav.getUrlForChangeById(changeNum, project, opt_patchNum); return Gerrit.Nav.getUrlForChangeById(changeNum, project, opt_patchNum);
}, }
_computeChangeContainerClass(currentChange, relatedChange) { _computeChangeContainerClass(currentChange, relatedChange) {
const classes = ['changeContainer']; const classes = ['changeContainer'];
@@ -214,7 +222,7 @@
classes.push('thisChange'); classes.push('thisChange');
} }
return classes.join(' '); return classes.join(' ');
}, }
/** /**
* Do the given objects describe the same change? Compares the changes by * Do the given objects describe the same change? Compares the changes by
@@ -229,7 +237,7 @@
const aNum = this._getChangeNumber(a); const aNum = this._getChangeNumber(a);
const bNum = this._getChangeNumber(b); const bNum = this._getChangeNumber(b);
return aNum === bNum; return aNum === bNum;
}, }
/** /**
* Get the change number from either a ChangeInfo (such as those included in * Get the change number from either a ChangeInfo (such as those included in
@@ -251,7 +259,7 @@
return change._change_number; return change._change_number;
} }
return change._number; return change._number;
}, }
_computeLinkClass(change) { _computeLinkClass(change) {
const statuses = []; const statuses = [];
@@ -262,7 +270,7 @@
statuses.push('submittable'); statuses.push('submittable');
} }
return statuses.join(' '); return statuses.join(' ');
}, }
_computeChangeStatusClass(change) { _computeChangeStatusClass(change) {
const classes = ['status']; const classes = ['status'];
@@ -276,7 +284,7 @@
classes.push('hidden'); classes.push('hidden');
} }
return classes.join(' '); return classes.join(' ');
}, }
_computeChangeStatus(change) { _computeChangeStatus(change) {
switch (change.status) { switch (change.status) {
@@ -293,7 +301,7 @@
return 'Submittable'; return 'Submittable';
} }
return ''; return '';
}, }
_resultsChanged(related, submittedTogether, conflicts, _resultsChanged(related, submittedTogether, conflicts,
cherryPicks, sameTopic) { cherryPicks, sameTopic) {
@@ -323,11 +331,11 @@
} }
} }
this.hidden = true; this.hidden = true;
}, }
_isIndirectAncestor(change) { _isIndirectAncestor(change) {
return !this._connectedRevisions.includes(change.commit.commit); return !this._connectedRevisions.includes(change.commit.commit);
}, }
_computeConnectedRevisions(change, patchNum, relatedChanges) { _computeConnectedRevisions(change, patchNum, relatedChanges) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -364,7 +372,7 @@
--pos; --pos;
} }
return connected; return connected;
}, }
_computeSubmittedTogetherClass(submittedTogether) { _computeSubmittedTogetherClass(submittedTogether) {
if (!submittedTogether || ( if (!submittedTogether || (
@@ -373,11 +381,13 @@
return 'hidden'; return 'hidden';
} }
return ''; return '';
}, }
_computeNonVisibleChangesNote(n) { _computeNonVisibleChangesNote(n) {
const noun = n === 1 ? 'change' : 'changes'; const noun = n === 1 ? 'change' : 'changes';
return `(+ ${n} non-visible ${noun})`; return `(+ ${n} non-visible ${noun})`;
}, }
}); }
customElements.define(GrRelatedChangesList.is, GrRelatedChangesList);
})(); })();

View File

@@ -52,9 +52,23 @@
const SEND_REPLY_TIMING_LABEL = 'SendReply'; const SEND_REPLY_TIMING_LABEL = 'SendReply';
Polymer({ /**
is: 'gr-reply-dialog', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.RESTClientMixin
*/
class GrReplyDialog extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-reply-dialog'; }
/** /**
* Fired when a reply is successfully sent. * Fired when a reply is successfully sent.
* *
@@ -93,7 +107,13 @@
* @event send-disabled-changed * @event send-disabled-changed
*/ */
properties: { constructor() {
super();
this.FocusTarget = FocusTarget;
}
static get properties() {
return {
/** /**
* @type {{ _number: number, removable_reviewers: Array }} * @type {{ _number: number, removable_reviewers: Array }}
*/ */
@@ -211,38 +231,35 @@
'_includeComments, disabled)', '_includeComments, disabled)',
observer: '_sendDisabledChanged', observer: '_sendDisabledChanged',
}, },
}, };
}
FocusTarget, get keyBindings() {
return {
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.RESTClientBehavior,
],
keyBindings: {
'esc': '_handleEscKey', 'esc': '_handleEscKey',
'ctrl+enter meta+enter': '_handleEnterKey', 'ctrl+enter meta+enter': '_handleEnterKey',
}, };
}
observers: [ static get observers() {
return [
'_changeUpdated(change.reviewers.*, change.owner)', '_changeUpdated(change.reviewers.*, change.owner)',
'_ccsChanged(_ccs.splices)', '_ccsChanged(_ccs.splices)',
'_reviewersChanged(_reviewers.splices)', '_reviewersChanged(_reviewers.splices)',
], ];
}
attached() { attached() {
super.attached();
this._getAccount().then(account => { this._getAccount().then(account => {
this._account = account || {}; this._account = account || {};
}); });
}, }
ready() { ready() {
super.ready();
this.$.jsAPI.addElement(this.$.jsAPI.Element.REPLY_DIALOG, this); this.$.jsAPI.addElement(this.$.jsAPI.Element.REPLY_DIALOG, this);
}, }
open(opt_focusTarget) { open(opt_focusTarget) {
this.knownLatestState = LatestPatchState.CHECKING; this.knownLatestState = LatestPatchState.CHECKING;
@@ -268,11 +285,11 @@
this._savingComments = false; this._savingComments = false;
}); });
} }
}, }
focus() { focus() {
this._focusOn(FocusTarget.ANY); this._focusOn(FocusTarget.ANY);
}, }
getFocusStops() { getFocusStops() {
const end = this._sendDisabled ? this.$.cancelButton : this.$.sendButton; const end = this._sendDisabled ? this.$.cancelButton : this.$.sendButton;
@@ -280,14 +297,14 @@
start: this.$.reviewers.focusStart, start: this.$.reviewers.focusStart,
end, end,
}; };
}, }
setLabelValue(label, value) { setLabelValue(label, value) {
const selectorEl = const selectorEl =
this.$.labelScores.$$(`gr-label-score-row[name="${label}"]`); this.$.labelScores.$$(`gr-label-score-row[name="${label}"]`);
if (!selectorEl) { return; } if (!selectorEl) { return; }
selectorEl.setSelectedValue(value); selectorEl.setSelectedValue(value);
}, }
getLabelValue(label) { getLabelValue(label) {
const selectorEl = const selectorEl =
@@ -295,23 +312,23 @@
if (!selectorEl) { return null; } if (!selectorEl) { return null; }
return selectorEl.selectedValue; return selectorEl.selectedValue;
}, }
_handleEscKey(e) { _handleEscKey(e) {
this.cancel(); this.cancel();
}, }
_handleEnterKey(e) { _handleEnterKey(e) {
this._submit(); this._submit();
}, }
_ccsChanged(splices) { _ccsChanged(splices) {
this._reviewerTypeChanged(splices, ReviewerTypes.CC); this._reviewerTypeChanged(splices, ReviewerTypes.CC);
}, }
_reviewersChanged(splices) { _reviewersChanged(splices) {
this._reviewerTypeChanged(splices, ReviewerTypes.REVIEWER); this._reviewerTypeChanged(splices, ReviewerTypes.REVIEWER);
}, }
_reviewerTypeChanged(splices, reviewerType) { _reviewerTypeChanged(splices, reviewerType) {
if (splices && splices.indexSplices) { if (splices && splices.indexSplices) {
@@ -342,7 +359,7 @@
} }
} }
} }
}, }
_processReviewerChange(indexSplices, type) { _processReviewerChange(indexSplices, type) {
for (const splice of indexSplices) { for (const splice of indexSplices) {
@@ -354,7 +371,7 @@
this._reviewersPendingRemove[type].push(account); this._reviewersPendingRemove[type].push(account);
} }
} }
}, }
/** /**
* Resets the state of the _reviewersPendingRemove object, and removes * Resets the state of the _reviewersPendingRemove object, and removes
@@ -380,7 +397,7 @@
this._reviewersPendingRemove[type] = []; this._reviewersPendingRemove[type] = [];
} }
} }
}, }
/** /**
* Removes an account from the change, both on the backend and the client. * Removes an account from the change, both on the backend and the client.
@@ -404,7 +421,7 @@
} }
} }
}); });
}, }
_mapReviewer(reviewer) { _mapReviewer(reviewer) {
let reviewerId; let reviewerId;
@@ -416,7 +433,7 @@
confirmed = reviewer.group.confirmed; confirmed = reviewer.group.confirmed;
} }
return {reviewer: reviewerId, confirmed}; return {reviewer: reviewerId, confirmed};
}, }
send(includeComments, startReview) { send(includeComments, startReview) {
this.$.reporting.time(SEND_REPLY_TIMING_LABEL); this.$.reporting.time(SEND_REPLY_TIMING_LABEL);
@@ -479,7 +496,7 @@
this.disabled = false; this.disabled = false;
throw err; throw err;
}); });
}, }
_focusOn(section) { _focusOn(section) {
// Safeguard- always want to focus on something. // Safeguard- always want to focus on something.
@@ -497,7 +514,7 @@
const ccEntry = this.$.ccs.focusStart; const ccEntry = this.$.ccs.focusStart;
ccEntry.async(ccEntry.focus); ccEntry.async(ccEntry.focus);
} }
}, }
_chooseFocusTarget() { _chooseFocusTarget() {
// If we are the owner and the reviewers field is empty, focus on that. // If we are the owner and the reviewers field is empty, focus on that.
@@ -509,7 +526,7 @@
// Default to BODY. // Default to BODY.
return FocusTarget.BODY; return FocusTarget.BODY;
}, }
_handle400Error(response) { _handle400Error(response) {
// A call to _saveReview could fail with a server error if erroneous // A call to _saveReview could fail with a server error if erroneous
@@ -551,11 +568,11 @@
this.fire('server-error', {response}); this.fire('server-error', {response});
return null; // Means that the error has been handled. return null; // Means that the error has been handled.
}); });
}, }
_computeHideDraftList(drafts) { _computeHideDraftList(drafts) {
return Object.keys(drafts || {}).length == 0; return Object.keys(drafts || {}).length == 0;
}, }
_computeDraftsTitle(drafts) { _computeDraftsTitle(drafts) {
let total = 0; let total = 0;
@@ -567,13 +584,13 @@
if (total == 0) { return ''; } if (total == 0) { return ''; }
if (total == 1) { return '1 Draft'; } if (total == 1) { return '1 Draft'; }
if (total > 1) { return total + ' Drafts'; } if (total > 1) { return total + ' Drafts'; }
}, }
_computeMessagePlaceholder(canBeStarted) { _computeMessagePlaceholder(canBeStarted) {
return canBeStarted ? return canBeStarted ?
'Add a note for your reviewers...' : 'Add a note for your reviewers...' :
'Say something nice...'; 'Say something nice...';
}, }
_changeUpdated(changeRecord, owner) { _changeUpdated(changeRecord, owner) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -582,7 +599,7 @@
} }
this._rebuildReviewerArrays(changeRecord.base, owner); this._rebuildReviewerArrays(changeRecord.base, owner);
}, }
_rebuildReviewerArrays(change, owner) { _rebuildReviewerArrays(change, owner) {
this._owner = owner; this._owner = owner;
@@ -614,11 +631,11 @@
this._ccs = ccs; this._ccs = ccs;
this._reviewers = reviewers; this._reviewers = reviewers;
}, }
_accountOrGroupKey(entry) { _accountOrGroupKey(entry) {
return entry.id || entry._account_id; return entry.id || entry._account_id;
}, }
/** /**
* Generates a function to filter out reviewer/CC entries. When isCCs is * Generates a function to filter out reviewer/CC entries. When isCCs is
@@ -650,23 +667,23 @@
} }
return this._reviewers.find(finder) === undefined; return this._reviewers.find(finder) === undefined;
}; };
}, }
_getAccount() { _getAccount() {
return this.$.restAPI.getAccount(); return this.$.restAPI.getAccount();
}, }
_cancelTapHandler(e) { _cancelTapHandler(e) {
e.preventDefault(); e.preventDefault();
this.cancel(); this.cancel();
}, }
cancel() { cancel() {
this.fire('cancel', null, {bubbles: false}); this.fire('cancel', null, {bubbles: false});
this.$.textarea.closeDropdown(); this.$.textarea.closeDropdown();
this._purgeReviewersPendingRemove(true); this._purgeReviewersPendingRemove(true);
this._rebuildReviewerArrays(this.change.reviewers, this._owner); this._rebuildReviewerArrays(this.change.reviewers, this._owner);
}, }
_saveTapHandler(e) { _saveTapHandler(e) {
e.preventDefault(); e.preventDefault();
@@ -678,12 +695,12 @@
this.send(this._includeComments, false).then(keepReviewers => { this.send(this._includeComments, false).then(keepReviewers => {
this._purgeReviewersPendingRemove(false, keepReviewers); this._purgeReviewersPendingRemove(false, keepReviewers);
}); });
}, }
_sendTapHandler(e) { _sendTapHandler(e) {
e.preventDefault(); e.preventDefault();
this._submit(); this._submit();
}, }
_submit() { _submit() {
if (!this.$.ccs.submitEntryText()) { if (!this.$.ccs.submitEntryText()) {
@@ -710,12 +727,12 @@
detail: {message: `Error submitting review ${err}`}, detail: {message: `Error submitting review ${err}`},
})); }));
}); });
}, }
_saveReview(review, opt_errFn) { _saveReview(review, opt_errFn) {
return this.$.restAPI.saveChangeReview(this.change._number, this.patchNum, return this.$.restAPI.saveChangeReview(this.change._number, this.patchNum,
review, opt_errFn); review, opt_errFn);
}, }
_reviewerPendingConfirmationUpdated(reviewer) { _reviewerPendingConfirmationUpdated(reviewer) {
if (reviewer === null) { if (reviewer === null) {
@@ -725,7 +742,7 @@
this._ccPendingConfirmation || this._reviewerPendingConfirmation; this._ccPendingConfirmation || this._reviewerPendingConfirmation;
this.$.reviewerConfirmationOverlay.open(); this.$.reviewerConfirmationOverlay.open();
} }
}, }
_confirmPendingReviewer() { _confirmPendingReviewer() {
if (this._ccPendingConfirmation) { if (this._ccPendingConfirmation) {
@@ -735,7 +752,7 @@
this.$.reviewers.confirmGroup(this._reviewerPendingConfirmation.group); this.$.reviewers.confirmGroup(this._reviewerPendingConfirmation.group);
this._focusOn(FocusTarget.REVIEWERS); this._focusOn(FocusTarget.REVIEWERS);
} }
}, }
_cancelPendingReviewer() { _cancelPendingReviewer() {
this._ccPendingConfirmation = null; this._ccPendingConfirmation = null;
@@ -744,7 +761,7 @@
const target = const target =
this._ccPendingConfirmation ? FocusTarget.CCS : FocusTarget.REVIEWERS; this._ccPendingConfirmation ? FocusTarget.CCS : FocusTarget.REVIEWERS;
this._focusOn(target); this._focusOn(target);
}, }
_getStorageLocation() { _getStorageLocation() {
// Tests trigger this method without setting change. // Tests trigger this method without setting change.
@@ -754,12 +771,12 @@
patchNum: '@change', patchNum: '@change',
path: '@change', path: '@change',
}; };
}, }
_loadStoredDraft() { _loadStoredDraft() {
const draft = this.$.storage.getDraftComment(this._getStorageLocation()); const draft = this.$.storage.getDraftComment(this._getStorageLocation());
return draft ? draft.message : ''; return draft ? draft.message : '';
}, }
_handleAccountTextEntry() { _handleAccountTextEntry() {
// When either of the account entries has input added to the autocomplete, // When either of the account entries has input added to the autocomplete,
@@ -767,7 +784,7 @@
// //
// Note: if the text is removed, the save button will not get disabled. // Note: if the text is removed, the save button will not get disabled.
this._reviewersMutated = true; this._reviewersMutated = true;
}, }
_draftChanged(newDraft, oldDraft) { _draftChanged(newDraft, oldDraft) {
this.debounce('store', () => { this.debounce('store', () => {
@@ -780,37 +797,37 @@
this.draft); this.draft);
} }
}, STORAGE_DEBOUNCE_INTERVAL_MS); }, STORAGE_DEBOUNCE_INTERVAL_MS);
}, }
_handleHeightChanged(e) { _handleHeightChanged(e) {
this.fire('autogrow'); this.fire('autogrow');
}, }
_handleLabelsChanged() { _handleLabelsChanged() {
this._labelsChanged = Object.keys( this._labelsChanged = Object.keys(
this.$.labelScores.getLabelValues()).length !== 0; this.$.labelScores.getLabelValues()).length !== 0;
}, }
_isState(knownLatestState, value) { _isState(knownLatestState, value) {
return knownLatestState === value; return knownLatestState === value;
}, }
_reload() { _reload() {
// Load the current change without any patch range. // Load the current change without any patch range.
location.href = this.getBaseUrl() + '/c/' + this.change._number; location.href = this.getBaseUrl() + '/c/' + this.change._number;
}, }
_computeSendButtonLabel(canBeStarted) { _computeSendButtonLabel(canBeStarted) {
return canBeStarted ? ButtonLabels.START_REVIEW : ButtonLabels.SEND; return canBeStarted ? ButtonLabels.START_REVIEW : ButtonLabels.SEND;
}, }
_computeSendButtonTooltip(canBeStarted) { _computeSendButtonTooltip(canBeStarted) {
return canBeStarted ? ButtonTooltips.START_REVIEW : ButtonTooltips.SEND; return canBeStarted ? ButtonTooltips.START_REVIEW : ButtonTooltips.SEND;
}, }
_computeSavingLabelClass(savingComments) { _computeSavingLabelClass(savingComments) {
return savingComments ? 'saving' : ''; return savingComments ? 'saving' : '';
}, }
_computeSendButtonDisabled(buttonLabel, drafts, text, reviewersMutated, _computeSendButtonDisabled(buttonLabel, drafts, text, reviewersMutated,
labelsChanged, includeComments, disabled) { labelsChanged, includeComments, disabled) {
@@ -831,7 +848,7 @@
if (buttonLabel === ButtonLabels.START_REVIEW) { return false; } if (buttonLabel === ButtonLabels.START_REVIEW) { return false; }
const hasDrafts = includeComments && Object.keys(drafts).length; const hasDrafts = includeComments && Object.keys(drafts).length;
return !hasDrafts && !text.length && !reviewersMutated && !labelsChanged; return !hasDrafts && !text.length && !reviewersMutated && !labelsChanged;
}, }
_computePatchSetWarning(patchNum, labelsChanged) { _computePatchSetWarning(patchNum, labelsChanged) {
let str = `Patch ${patchNum} is not latest.`; let str = `Patch ${patchNum} is not latest.`;
@@ -839,28 +856,30 @@
str += ' Voting on a non-latest patch will have no effect.'; str += ' Voting on a non-latest patch will have no effect.';
} }
return str; return str;
}, }
setPluginMessage(message) { setPluginMessage(message) {
this._pluginMessage = message; this._pluginMessage = message;
}, }
_sendDisabledChanged(sendDisabled) { _sendDisabledChanged(sendDisabled) {
this.dispatchEvent(new CustomEvent('send-disabled-changed')); this.dispatchEvent(new CustomEvent('send-disabled-changed'));
}, }
_getReviewerSuggestionsProvider(change) { _getReviewerSuggestionsProvider(change) {
const provider = GrReviewerSuggestionsProvider.create(this.$.restAPI, const provider = GrReviewerSuggestionsProvider.create(this.$.restAPI,
change._number, Gerrit.SUGGESTIONS_PROVIDERS_USERS_TYPES.REVIEWER); change._number, Gerrit.SUGGESTIONS_PROVIDERS_USERS_TYPES.REVIEWER);
provider.init(); provider.init();
return provider; return provider;
}, }
_getCcSuggestionsProvider(change) { _getCcSuggestionsProvider(change) {
const provider = GrReviewerSuggestionsProvider.create(this.$.restAPI, const provider = GrReviewerSuggestionsProvider.create(this.$.restAPI,
change._number, Gerrit.SUGGESTIONS_PROVIDERS_USERS_TYPES.CC); change._number, Gerrit.SUGGESTIONS_PROVIDERS_USERS_TYPES.CC);
provider.init(); provider.init();
return provider; return provider;
}, }
}); }
customElements.define(GrReplyDialog.is, GrReplyDialog);
})(); })();

View File

@@ -17,16 +17,23 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-reviewer-list', * @appliesMixin Gerrit.FireMixin
*/
class GrReviewerList extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-reviewer-list'; }
/** /**
* Fired when the "Add reviewer..." button is tapped. * Fired when the "Add reviewer..." button is tapped.
* *
* @event show-reply-dialog * @event show-reply-dialog
*/ */
properties: { static get properties() {
return {
change: Object, change: Object,
disabled: { disabled: {
type: Boolean, type: Boolean,
@@ -71,15 +78,14 @@
// Used for testing. // Used for testing.
_lastAutocompleteRequest: Object, _lastAutocompleteRequest: Object,
_xhrPromise: Object, _xhrPromise: Object,
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
],
observers: [
'_reviewersChanged(change.reviewers.*, change.owner)', '_reviewersChanged(change.reviewers.*, change.owner)',
], ];
}
/** /**
* Converts change.permitted_labels to an array of hashes of label keys to * Converts change.permitted_labels to an array of hashes of label keys to
@@ -100,7 +106,7 @@
label, label,
scores: labels[label].map(v => parseInt(v, 10)), scores: labels[label].map(v => parseInt(v, 10)),
})); }));
}, }
/** /**
* Returns hash of labels to max permitted score. * Returns hash of labels to max permitted score.
@@ -114,7 +120,7 @@
.map(v => parseInt(v, 10)) .map(v => parseInt(v, 10))
.reduce((a, b) => Math.max(a, b))})) .reduce((a, b) => Math.max(a, b))}))
.reduce((acc, i) => Object.assign(acc, i), {}); .reduce((acc, i) => Object.assign(acc, i), {});
}, }
/** /**
* Returns max permitted score for reviewer. * Returns max permitted score for reviewer.
@@ -139,7 +145,7 @@
return 0; return 0;
} }
return NaN; return NaN;
}, }
_computeReviewerTooltip(reviewer, change) { _computeReviewerTooltip(reviewer, change) {
if (!change || !change.labels) { return ''; } if (!change || !change.labels) { return ''; }
@@ -160,7 +166,7 @@
} else { } else {
return ''; return '';
} }
}, }
_reviewersChanged(changeRecord, owner) { _reviewersChanged(changeRecord, owner) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -194,7 +200,7 @@
} else { } else {
this._displayedReviewers = this._reviewers; this._displayedReviewers = this._reviewers;
} }
}, }
_computeHiddenCount(reviewers, displayedReviewers) { _computeHiddenCount(reviewers, displayedReviewers) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -203,7 +209,7 @@
} }
return reviewers.length - displayedReviewers.length; return reviewers.length - displayedReviewers.length;
}, }
_computeCanRemoveReviewer(reviewer, mutable) { _computeCanRemoveReviewer(reviewer, mutable) {
if (!mutable) { return false; } if (!mutable) { return false; }
@@ -217,7 +223,7 @@
} }
} }
return false; return false;
}, }
_handleRemove(e) { _handleRemove(e) {
e.preventDefault(); e.preventDefault();
@@ -245,7 +251,7 @@
this.disabled = false; this.disabled = false;
throw err; throw err;
}); });
}, }
_handleAddTap(e) { _handleAddTap(e) {
e.preventDefault(); e.preventDefault();
@@ -257,18 +263,20 @@
value.ccsOnly = true; value.ccsOnly = true;
} }
this.fire('show-reply-dialog', {value}); this.fire('show-reply-dialog', {value});
}, }
_handleViewAll(e) { _handleViewAll(e) {
this._displayedReviewers = this._reviewers; this._displayedReviewers = this._reviewers;
}, }
_removeReviewer(id) { _removeReviewer(id) {
return this.$.restAPI.removeChangeReviewer(this.change._number, id); return this.$.restAPI.removeChangeReviewer(this.change._number, id);
}, }
_computeAddLabel(ccsOnly) { _computeAddLabel(ccsOnly) {
return ccsOnly ? 'Add CC' : 'Add reviewer'; return ccsOnly ? 'Add CC' : 'Add reviewer';
}, }
}); }
customElements.define(GrReviewerList.is, GrReviewerList);
})(); })();

View File

@@ -22,11 +22,13 @@
* *
* @event thread-list-modified * @event thread-list-modified
*/ */
class GrThreadList extends Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-thread-list'; }
Polymer({ static get properties() {
is: 'gr-thread-list', return {
properties: {
/** @type {?} */ /** @type {?} */
change: Object, change: Object,
threads: Array, threads: Array,
@@ -48,13 +50,14 @@
type: Boolean, type: Boolean,
value: false, value: false,
}, },
}, };
}
observers: ['_computeSortedThreads(threads.*)'], static get observers() { return ['_computeSortedThreads(threads.*)']; }
_computeShowDraftToggle(loggedIn) { _computeShowDraftToggle(loggedIn) {
return loggedIn ? 'show' : ''; return loggedIn ? 'show' : '';
}, }
/** /**
* Order as follows: * Order as follows:
@@ -68,7 +71,7 @@
const threads = changeRecord.base; const threads = changeRecord.base;
if (!threads) { return []; } if (!threads) { return []; }
this._updateSortedThreads(threads); this._updateSortedThreads(threads);
}, }
_updateSortedThreads(threads) { _updateSortedThreads(threads) {
this._sortedThreads = this._sortedThreads =
@@ -90,7 +93,7 @@
} }
return dateCompare ? dateCompare : c1.id.localeCompare(c2.id); return dateCompare ? dateCompare : c1.id.localeCompare(c2.id);
}); });
}, }
_computeFilteredThreads(sortedThreads, unresolvedOnly, draftsOnly) { _computeFilteredThreads(sortedThreads, unresolvedOnly, draftsOnly) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -125,7 +128,7 @@
return c; return c;
} }
}).map(threadInfo => threadInfo.thread); }).map(threadInfo => threadInfo.thread);
}, }
_getThreadWithSortInfo(thread) { _getThreadWithSortInfo(thread) {
const lastComment = thread.comments[thread.comments.length - 1] || {}; const lastComment = thread.comments[thread.comments.length - 1] || {};
@@ -143,7 +146,7 @@
hasDraft: !!lastComment.__draft, hasDraft: !!lastComment.__draft,
updated: lastComment.updated, updated: lastComment.updated,
}; };
}, }
removeThread(rootId) { removeThread(rootId) {
for (let i = 0; i < this.threads.length; i++) { for (let i = 0; i < this.threads.length; i++) {
@@ -154,11 +157,11 @@
return; return;
} }
} }
}, }
_handleThreadDiscard(e) { _handleThreadDiscard(e) {
this.removeThread(e.detail.rootId); this.removeThread(e.detail.rootId);
}, }
_handleCommentsChanged(e) { _handleCommentsChanged(e) {
// Reset threads so thread computations occur on deep array changes to // Reset threads so thread computations occur on deep array changes to
@@ -167,10 +170,12 @@
this.dispatchEvent(new CustomEvent('thread-list-modified', this.dispatchEvent(new CustomEvent('thread-list-modified',
{detail: {rootId: e.detail.rootId, path: e.detail.path}})); {detail: {rootId: e.detail.rootId, path: e.detail.path}}));
}, }
_isOnParent(side) { _isOnParent(side) {
return !!side; return !!side;
}, }
}); }
customElements.define(GrThreadList.is, GrThreadList);
})(); })();

View File

@@ -27,16 +27,23 @@
'pull', 'pull',
]; ];
Polymer({ /**
is: 'gr-upload-help-dialog', * @appliesMixin Gerrit.FireMixin
*/
class GrUploadHelpDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-upload-help-dialog'; }
/** /**
* Fired when the user presses the close button. * Fired when the user presses the close button.
* *
* @event close * @event close
*/ */
properties: { static get properties() {
return {
revision: Object, revision: Object,
targetBranch: String, targetBranch: String,
_commitCommand: { _commitCommand: {
@@ -55,13 +62,11 @@
type: String, type: String,
computed: '_computePushCommand(targetBranch)', computed: '_computePushCommand(targetBranch)',
}, },
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
attached() { attached() {
super.attached();
this.$.restAPI.getLoggedIn().then(loggedIn => { this.$.restAPI.getLoggedIn().then(loggedIn => {
if (loggedIn) { if (loggedIn) {
return this.$.restAPI.getPreferences(); return this.$.restAPI.getPreferences();
@@ -72,13 +77,13 @@
this._preferredDownloadScheme = prefs.download_scheme; this._preferredDownloadScheme = prefs.download_scheme;
} }
}); });
}, }
_handleCloseTap(e) { _handleCloseTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('close', null, {bubbles: false}); this.fire('close', null, {bubbles: false});
}, }
_computeFetchCommand(revision, preferredDownloadCommand, _computeFetchCommand(revision, preferredDownloadCommand,
preferredDownloadScheme) { preferredDownloadScheme) {
@@ -126,10 +131,12 @@
} }
return undefined; return undefined;
}, }
_computePushCommand(targetBranch) { _computePushCommand(targetBranch) {
return PUSH_COMMAND_PREFIX + targetBranch; return PUSH_COMMAND_PREFIX + targetBranch;
}, }
}); }
customElements.define(GrUploadHelpDialog.is, GrUploadHelpDialog);
})(); })();

View File

@@ -19,10 +19,18 @@
const INTERPOLATE_URL_PATTERN = /\$\{([\w]+)\}/g; const INTERPOLATE_URL_PATTERN = /\$\{([\w]+)\}/g;
Polymer({ /**
is: 'gr-account-dropdown', * @appliesMixin Gerrit.DisplayNameMixin
*/
class GrAccountDropdown extends Polymer.mixinBehaviors( [
Gerrit.DisplayNameBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-account-dropdown'; }
properties: { static get properties() {
return {
account: Object, account: Object,
config: Object, config: Object,
links: { links: {
@@ -39,9 +47,11 @@
}, },
_hasAvatars: Boolean, _hasAvatars: Boolean,
_switchAccountUrl: String, _switchAccountUrl: String,
}, };
}
attached() { attached() {
super.attached();
this._handleLocationChange(); this._handleLocationChange();
this.listen(window, 'location-change', '_handleLocationChange'); this.listen(window, 'location-change', '_handleLocationChange');
this.$.restAPI.getConfig().then(cfg => { this.$.restAPI.getConfig().then(cfg => {
@@ -54,15 +64,12 @@
} }
this._hasAvatars = !!(cfg && cfg.plugin && cfg.plugin.has_avatars); this._hasAvatars = !!(cfg && cfg.plugin && cfg.plugin.has_avatars);
}); });
}, }
behaviors: [
Gerrit.DisplayNameBehavior,
],
detached() { detached() {
super.detached();
this.unlisten(window, 'location-change', '_handleLocationChange'); this.unlisten(window, 'location-change', '_handleLocationChange');
}, }
_getLinks(switchAccountUrl, path) { _getLinks(switchAccountUrl, path) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -78,30 +85,32 @@
} }
links.push({name: 'Sign out', url: '/logout'}); links.push({name: 'Sign out', url: '/logout'});
return links; return links;
}, }
_getTopContent(account) { _getTopContent(account) {
return [ return [
{text: this._accountName(account), bold: true}, {text: this._accountName(account), bold: true},
{text: account.email ? account.email : ''}, {text: account.email ? account.email : ''},
]; ];
}, }
_handleLocationChange() { _handleLocationChange() {
this._path = this._path =
window.location.pathname + window.location.pathname +
window.location.search + window.location.search +
window.location.hash; window.location.hash;
}, }
_interpolateUrl(url, replacements) { _interpolateUrl(url, replacements) {
return url.replace(INTERPOLATE_URL_PATTERN, (match, p1) => { return url.replace(INTERPOLATE_URL_PATTERN, (match, p1) => {
return replacements[p1] || ''; return replacements[p1] || '';
}); });
}, }
_accountName(account) { _accountName(account) {
return this.getUserName(this.config, account, true); return this.getUserName(this.config, account, true);
}, }
}); }
customElements.define(GrAccountDropdown.is, GrAccountDropdown);
})(); })();

View File

@@ -17,21 +17,26 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrErrorDialog extends Polymer.GestureEventListeners(
is: 'gr-error-dialog', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-error-dialog'; }
/** /**
* Fired when the dismiss button is pressed. * Fired when the dismiss button is pressed.
* *
* @event dismiss * @event dismiss
*/ */
properties: { static get properties() {
return {
text: String, text: String,
}, };
}
_handleConfirm() { _handleConfirm() {
this.dispatchEvent(new CustomEvent('dismiss')); this.dispatchEvent(new CustomEvent('dismiss'));
}, }
}); }
customElements.define(GrErrorDialog.is, GrErrorDialog);
})(); })();

View File

@@ -25,15 +25,20 @@
const TOO_MANY_FILES = 'too many files to find conflicts'; const TOO_MANY_FILES = 'too many files to find conflicts';
const AUTHENTICATION_REQUIRED = 'Authentication required\n'; const AUTHENTICATION_REQUIRED = 'Authentication required\n';
Polymer({ /**
is: 'gr-error-manager', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
behaviors: [ */
class GrErrorManager extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior, Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior, Gerrit.FireBehavior,
], ], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-error-manager'; }
properties: { static get properties() {
return {
/** /**
* The ID of the account that was logged in when the app was launched. If * The ID of the account that was logged in when the app was launched. If
* not set, then there was no account at launch. * not set, then there was no account at launch.
@@ -56,9 +61,11 @@
type: Number, type: Number,
value() { return Date.now(); }, value() { return Date.now(); },
}, },
}, };
}
attached() { attached() {
super.attached();
this.listen(document, 'server-error', '_handleServerError'); this.listen(document, 'server-error', '_handleServerError');
this.listen(document, 'network-error', '_handleNetworkError'); this.listen(document, 'network-error', '_handleNetworkError');
this.listen(document, 'auth-error', '_handleAuthError'); this.listen(document, 'auth-error', '_handleAuthError');
@@ -66,9 +73,10 @@
this.listen(document, 'show-error', '_handleShowErrorDialog'); this.listen(document, 'show-error', '_handleShowErrorDialog');
this.listen(document, 'visibilitychange', '_handleVisibilityChange'); this.listen(document, 'visibilitychange', '_handleVisibilityChange');
this.listen(document, 'show-auth-required', '_handleAuthRequired'); this.listen(document, 'show-auth-required', '_handleAuthRequired');
}, }
detached() { detached() {
super.detached();
this._clearHideAlertHandle(); this._clearHideAlertHandle();
this.unlisten(document, 'server-error', '_handleServerError'); this.unlisten(document, 'server-error', '_handleServerError');
this.unlisten(document, 'network-error', '_handleNetworkError'); this.unlisten(document, 'network-error', '_handleNetworkError');
@@ -76,20 +84,20 @@
this.unlisten(document, 'show-auth-required', '_handleAuthRequired'); this.unlisten(document, 'show-auth-required', '_handleAuthRequired');
this.unlisten(document, 'visibilitychange', '_handleVisibilityChange'); this.unlisten(document, 'visibilitychange', '_handleVisibilityChange');
this.unlisten(document, 'show-error', '_handleShowErrorDialog'); this.unlisten(document, 'show-error', '_handleShowErrorDialog');
}, }
_shouldSuppressError(msg) { _shouldSuppressError(msg) {
return msg.includes(TOO_MANY_FILES); return msg.includes(TOO_MANY_FILES);
}, }
_handleAuthRequired() { _handleAuthRequired() {
this._showAuthErrorAlert( this._showAuthErrorAlert(
'Log in is required to perform that action.', 'Log in.'); 'Log in is required to perform that action.', 'Log in.');
}, }
_handleAuthError() { _handleAuthError() {
this._showAuthErrorAlert('Auth error', 'Refresh credentials.'); this._showAuthErrorAlert('Auth error', 'Refresh credentials.');
}, }
_handleServerError(e) { _handleServerError(e) {
const {request, response} = e.detail; const {request, response} = e.detail;
@@ -113,7 +121,7 @@
} }
console.error(errorText); console.error(errorText);
}); });
}, }
_constructServerErrorMsg({errorText, status, statusText, url}) { _constructServerErrorMsg({errorText, status, statusText, url}) {
let err = `Error ${status}`; let err = `Error ${status}`;
@@ -122,21 +130,21 @@
if (errorText) { err += errorText; } if (errorText) { err += errorText; }
if (url) { err += `\nEndpoint: ${url}`; } if (url) { err += `\nEndpoint: ${url}`; }
return err; return err;
}, }
_handleShowAlert(e) { _handleShowAlert(e) {
this._showAlert(e.detail.message, e.detail.action, e.detail.callback, this._showAlert(e.detail.message, e.detail.action, e.detail.callback,
e.detail.dismissOnNavigation); e.detail.dismissOnNavigation);
}, }
_handleNetworkError(e) { _handleNetworkError(e) {
this._showAlert('Server unavailable'); this._showAlert('Server unavailable');
console.error(e.detail.error.message); console.error(e.detail.error.message);
}, }
_getLoggedIn() { _getLoggedIn() {
return this.$.restAPI.getLoggedIn(); return this.$.restAPI.getLoggedIn();
}, }
/** /**
* @param {string} text * @param {string} text
@@ -161,7 +169,7 @@
const el = this._createToastAlert(); const el = this._createToastAlert();
el.show(text, opt_actionText, opt_actionCallback); el.show(text, opt_actionText, opt_actionCallback);
this._alertElement = el; this._alertElement = el;
}, }
_hideAlert() { _hideAlert() {
if (!this._alertElement) { return; } if (!this._alertElement) { return; }
@@ -171,14 +179,14 @@
// Remove listener for page navigation, if it exists. // Remove listener for page navigation, if it exists.
this.unlisten(document, 'location-change', '_hideAlert'); this.unlisten(document, 'location-change', '_hideAlert');
}, }
_clearHideAlertHandle() { _clearHideAlertHandle() {
if (this._hideAlertHandle != null) { if (this._hideAlertHandle != null) {
this.cancelAsync(this._hideAlertHandle); this.cancelAsync(this._hideAlertHandle);
this._hideAlertHandle = null; this._hideAlertHandle = null;
} }
}, }
_showAuthErrorAlert(errorText, actionText) { _showAuthErrorAlert(errorText, actionText) {
// TODO(viktard): close alert if it's not for auth error. // TODO(viktard): close alert if it's not for auth error.
@@ -193,13 +201,13 @@
if (!document.hidden) { if (!document.hidden) {
this._handleVisibilityChange(); this._handleVisibilityChange();
} }
}, }
_createToastAlert() { _createToastAlert() {
const el = document.createElement('gr-alert'); const el = document.createElement('gr-alert');
el.toast = true; el.toast = true;
return el; return el;
}, }
_handleVisibilityChange() { _handleVisibilityChange() {
// Ignore when the page is transitioning to hidden (or hidden is // Ignore when the page is transitioning to hidden (or hidden is
@@ -216,12 +224,12 @@
this._lastCredentialCheck = Date.now(); this._lastCredentialCheck = Date.now();
this.$.restAPI.checkCredentials(); this.$.restAPI.checkCredentials();
} }
}, }
_requestCheckLoggedIn() { _requestCheckLoggedIn() {
this.debounce( this.debounce(
'checkLoggedIn', this._checkSignedIn, CHECK_SIGN_IN_INTERVAL_MS); 'checkLoggedIn', this._checkSignedIn, CHECK_SIGN_IN_INTERVAL_MS);
}, }
_checkSignedIn() { _checkSignedIn() {
this.$.restAPI.checkCredentials().then(account => { this.$.restAPI.checkCredentials().then(account => {
@@ -242,11 +250,11 @@
} }
} }
}); });
}, }
_reloadPage() { _reloadPage() {
window.location.reload(); window.location.reload();
}, }
_createLoginPopup() { _createLoginPopup() {
const left = window.screenLeft + const left = window.screenLeft +
@@ -262,31 +270,33 @@
window.open(this.getBaseUrl() + window.open(this.getBaseUrl() +
'/login/%3FcloseAfterLogin', '_blank', options.join(',')); '/login/%3FcloseAfterLogin', '_blank', options.join(','));
this.listen(window, 'focus', '_handleWindowFocus'); this.listen(window, 'focus', '_handleWindowFocus');
}, }
_handleCredentialRefreshed() { _handleCredentialRefreshed() {
this.unlisten(window, 'focus', '_handleWindowFocus'); this.unlisten(window, 'focus', '_handleWindowFocus');
this._refreshingCredentials = false; this._refreshingCredentials = false;
this._hideAlert(); this._hideAlert();
this._showAlert('Credentials refreshed.'); this._showAlert('Credentials refreshed.');
}, }
_handleWindowFocus() { _handleWindowFocus() {
this.flushDebouncer('checkLoggedIn'); this.flushDebouncer('checkLoggedIn');
}, }
_handleShowErrorDialog(e) { _handleShowErrorDialog(e) {
this._showErrorDialog(e.detail.message); this._showErrorDialog(e.detail.message);
}, }
_handleDismissErrorDialog() { _handleDismissErrorDialog() {
this.$.errorOverlay.close(); this.$.errorOverlay.close();
}, }
_showErrorDialog(message) { _showErrorDialog(message) {
this.$.reporting.reportErrorDialog(message); this.$.reporting.reportErrorDialog(message);
this.$.errorDialog.text = message; this.$.errorDialog.text = message;
this.$.errorOverlay.open(); this.$.errorOverlay.open();
}, }
}); }
customElements.define(GrErrorManager.is, GrErrorManager);
})(); })();

View File

@@ -17,20 +17,26 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrKeyBindingDisplay extends Polymer.GestureEventListeners(
is: 'gr-key-binding-display', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-key-binding-display'; }
properties: { static get properties() {
return {
/** @type {Array<string>} */ /** @type {Array<string>} */
binding: Array, binding: Array,
}, };
}
_computeModifiers(binding) { _computeModifiers(binding) {
return binding.slice(0, binding.length - 1); return binding.slice(0, binding.length - 1);
}, }
_computeKey(binding) { _computeKey(binding) {
return binding[binding.length - 1]; return binding[binding.length - 1];
}, }
}); }
customElements.define(GrKeyBindingDisplay.is, GrKeyBindingDisplay);
})(); })();

View File

@@ -19,16 +19,25 @@
const {ShortcutSection} = window.Gerrit.KeyboardShortcutBinder; const {ShortcutSection} = window.Gerrit.KeyboardShortcutBinder;
Polymer({ /**
is: 'gr-keyboard-shortcuts-dialog', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
*/
class GrKeyboardShortcutsDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-keyboard-shortcuts-dialog'; }
/** /**
* Fired when the user presses the close button. * Fired when the user presses the close button.
* *
* @event close * @event close
*/ */
properties: { static get properties() {
return {
_left: Array, _left: Array,
_right: Array, _right: Array,
@@ -47,32 +56,31 @@
}; };
}, },
}, },
}, };
}
behaviors: [ ready() {
Gerrit.FireBehavior, super.ready();
Gerrit.KeyboardShortcutBehavior, this._ensureAttribute('role', 'dialog');
], }
hostAttributes: {
role: 'dialog',
},
attached() { attached() {
super.attached();
this.addKeyboardShortcutDirectoryListener( this.addKeyboardShortcutDirectoryListener(
this._onDirectoryUpdated.bind(this)); this._onDirectoryUpdated.bind(this));
}, }
detached() { detached() {
super.detached();
this.removeKeyboardShortcutDirectoryListener( this.removeKeyboardShortcutDirectoryListener(
this._onDirectoryUpdated.bind(this)); this._onDirectoryUpdated.bind(this));
}, }
_handleCloseTap(e) { _handleCloseTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('close', null, {bubbles: false}); this.fire('close', null, {bubbles: false});
}, }
_onDirectoryUpdated(directory) { _onDirectoryUpdated(directory) {
const left = []; const left = [];
@@ -122,6 +130,9 @@
this.set('_left', left); this.set('_left', left);
this.set('_right', right); this.set('_right', right);
}, }
}); }
customElements.define(GrKeyboardShortcutsDialog.is,
GrKeyboardShortcutsDialog);
})(); })();

View File

@@ -69,14 +69,24 @@
'CUSTOM_EXTENSION', 'CUSTOM_EXTENSION',
]); ]);
Polymer({ /**
is: 'gr-main-header', * @appliesMixin Gerrit.AdminNavMixin
* @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.DocsUrlMixin
* @appliesMixin Gerrit.FireMixin
*/
class GrMainHeader extends Polymer.mixinBehaviors( [
Gerrit.AdminNavBehavior,
Gerrit.BaseUrlBehavior,
Gerrit.DocsUrlBehavior,
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-main-header'; }
hostAttributes: { static get properties() {
role: 'banner', return {
},
properties: {
searchQuery: { searchQuery: {
type: String, type: String,
notify: true, notify: true,
@@ -131,32 +141,35 @@
type: String, type: String,
value: null, value: null,
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.AdminNavBehavior, return [
Gerrit.BaseUrlBehavior,
Gerrit.DocsUrlBehavior,
Gerrit.FireBehavior,
],
observers: [
'_accountLoaded(_account)', '_accountLoaded(_account)',
], ];
}
ready() {
super.ready();
this._ensureAttribute('role', 'banner');
}
attached() { attached() {
super.attached();
this._loadAccount(); this._loadAccount();
this._loadConfig(); this._loadConfig();
this.listen(window, 'location-change', '_handleLocationChange'); this.listen(window, 'location-change', '_handleLocationChange');
}, }
detached() { detached() {
super.detached();
this.unlisten(window, 'location-change', '_handleLocationChange'); this.unlisten(window, 'location-change', '_handleLocationChange');
}, }
reload() { reload() {
this._loadAccount(); this._loadAccount();
}, }
_handleLocationChange(e) { _handleLocationChange(e) {
const baseUrl = this.getBaseUrl(); const baseUrl = this.getBaseUrl();
@@ -173,11 +186,11 @@
window.location.search + window.location.search +
window.location.hash); window.location.hash);
} }
}, }
_computeRelativeURL(path) { _computeRelativeURL(path) {
return '//' + window.location.host + this.getBaseUrl() + path; return '//' + window.location.host + this.getBaseUrl() + path;
}, }
_computeLinks(defaultLinks, userLinks, adminLinks, topMenus, docBaseUrl) { _computeLinks(defaultLinks, userLinks, adminLinks, topMenus, docBaseUrl) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -232,7 +245,7 @@
} }
} }
return links; return links;
}, }
_getDocLinks(docBaseUrl, docLinks) { _getDocLinks(docBaseUrl, docLinks) {
if (!docBaseUrl || !docLinks) { if (!docBaseUrl || !docLinks) {
@@ -249,7 +262,7 @@
target: '_blank', target: '_blank',
}; };
}); });
}, }
_loadAccount() { _loadAccount() {
this.loading = true; this.loading = true;
@@ -273,7 +286,7 @@
this._adminLinks = res.links; this._adminLinks = res.links;
}); });
}); });
}, }
_loadConfig() { _loadConfig() {
this.$.restAPI.getConfig() this.$.restAPI.getConfig()
@@ -282,7 +295,7 @@
return this.getDocsBaseUrl(config, this.$.restAPI); return this.getDocsBaseUrl(config, this.$.restAPI);
}) })
.then(docBaseUrl => { this._docBaseUrl = docBaseUrl; }); .then(docBaseUrl => { this._docBaseUrl = docBaseUrl; });
}, }
_accountLoaded(account) { _accountLoaded(account) {
if (!account) { return; } if (!account) { return; }
@@ -290,7 +303,7 @@
this.$.restAPI.getPreferences().then(prefs => { this.$.restAPI.getPreferences().then(prefs => {
this._userLinks = prefs.my.map(this._fixCustomMenuItem); this._userLinks = prefs.my.map(this._fixCustomMenuItem);
}); });
}, }
_retrieveRegisterURL(config) { _retrieveRegisterURL(config) {
if (AUTH_TYPES_WITH_REGISTER_URL.has(config.auth.auth_type)) { if (AUTH_TYPES_WITH_REGISTER_URL.has(config.auth.auth_type)) {
@@ -299,11 +312,11 @@
this._registerText = config.auth.register_text; this._registerText = config.auth.register_text;
} }
} }
}, }
_computeIsInvisible(registerURL) { _computeIsInvisible(registerURL) {
return registerURL ? '' : 'invisible'; return registerURL ? '' : 'invisible';
}, }
_fixCustomMenuItem(linkObj) { _fixCustomMenuItem(linkObj) {
// Normalize all urls to PolyGerrit style. // Normalize all urls to PolyGerrit style.
@@ -321,17 +334,17 @@
delete linkObj.target; delete linkObj.target;
return linkObj; return linkObj;
}, }
_generateSettingsLink() { _generateSettingsLink() {
return this.getBaseUrl() + '/settings/'; return this.getBaseUrl() + '/settings/';
}, }
_onMobileSearchTap(e) { _onMobileSearchTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('mobile-search', null, {bubbles: false}); this.fire('mobile-search', null, {bubbles: false});
}, }
_computeLinkGroupClass(linkGroup) { _computeLinkGroupClass(linkGroup) {
if (linkGroup && linkGroup.class) { if (linkGroup && linkGroup.class) {
@@ -339,6 +352,8 @@
} }
return ''; return '';
}, }
}); }
customElements.define(GrMainHeader.is, GrMainHeader);
})(); })();

View File

@@ -207,10 +207,24 @@
}); });
})(); })();
Polymer({ /**
is: 'gr-router', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrRouter extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-router'; }
properties: { static get properties() {
return {
_app: { _app: {
type: Object, type: Object,
value: app, value: app,
@@ -222,23 +236,17 @@
type: Boolean, type: Boolean,
value: true, value: true,
}, },
}, };
}
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
Gerrit.URLEncodingBehavior,
],
start() { start() {
if (!this._app) { return; } if (!this._app) { return; }
this._startRouter(); this._startRouter();
}, }
_setParams(params) { _setParams(params) {
this._appElement().params = params; this._appElement().params = params;
}, }
_appElement() { _appElement() {
// In Polymer2 you have to reach through the shadow root of the app // In Polymer2 you have to reach through the shadow root of the app
@@ -248,12 +256,12 @@
return document.getElementById('app-element') || return document.getElementById('app-element') ||
document.getElementById('app').shadowRoot.getElementById( document.getElementById('app').shadowRoot.getElementById(
'app-element'); 'app-element');
}, }
_redirect(url) { _redirect(url) {
this._isRedirecting = true; this._isRedirecting = true;
page.redirect(url); page.redirect(url);
}, }
/** /**
* @param {!Object} params * @param {!Object} params
@@ -285,7 +293,7 @@
} }
return base + url; return base + url;
}, }
_generateWeblinks(params) { _generateWeblinks(params) {
const type = params.type; const type = params.type;
@@ -299,7 +307,7 @@
default: default:
console.warn(`Unsupported weblink ${type}!`); console.warn(`Unsupported weblink ${type}!`);
} }
}, }
_getPatchSetWeblink(params) { _getPatchSetWeblink(params) {
const {commit, options} = params; const {commit, options} = params;
@@ -311,7 +319,7 @@
} else { } else {
return {name, url: weblink.url}; return {name, url: weblink.url};
} }
}, }
_firstCodeBrowserWeblink(weblinks) { _firstCodeBrowserWeblink(weblinks) {
// This is an ordered whitelist of web link types that provide direct // This is an ordered whitelist of web link types that provide direct
@@ -323,7 +331,7 @@
if (weblink) { return weblink; } if (weblink) { return weblink; }
} }
return null; return null;
}, }
_getBrowseCommitWeblink(weblinks, config) { _getBrowseCommitWeblink(weblinks, config) {
if (!weblinks) { return null; } if (!weblinks) { return null; }
@@ -339,7 +347,7 @@
} }
if (!weblink) { return null; } if (!weblink) { return null; }
return weblink; return weblink;
}, }
_getChangeWeblinks({repo, commit, options: {weblinks, config}}) { _getChangeWeblinks({repo, commit, options: {weblinks, config}}) {
if (!weblinks || !weblinks.length) return []; if (!weblinks || !weblinks.length) return [];
@@ -348,11 +356,11 @@
!commitWeblink || !commitWeblink ||
!commitWeblink.name || !commitWeblink.name ||
weblink.name !== commitWeblink.name); weblink.name !== commitWeblink.name);
}, }
_getFileWebLinks({repo, commit, file, options: {weblinks}}) { _getFileWebLinks({repo, commit, file, options: {weblinks}}) {
return weblinks; return weblinks;
}, }
/** /**
* @param {!Object} params * @param {!Object} params
@@ -399,7 +407,7 @@
} }
return '/q/' + operators.join('+') + offsetExpr; return '/q/' + operators.join('+') + offsetExpr;
}, }
/** /**
* @param {!Object} params * @param {!Object} params
@@ -423,7 +431,7 @@
} else { } else {
return `/c/${params.changeNum}${suffix}`; return `/c/${params.changeNum}${suffix}`;
} }
}, }
/** /**
* @param {!Object} params * @param {!Object} params
@@ -448,7 +456,7 @@
// User dashboard. // User dashboard.
return `/dashboard/${params.user || 'self'}`; return `/dashboard/${params.user || 'self'}`;
} }
}, }
/** /**
* @param {!Array<!{name: string, query: string}>} sections * @param {!Array<!{name: string, query: string}>} sections
@@ -465,7 +473,7 @@
return encodeURIComponent(section.name) + '=' + return encodeURIComponent(section.name) + '=' +
encodeURIComponent(query); encodeURIComponent(query);
}); });
}, }
/** /**
* @param {!Object} params * @param {!Object} params
@@ -491,7 +499,7 @@
} else { } else {
return `/c/${params.changeNum}${suffix}`; return `/c/${params.changeNum}${suffix}`;
} }
}, }
/** /**
* @param {!Object} params * @param {!Object} params
@@ -505,7 +513,7 @@
url += ',audit-log'; url += ',audit-log';
} }
return url; return url;
}, }
/** /**
* @param {!Object} params * @param {!Object} params
@@ -525,7 +533,7 @@
url += ',dashboards'; url += ',dashboards';
} }
return url; return url;
}, }
/** /**
* @param {!Object} params * @param {!Object} params
@@ -533,7 +541,7 @@
*/ */
_generateSettingsUrl(params) { _generateSettingsUrl(params) {
return '/settings'; return '/settings';
}, }
/** /**
* Given an object of parameters, potentially including a `patchNum` or a * Given an object of parameters, potentially including a `patchNum` or a
@@ -547,7 +555,7 @@
if (params.patchNum) { range = '' + params.patchNum; } if (params.patchNum) { range = '' + params.patchNum; }
if (params.basePatchNum) { range = params.basePatchNum + '..' + range; } if (params.basePatchNum) { range = params.basePatchNum + '..' + range; }
return range; return range;
}, }
/** /**
* Given a set of params without a project, gets the project from the rest * Given a set of params without a project, gets the project from the rest
@@ -571,7 +579,7 @@
this._normalizePatchRangeParams(params); this._normalizePatchRangeParams(params);
this._redirect(this._generateUrl(params)); this._redirect(this._generateUrl(params));
}); });
}, }
/** /**
* Normalizes the params object, and determines if the URL needs to be * Normalizes the params object, and determines if the URL needs to be
@@ -600,7 +608,7 @@
params.basePatchNum = null; params.basePatchNum = null;
} }
return needsRedirect; return needsRedirect;
}, }
/** /**
* Redirect the user to login using the given return-URL for redirection * Redirect the user to login using the given return-URL for redirection
@@ -611,7 +619,7 @@
const basePath = this.getBaseUrl() || ''; const basePath = this.getBaseUrl() || '';
page( page(
'/login/' + encodeURIComponent(returnUrl.substring(basePath.length))); '/login/' + encodeURIComponent(returnUrl.substring(basePath.length)));
}, }
/** /**
* Hashes parsed by page.js exclude "inner" hashes, so a URL like "/a#b#c" * Hashes parsed by page.js exclude "inner" hashes, so a URL like "/a#b#c"
@@ -622,7 +630,7 @@
*/ */
_getHashFromCanonicalPath(canonicalPath) { _getHashFromCanonicalPath(canonicalPath) {
return canonicalPath.split('#').slice(1).join('#'); return canonicalPath.split('#').slice(1).join('#');
}, }
_parseLineAddress(hash) { _parseLineAddress(hash) {
const match = hash.match(LINE_ADDRESS_PATTERN); const match = hash.match(LINE_ADDRESS_PATTERN);
@@ -631,7 +639,7 @@
leftSide: !!match[1], leftSide: !!match[1],
lineNum: parseInt(match[2], 10), lineNum: parseInt(match[2], 10),
}; };
}, }
/** /**
* Check to see if the user is logged in and return a promise that only * Check to see if the user is logged in and return a promise that only
@@ -650,12 +658,12 @@
return Promise.reject(new Error()); return Promise.reject(new Error());
} }
}); });
}, }
/** Page.js middleware that warms the REST API's logged-in cache line. */ /** Page.js middleware that warms the REST API's logged-in cache line. */
_loadUserMiddleware(ctx, next) { _loadUserMiddleware(ctx, next) {
this.$.restAPI.getLoggedIn().then(() => { next(); }); this.$.restAPI.getLoggedIn().then(() => { next(); });
}, }
/** /**
* Map a route to a method on the router. * Map a route to a method on the router.
@@ -682,7 +690,7 @@
this._redirectIfNotLoggedIn(data) : Promise.resolve(); this._redirectIfNotLoggedIn(data) : Promise.resolve();
promise.then(() => { this[handlerName](data); }); promise.then(() => { this[handlerName](data); });
}); });
}, }
_startRouter() { _startRouter() {
const base = this.getBaseUrl(); const base = this.getBaseUrl();
@@ -878,7 +886,7 @@
this._mapRoute(RoutePattern.DEFAULT, '_handleDefaultRoute'); this._mapRoute(RoutePattern.DEFAULT, '_handleDefaultRoute');
page.start(); page.start();
}, }
/** /**
* @param {!Object} data * @param {!Object} data
@@ -919,7 +927,7 @@
this._redirect('/q/status:open'); this._redirect('/q/status:open');
} }
}); });
}, }
/** /**
* Decode an application/x-www-form-urlencoded string. * Decode an application/x-www-form-urlencoded string.
@@ -929,7 +937,7 @@
*/ */
_decodeQueryString(qs) { _decodeQueryString(qs) {
return decodeURIComponent(qs.replace(PLUS_PATTERN, ' ')); return decodeURIComponent(qs.replace(PLUS_PATTERN, ' '));
}, }
/** /**
* Parse a query string (e.g. window.location.search) into an array of * Parse a query string (e.g. window.location.search) into an array of
@@ -961,7 +969,7 @@
} }
}); });
return params; return params;
}, }
/** /**
* Handle dashboard routes. These may be user, or project dashboards. * Handle dashboard routes. These may be user, or project dashboards.
@@ -986,7 +994,7 @@
}); });
} }
}); });
}, }
/** /**
* Handle custom dashboard routes. * Handle custom dashboard routes.
@@ -1038,7 +1046,7 @@
// Redirect /dashboard/ -> /dashboard/self. // Redirect /dashboard/ -> /dashboard/self.
this._redirect('/dashboard/self'); this._redirect('/dashboard/self');
return Promise.resolve(); return Promise.resolve();
}, }
_handleProjectDashboardRoute(data) { _handleProjectDashboardRoute(data) {
const project = data.params[0]; const project = data.params[0];
@@ -1048,22 +1056,22 @@
dashboard: decodeURIComponent(data.params[1]), dashboard: decodeURIComponent(data.params[1]),
}); });
this.$.reporting.setRepoName(project); this.$.reporting.setRepoName(project);
}, }
_handleGroupInfoRoute(data) { _handleGroupInfoRoute(data) {
this._redirect('/admin/groups/' + encodeURIComponent(data.params[0])); this._redirect('/admin/groups/' + encodeURIComponent(data.params[0]));
}, }
_handleGroupSelfRedirectRoute(data) { _handleGroupSelfRedirectRoute(data) {
this._redirect('/settings/#Groups'); this._redirect('/settings/#Groups');
}, }
_handleGroupRoute(data) { _handleGroupRoute(data) {
this._setParams({ this._setParams({
view: Gerrit.Nav.View.GROUP, view: Gerrit.Nav.View.GROUP,
groupId: data.params[0], groupId: data.params[0],
}); });
}, }
_handleGroupAuditLogRoute(data) { _handleGroupAuditLogRoute(data) {
this._setParams({ this._setParams({
@@ -1071,7 +1079,7 @@
detail: Gerrit.Nav.GroupDetailView.LOG, detail: Gerrit.Nav.GroupDetailView.LOG,
groupId: data.params[0], groupId: data.params[0],
}); });
}, }
_handleGroupMembersRoute(data) { _handleGroupMembersRoute(data) {
this._setParams({ this._setParams({
@@ -1079,7 +1087,7 @@
detail: Gerrit.Nav.GroupDetailView.MEMBERS, detail: Gerrit.Nav.GroupDetailView.MEMBERS,
groupId: data.params[0], groupId: data.params[0],
}); });
}, }
_handleGroupListOffsetRoute(data) { _handleGroupListOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1089,7 +1097,7 @@
filter: null, filter: null,
openCreateModal: data.hash === 'create', openCreateModal: data.hash === 'create',
}); });
}, }
_handleGroupListFilterOffsetRoute(data) { _handleGroupListFilterOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1098,7 +1106,7 @@
offset: data.params.offset, offset: data.params.offset,
filter: data.params.filter, filter: data.params.filter,
}); });
}, }
_handleGroupListFilterRoute(data) { _handleGroupListFilterRoute(data) {
this._setParams({ this._setParams({
@@ -1106,7 +1114,7 @@
adminView: 'gr-admin-group-list', adminView: 'gr-admin-group-list',
filter: data.params.filter || null, filter: data.params.filter || null,
}); });
}, }
_handleProjectsOldRoute(data) { _handleProjectsOldRoute(data) {
let params = ''; let params = '';
@@ -1119,7 +1127,7 @@
} }
this._redirect(`/admin/repos/${params}`); this._redirect(`/admin/repos/${params}`);
}, }
_handleRepoCommandsRoute(data) { _handleRepoCommandsRoute(data) {
const repo = data.params[0]; const repo = data.params[0];
@@ -1129,7 +1137,7 @@
repo, repo,
}); });
this.$.reporting.setRepoName(repo); this.$.reporting.setRepoName(repo);
}, }
_handleRepoAccessRoute(data) { _handleRepoAccessRoute(data) {
const repo = data.params[0]; const repo = data.params[0];
@@ -1139,7 +1147,7 @@
repo, repo,
}); });
this.$.reporting.setRepoName(repo); this.$.reporting.setRepoName(repo);
}, }
_handleRepoDashboardsRoute(data) { _handleRepoDashboardsRoute(data) {
const repo = data.params[0]; const repo = data.params[0];
@@ -1149,7 +1157,7 @@
repo, repo,
}); });
this.$.reporting.setRepoName(repo); this.$.reporting.setRepoName(repo);
}, }
_handleBranchListOffsetRoute(data) { _handleBranchListOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1159,7 +1167,7 @@
offset: data.params[2] || 0, offset: data.params[2] || 0,
filter: null, filter: null,
}); });
}, }
_handleBranchListFilterOffsetRoute(data) { _handleBranchListFilterOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1169,7 +1177,7 @@
offset: data.params.offset, offset: data.params.offset,
filter: data.params.filter, filter: data.params.filter,
}); });
}, }
_handleBranchListFilterRoute(data) { _handleBranchListFilterRoute(data) {
this._setParams({ this._setParams({
@@ -1178,7 +1186,7 @@
repo: data.params.repo, repo: data.params.repo,
filter: data.params.filter || null, filter: data.params.filter || null,
}); });
}, }
_handleTagListOffsetRoute(data) { _handleTagListOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1188,7 +1196,7 @@
offset: data.params[2] || 0, offset: data.params[2] || 0,
filter: null, filter: null,
}); });
}, }
_handleTagListFilterOffsetRoute(data) { _handleTagListFilterOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1198,7 +1206,7 @@
offset: data.params.offset, offset: data.params.offset,
filter: data.params.filter, filter: data.params.filter,
}); });
}, }
_handleTagListFilterRoute(data) { _handleTagListFilterRoute(data) {
this._setParams({ this._setParams({
@@ -1207,7 +1215,7 @@
repo: data.params.repo, repo: data.params.repo,
filter: data.params.filter || null, filter: data.params.filter || null,
}); });
}, }
_handleRepoListOffsetRoute(data) { _handleRepoListOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1217,7 +1225,7 @@
filter: null, filter: null,
openCreateModal: data.hash === 'create', openCreateModal: data.hash === 'create',
}); });
}, }
_handleRepoListFilterOffsetRoute(data) { _handleRepoListFilterOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1226,7 +1234,7 @@
offset: data.params.offset, offset: data.params.offset,
filter: data.params.filter, filter: data.params.filter,
}); });
}, }
_handleRepoListFilterRoute(data) { _handleRepoListFilterRoute(data) {
this._setParams({ this._setParams({
@@ -1234,19 +1242,19 @@
adminView: 'gr-repo-list', adminView: 'gr-repo-list',
filter: data.params.filter || null, filter: data.params.filter || null,
}); });
}, }
_handleCreateProjectRoute(data) { _handleCreateProjectRoute(data) {
// Redirects the legacy route to the new route, which displays the project // Redirects the legacy route to the new route, which displays the project
// list with a hash 'create'. // list with a hash 'create'.
this._redirect('/admin/repos#create'); this._redirect('/admin/repos#create');
}, }
_handleCreateGroupRoute(data) { _handleCreateGroupRoute(data) {
// Redirects the legacy route to the new route, which displays the group // Redirects the legacy route to the new route, which displays the group
// list with a hash 'create'. // list with a hash 'create'.
this._redirect('/admin/groups#create'); this._redirect('/admin/groups#create');
}, }
_handleRepoRoute(data) { _handleRepoRoute(data) {
const repo = data.params[0]; const repo = data.params[0];
@@ -1255,7 +1263,7 @@
repo, repo,
}); });
this.$.reporting.setRepoName(repo); this.$.reporting.setRepoName(repo);
}, }
_handlePluginListOffsetRoute(data) { _handlePluginListOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1264,7 +1272,7 @@
offset: data.params[1] || 0, offset: data.params[1] || 0,
filter: null, filter: null,
}); });
}, }
_handlePluginListFilterOffsetRoute(data) { _handlePluginListFilterOffsetRoute(data) {
this._setParams({ this._setParams({
@@ -1273,7 +1281,7 @@
offset: data.params.offset, offset: data.params.offset,
filter: data.params.filter, filter: data.params.filter,
}); });
}, }
_handlePluginListFilterRoute(data) { _handlePluginListFilterRoute(data) {
this._setParams({ this._setParams({
@@ -1281,14 +1289,14 @@
adminView: 'gr-plugin-list', adminView: 'gr-plugin-list',
filter: data.params.filter || null, filter: data.params.filter || null,
}); });
}, }
_handlePluginListRoute(data) { _handlePluginListRoute(data) {
this._setParams({ this._setParams({
view: Gerrit.Nav.View.ADMIN, view: Gerrit.Nav.View.ADMIN,
adminView: 'gr-plugin-list', adminView: 'gr-plugin-list',
}); });
}, }
_handleQueryRoute(data) { _handleQueryRoute(data) {
this._setParams({ this._setParams({
@@ -1296,15 +1304,15 @@
query: data.params[0], query: data.params[0],
offset: data.params[2], offset: data.params[2],
}); });
}, }
_handleQueryLegacySuffixRoute(ctx) { _handleQueryLegacySuffixRoute(ctx) {
this._redirect(ctx.path.replace(LEGACY_QUERY_SUFFIX_PATTERN, '')); this._redirect(ctx.path.replace(LEGACY_QUERY_SUFFIX_PATTERN, ''));
}, }
_handleChangeNumberLegacyRoute(ctx) { _handleChangeNumberLegacyRoute(ctx) {
this._redirect('/c/' + encodeURIComponent(ctx.params[0])); this._redirect('/c/' + encodeURIComponent(ctx.params[0]));
}, }
_handleChangeRoute(ctx) { _handleChangeRoute(ctx) {
// Parameter order is based on the regex group number matched. // Parameter order is based on the regex group number matched.
@@ -1318,7 +1326,7 @@
this.$.reporting.setRepoName(params.project); this.$.reporting.setRepoName(params.project);
this._redirectOrNavigate(params); this._redirectOrNavigate(params);
}, }
_handleDiffRoute(ctx) { _handleDiffRoute(ctx) {
// Parameter order is based on the regex group number matched. // Parameter order is based on the regex group number matched.
@@ -1338,7 +1346,7 @@
} }
this.$.reporting.setRepoName(params.project); this.$.reporting.setRepoName(params.project);
this._redirectOrNavigate(params); this._redirectOrNavigate(params);
}, }
_handleChangeLegacyRoute(ctx) { _handleChangeLegacyRoute(ctx) {
// Parameter order is based on the regex group number matched. // Parameter order is based on the regex group number matched.
@@ -1351,11 +1359,11 @@
}; };
this._normalizeLegacyRouteParams(params); this._normalizeLegacyRouteParams(params);
}, }
_handleLegacyLinenum(ctx) { _handleLegacyLinenum(ctx) {
this._redirect(ctx.path.replace(LEGACY_LINENUM_PATTERN, '#$1')); this._redirect(ctx.path.replace(LEGACY_LINENUM_PATTERN, '#$1'));
}, }
_handleDiffLegacyRoute(ctx) { _handleDiffLegacyRoute(ctx) {
// Parameter order is based on the regex group number matched. // Parameter order is based on the regex group number matched.
@@ -1374,7 +1382,7 @@
} }
this._normalizeLegacyRouteParams(params); this._normalizeLegacyRouteParams(params);
}, }
_handleDiffEditRoute(ctx) { _handleDiffEditRoute(ctx) {
// Parameter order is based on the regex group number matched. // Parameter order is based on the regex group number matched.
@@ -1387,7 +1395,7 @@
view: Gerrit.Nav.View.EDIT, view: Gerrit.Nav.View.EDIT,
}); });
this.$.reporting.setRepoName(project); this.$.reporting.setRepoName(project);
}, }
_handleChangeEditRoute(ctx) { _handleChangeEditRoute(ctx) {
// Parameter order is based on the regex group number matched. // Parameter order is based on the regex group number matched.
@@ -1400,7 +1408,7 @@
edit: true, edit: true,
}); });
this.$.reporting.setRepoName(project); this.$.reporting.setRepoName(project);
}, }
/** /**
* Normalize the patch range params for a the change or diff view and * Normalize the patch range params for a the change or diff view and
@@ -1413,16 +1421,16 @@
} else { } else {
this._setParams(params); this._setParams(params);
} }
}, }
_handleAgreementsRoute() { _handleAgreementsRoute() {
this._redirect('/settings/#Agreements'); this._redirect('/settings/#Agreements');
}, }
_handleNewAgreementsRoute(data) { _handleNewAgreementsRoute(data) {
data.params.view = Gerrit.Nav.View.AGREEMENTS; data.params.view = Gerrit.Nav.View.AGREEMENTS;
this._setParams(data.params); this._setParams(data.params);
}, }
_handleSettingsLegacyRoute(data) { _handleSettingsLegacyRoute(data) {
// email tokens may contain '+' but no space. // email tokens may contain '+' but no space.
@@ -1433,11 +1441,11 @@
view: Gerrit.Nav.View.SETTINGS, view: Gerrit.Nav.View.SETTINGS,
emailToken: token, emailToken: token,
}); });
}, }
_handleSettingsRoute(data) { _handleSettingsRoute(data) {
this._setParams({view: Gerrit.Nav.View.SETTINGS}); this._setParams({view: Gerrit.Nav.View.SETTINGS});
}, }
_handleRegisterRoute(ctx) { _handleRegisterRoute(ctx) {
this._setParams({justRegistered: true}); this._setParams({justRegistered: true});
@@ -1448,7 +1456,7 @@
if (path[0] !== '/') { return; } if (path[0] !== '/') { return; }
this._redirect(this.getBaseUrl() + path); this._redirect(this.getBaseUrl() + path);
}, }
/** /**
* Handler for routes that should pass through the router and not be caught * Handler for routes that should pass through the router and not be caught
@@ -1456,7 +1464,7 @@
*/ */
_handlePassThroughRoute() { _handlePassThroughRoute() {
location.reload(); location.reload();
}, }
/** /**
* URL may sometimes have /+/ encoded to / /. * URL may sometimes have /+/ encoded to / /.
@@ -1466,26 +1474,26 @@
let hash = this._getHashFromCanonicalPath(ctx.canonicalPath); let hash = this._getHashFromCanonicalPath(ctx.canonicalPath);
if (hash.length) { hash = '#' + hash; } if (hash.length) { hash = '#' + hash; }
this._redirect(`/c/${ctx.params[0]}/+/${ctx.params[1]}${hash}`); this._redirect(`/c/${ctx.params[0]}/+/${ctx.params[1]}${hash}`);
}, }
_handlePluginScreen(ctx) { _handlePluginScreen(ctx) {
const view = Gerrit.Nav.View.PLUGIN_SCREEN; const view = Gerrit.Nav.View.PLUGIN_SCREEN;
const plugin = ctx.params[0]; const plugin = ctx.params[0];
const screen = ctx.params[1]; const screen = ctx.params[1];
this._setParams({view, plugin, screen}); this._setParams({view, plugin, screen});
}, }
_handleDocumentationSearchRoute(data) { _handleDocumentationSearchRoute(data) {
this._setParams({ this._setParams({
view: Gerrit.Nav.View.DOCUMENTATION_SEARCH, view: Gerrit.Nav.View.DOCUMENTATION_SEARCH,
filter: data.params.filter || null, filter: data.params.filter || null,
}); });
}, }
_handleDocumentationSearchRedirectRoute(data) { _handleDocumentationSearchRedirectRoute(data) {
this._redirect('/Documentation/q/filter:' + this._redirect('/Documentation/q/filter:' +
encodeURIComponent(data.params[0])); encodeURIComponent(data.params[0]));
}, }
_handleDocumentationRedirectRoute(data) { _handleDocumentationRedirectRoute(data) {
if (data.params[1]) { if (data.params[1]) {
@@ -1494,7 +1502,7 @@
// Redirect /Documentation to /Documentation/index.html // Redirect /Documentation to /Documentation/index.html
this._redirect('/Documentation/index.html'); this._redirect('/Documentation/index.html');
} }
}, }
/** /**
* Catchall route for when no other route is matched. * Catchall route for when no other route is matched.
@@ -1507,7 +1515,7 @@
// Route can be recognized by server, so we pass it to server. // Route can be recognized by server, so we pass it to server.
this._handlePassThroughRoute(); this._handlePassThroughRoute();
} }
}, }
_show404() { _show404() {
// Note: the app's 404 display is tightly-coupled with catching 404 // Note: the app's 404 display is tightly-coupled with catching 404
@@ -1515,6 +1523,8 @@
// TODO: Decouple the gr-app error view from network responses. // TODO: Decouple the gr-app error view from network responses.
this._appElement().dispatchEvent(new CustomEvent('page-error', this._appElement().dispatchEvent(new CustomEvent('page-error',
{detail: {response: {status: 404}}})); {detail: {response: {status: 404}}}));
}, }
}); }
customElements.define(GrRouter.is, GrRouter);
})(); })();

View File

@@ -103,21 +103,25 @@
const TOKENIZE_REGEX = /(?:[^\s"]+|"[^"]*")+\s*/g; const TOKENIZE_REGEX = /(?:[^\s"]+|"[^"]*")+\s*/g;
Polymer({ /**
is: 'gr-search-bar', * @appliesMixin Gerrit.KeyboardShortcutMixin
* @appliesMixin Gerrit.URLEncodingMixin
*/
class GrSearchBar extends Polymer.mixinBehaviors( [
Gerrit.KeyboardShortcutBehavior,
Gerrit.URLEncodingBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-search-bar'; }
/** /**
* Fired when a search is committed * Fired when a search is committed
* *
* @event handle-search * @event handle-search
*/ */
behaviors: [ static get properties() {
Gerrit.KeyboardShortcutBehavior, return {
Gerrit.URLEncodingBehavior,
],
properties: {
value: { value: {
type: String, type: String,
value: '', value: '',
@@ -157,21 +161,22 @@
type: Number, type: Number,
value: 1, value: 1,
}, },
}, };
}
keyboardShortcuts() { keyboardShortcuts() {
return { return {
[this.Shortcut.SEARCH]: '_handleSearch', [this.Shortcut.SEARCH]: '_handleSearch',
}; };
}, }
_valueChanged(value) { _valueChanged(value) {
this._inputVal = value; this._inputVal = value;
}, }
_handleInputCommit(e) { _handleInputCommit(e) {
this._preventDefaultAndNavigateToInputVal(e); this._preventDefaultAndNavigateToInputVal(e);
}, }
/** /**
* This function is called in a few different cases: * This function is called in a few different cases:
@@ -205,7 +210,7 @@
detail: {inputVal: this._inputVal}, detail: {inputVal: this._inputVal},
})); }));
} }
}, }
/** /**
* Determine what array of possible suggestions should be provided * Determine what array of possible suggestions should be provided
@@ -247,7 +252,7 @@
.filter(operator => operator.includes(input)) .filter(operator => operator.includes(input))
.map(operator => ({text: operator}))); .map(operator => ({text: operator})));
} }
}, }
/** /**
* Get the sorted, pruned list of suggestions for the current search query. * Get the sorted, pruned list of suggestions for the current search query.
@@ -290,7 +295,7 @@
}; };
}); });
}); });
}, }
_handleSearch(e) { _handleSearch(e) {
const keyboardEvent = this.getKeyboardEvent(e); const keyboardEvent = this.getKeyboardEvent(e);
@@ -300,6 +305,8 @@
e.preventDefault(); e.preventDefault();
this.$.searchInput.focus(); this.$.searchInput.focus();
this.$.searchInput.selectAll(); this.$.searchInput.selectAll();
}, }
}); }
customElements.define(GrSearchBar.is, GrSearchBar);
})(); })();

View File

@@ -21,10 +21,18 @@
const SELF_EXPRESSION = 'self'; const SELF_EXPRESSION = 'self';
const ME_EXPRESSION = 'me'; const ME_EXPRESSION = 'me';
Polymer({ /**
is: 'gr-smart-search', * @appliesMixin Gerrit.DisplayNameMixin
*/
class GrSmartSearch extends Polymer.mixinBehaviors( [
Gerrit.DisplayNameBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-smart-search'; }
properties: { static get properties() {
return {
searchQuery: String, searchQuery: String,
_config: Object, _config: Object,
_projectSuggestions: { _projectSuggestions: {
@@ -45,28 +53,26 @@
return this._fetchAccounts.bind(this); return this._fetchAccounts.bind(this);
}, },
}, },
}, };
}
behaviors: [
Gerrit.DisplayNameBehavior,
],
attached() { attached() {
super.attached();
this.$.restAPI.getConfig().then(cfg => { this.$.restAPI.getConfig().then(cfg => {
this._config = cfg; this._config = cfg;
}); });
}, }
_handleSearch(e) { _handleSearch(e) {
const input = e.detail.inputVal; const input = e.detail.inputVal;
if (input) { if (input) {
Gerrit.Nav.navigateToSearchQuery(input); Gerrit.Nav.navigateToSearchQuery(input);
} }
}, }
_accountOrAnon(name) { _accountOrAnon(name) {
return this.getUserName(this._serverConfig, name, false); return this.getUserName(this._serverConfig, name, false);
}, }
/** /**
* Fetch from the API the predicted projects. * Fetch from the API the predicted projects.
@@ -86,7 +92,7 @@
const keys = Object.keys(projects); const keys = Object.keys(projects);
return keys.map(key => ({text: predicate + ':' + key})); return keys.map(key => ({text: predicate + ':' + key}));
}); });
}, }
/** /**
* Fetch from the API the predicted groups. * Fetch from the API the predicted groups.
@@ -107,7 +113,7 @@
const keys = Object.keys(groups); const keys = Object.keys(groups);
return keys.map(key => ({text: predicate + ':' + key})); return keys.map(key => ({text: predicate + ':' + key}));
}); });
}, }
/** /**
* Fetch from the API the predicted accounts. * Fetch from the API the predicted accounts.
@@ -138,7 +144,7 @@
return accounts; return accounts;
} }
}); });
}, }
_mapAccountsHelper(accounts, predicate) { _mapAccountsHelper(accounts, predicate) {
return accounts.map(account => ({ return accounts.map(account => ({
@@ -147,6 +153,8 @@
`${predicate}:${account.email}` : `${predicate}:${account.email}` :
`${predicate}:"${this._accountOrAnon(account)}"`, `${predicate}:"${this._accountOrAnon(account)}"`,
})); }));
}, }
}); }
customElements.define(GrSmartSearch.is, GrSmartSearch);
})(); })();

View File

@@ -460,20 +460,27 @@
this._isInRevisionOfPatchRange(comment, range); this._isInRevisionOfPatchRange(comment, range);
}; };
Polymer({ /**
is: 'gr-comment-api', * @appliesMixin Gerrit.PatchSetMixin
*/
properties: { class GrCommentApi extends Polymer.mixinBehaviors( [
_changeComments: Object,
},
listeners: {
'reload-drafts': 'reloadDrafts',
},
behaviors: [
Gerrit.PatchSetBehavior, Gerrit.PatchSetBehavior,
], ], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-comment-api'; }
static get properties() {
return {
_changeComments: Object,
};
}
created() {
super.created();
this.addEventListener('reload-drafts',
changeNum => this.reloadDrafts(changeNum));
}
/** /**
* Load all comments (with drafts and robot comments) for the given change * Load all comments (with drafts and robot comments) for the given change
@@ -494,7 +501,7 @@
robotComments, drafts, changeNum); robotComments, drafts, changeNum);
return this._changeComments; return this._changeComments;
}); });
}, }
/** /**
* Re-initialize _changeComments with a new ChangeComments object, that * Re-initialize _changeComments with a new ChangeComments object, that
@@ -513,6 +520,8 @@
this._changeComments.robotComments, drafts, changeNum); this._changeComments.robotComments, drafts, changeNum);
return this._changeComments; return this._changeComments;
}); });
}, }
}); }
customElements.define(GrCommentApi.is, GrCommentApi);
})(); })();

View File

@@ -24,10 +24,13 @@
[Gerrit.CoverageType.NOT_INSTRUMENTED, 'Not instrumented by any tests.'], [Gerrit.CoverageType.NOT_INSTRUMENTED, 'Not instrumented by any tests.'],
]); ]);
Polymer({ class GrCoverageLayer extends Polymer.GestureEventListeners(
is: 'gr-coverage-layer', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-coverage-layer'; }
properties: { static get properties() {
return {
/** /**
* Must be sorted by code_range.start_line. * Must be sorted by code_range.start_line.
* Must only contain ranges that match the side. * Must only contain ranges that match the side.
@@ -53,7 +56,8 @@
type: Number, type: Number,
value: 0, value: 0,
}, },
}, };
}
/** /**
* Layer method to add annotations to a line. * Layer method to add annotations to a line.
@@ -102,6 +106,8 @@
lineNumberEl.title = TOOLTIP_MAP.get(coverageRange.type); lineNumberEl.title = TOOLTIP_MAP.get(coverageRange.type);
return; return;
} }
}, }
}); }
customElements.define(GrCoverageLayer.is, GrCoverageLayer);
})(); })();

View File

@@ -35,10 +35,13 @@
const LEFT_SIDE_CLASS = 'target-side-left'; const LEFT_SIDE_CLASS = 'target-side-left';
const RIGHT_SIDE_CLASS = 'target-side-right'; const RIGHT_SIDE_CLASS = 'target-side-right';
Polymer({ class GrDiffCursor extends Polymer.GestureEventListeners(
is: 'gr-diff-cursor', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-diff-cursor'; }
properties: { static get properties() {
return {
/** /**
* Either DiffSides.LEFT or DiffSides.RIGHT. * Either DiffSides.LEFT or DiffSides.RIGHT.
*/ */
@@ -92,35 +95,40 @@
}, },
_listeningForScroll: Boolean, _listeningForScroll: Boolean,
}, };
}
observers: [ static get observers() {
return [
'_updateSideClass(side)', '_updateSideClass(side)',
'_diffsChanged(diffs.splices)', '_diffsChanged(diffs.splices)',
], ];
}
attached() { attached() {
super.attached();
// Catch when users are scrolling as the view loads. // Catch when users are scrolling as the view loads.
this.listen(window, 'scroll', '_handleWindowScroll'); this.listen(window, 'scroll', '_handleWindowScroll');
}, }
detached() { detached() {
super.detached();
this.unlisten(window, 'scroll', '_handleWindowScroll'); this.unlisten(window, 'scroll', '_handleWindowScroll');
}, }
moveLeft() { moveLeft() {
this.side = DiffSides.LEFT; this.side = DiffSides.LEFT;
if (this._isTargetBlank()) { if (this._isTargetBlank()) {
this.moveUp(); this.moveUp();
} }
}, }
moveRight() { moveRight() {
this.side = DiffSides.RIGHT; this.side = DiffSides.RIGHT;
if (this._isTargetBlank()) { if (this._isTargetBlank()) {
this.moveUp(); this.moveUp();
} }
}, }
moveDown() { moveDown() {
if (this._getViewMode() === DiffViewMode.SIDE_BY_SIDE) { if (this._getViewMode() === DiffViewMode.SIDE_BY_SIDE) {
@@ -128,7 +136,7 @@
} else { } else {
this.$.cursorManager.next(); this.$.cursorManager.next();
} }
}, }
moveUp() { moveUp() {
if (this._getViewMode() === DiffViewMode.SIDE_BY_SIDE) { if (this._getViewMode() === DiffViewMode.SIDE_BY_SIDE) {
@@ -136,7 +144,7 @@
} else { } else {
this.$.cursorManager.previous(); this.$.cursorManager.previous();
} }
}, }
moveToNextChunk(opt_clipToTop) { moveToNextChunk(opt_clipToTop) {
this.$.cursorManager.next(this._isFirstRowOfChunk.bind(this), this.$.cursorManager.next(this._isFirstRowOfChunk.bind(this),
@@ -144,22 +152,22 @@
return target.parentNode.scrollHeight; return target.parentNode.scrollHeight;
}, opt_clipToTop); }, opt_clipToTop);
this._fixSide(); this._fixSide();
}, }
moveToPreviousChunk() { moveToPreviousChunk() {
this.$.cursorManager.previous(this._isFirstRowOfChunk.bind(this)); this.$.cursorManager.previous(this._isFirstRowOfChunk.bind(this));
this._fixSide(); this._fixSide();
}, }
moveToNextCommentThread() { moveToNextCommentThread() {
this.$.cursorManager.next(this._rowHasThread.bind(this)); this.$.cursorManager.next(this._rowHasThread.bind(this));
this._fixSide(); this._fixSide();
}, }
moveToPreviousCommentThread() { moveToPreviousCommentThread() {
this.$.cursorManager.previous(this._rowHasThread.bind(this)); this.$.cursorManager.previous(this._rowHasThread.bind(this));
this._fixSide(); this._fixSide();
}, }
/** /**
* @param {number} number * @param {number} number
@@ -172,7 +180,7 @@
this.side = side; this.side = side;
this.$.cursorManager.setCursor(row); this.$.cursorManager.setCursor(row);
} }
}, }
/** /**
* Get the line number element targeted by the cursor row and side. * Get the line number element targeted by the cursor row and side.
@@ -190,7 +198,7 @@
} }
return this.diffRow.querySelector(lineElSelector); return this.diffRow.querySelector(lineElSelector);
}, }
getTargetDiffElement() { getTargetDiffElement() {
if (!this.diffRow) return null; if (!this.diffRow) return null;
@@ -202,12 +210,12 @@
return hostOwner.host; return hostOwner.host;
} }
return null; return null;
}, }
moveToFirstChunk() { moveToFirstChunk() {
this.$.cursorManager.moveToStart(); this.$.cursorManager.moveToStart();
this.moveToNextChunk(true); this.moveToNextChunk(true);
}, }
reInitCursor() { reInitCursor() {
this._updateStops(); this._updateStops();
@@ -217,7 +225,7 @@
} else { } else {
this.moveToFirstChunk(); this.moveToFirstChunk();
} }
}, }
_handleWindowScroll() { _handleWindowScroll() {
if (this._listeningForScroll) { if (this._listeningForScroll) {
@@ -225,7 +233,7 @@
this._focusOnMove = false; this._focusOnMove = false;
this._listeningForScroll = false; this._listeningForScroll = false;
} }
}, }
handleDiffUpdate() { handleDiffUpdate() {
this._updateStops(); this._updateStops();
@@ -240,11 +248,11 @@
this._scrollBehavior = ScrollBehavior.KEEP_VISIBLE; this._scrollBehavior = ScrollBehavior.KEEP_VISIBLE;
this._focusOnMove = true; this._focusOnMove = true;
this._listeningForScroll = false; this._listeningForScroll = false;
}, }
_handleDiffRenderStart() { _handleDiffRenderStart() {
this._listeningForScroll = true; this._listeningForScroll = true;
}, }
createCommentInPlace() { createCommentInPlace() {
const diffWithRangeSelected = this.diffs.find(diff => { const diffWithRangeSelected = this.diffs.find(diff => {
@@ -258,7 +266,7 @@
this.getTargetDiffElement().addDraftAtLine(line); this.getTargetDiffElement().addDraftAtLine(line);
} }
} }
}, }
/** /**
* Get an object describing the location of the cursor. Such as * Get an object describing the location of the cursor. Such as
@@ -290,7 +298,7 @@
leftSide: cell.matches('.left'), leftSide: cell.matches('.left'),
number: parseInt(number, 10), number: parseInt(number, 10),
}; };
}, }
_getViewMode() { _getViewMode() {
if (!this.diffRow) { if (!this.diffRow) {
@@ -302,24 +310,24 @@
} else { } else {
return DiffViewMode.UNIFIED; return DiffViewMode.UNIFIED;
} }
}, }
_rowHasSide(row) { _rowHasSide(row) {
const selector = (this.side === DiffSides.LEFT ? '.left' : '.right') + const selector = (this.side === DiffSides.LEFT ? '.left' : '.right') +
' + .content'; ' + .content';
return !!row.querySelector(selector); return !!row.querySelector(selector);
}, }
_isFirstRowOfChunk(row) { _isFirstRowOfChunk(row) {
const parentClassList = row.parentNode.classList; const parentClassList = row.parentNode.classList;
return parentClassList.contains('section') && return parentClassList.contains('section') &&
parentClassList.contains('delta') && parentClassList.contains('delta') &&
!row.previousSibling; !row.previousSibling;
}, }
_rowHasThread(row) { _rowHasThread(row) {
return row.querySelector('.thread-group'); return row.querySelector('.thread-group');
}, }
/** /**
* If we jumped to a row where there is no content on the current side then * If we jumped to a row where there is no content on the current side then
@@ -331,7 +339,7 @@
this.side = this.side === DiffSides.LEFT ? this.side = this.side === DiffSides.LEFT ?
DiffSides.RIGHT : DiffSides.LEFT; DiffSides.RIGHT : DiffSides.LEFT;
} }
}, }
_isTargetBlank() { _isTargetBlank() {
if (!this.diffRow) { if (!this.diffRow) {
@@ -341,14 +349,14 @@
const actions = this._getActionsForRow(); const actions = this._getActionsForRow();
return (this.side === DiffSides.LEFT && !actions.left) || return (this.side === DiffSides.LEFT && !actions.left) ||
(this.side === DiffSides.RIGHT && !actions.right); (this.side === DiffSides.RIGHT && !actions.right);
}, }
_rowChanged(newRow, oldRow) { _rowChanged(newRow, oldRow) {
if (oldRow) { if (oldRow) {
oldRow.classList.remove(LEFT_SIDE_CLASS, RIGHT_SIDE_CLASS); oldRow.classList.remove(LEFT_SIDE_CLASS, RIGHT_SIDE_CLASS);
} }
this._updateSideClass(); this._updateSideClass();
}, }
_updateSideClass() { _updateSideClass() {
if (!this.diffRow) { if (!this.diffRow) {
@@ -358,11 +366,11 @@
this.diffRow); this.diffRow);
this.toggleClass(RIGHT_SIDE_CLASS, this.side === DiffSides.RIGHT, this.toggleClass(RIGHT_SIDE_CLASS, this.side === DiffSides.RIGHT,
this.diffRow); this.diffRow);
}, }
_isActionType(type) { _isActionType(type) {
return type !== 'blank' && type !== 'contextControl'; return type !== 'blank' && type !== 'contextControl';
}, }
_getActionsForRow() { _getActionsForRow() {
const actions = {left: false, right: false}; const actions = {left: false, right: false};
@@ -373,18 +381,18 @@
this.diffRow.getAttribute('right-type')); this.diffRow.getAttribute('right-type'));
} }
return actions; return actions;
}, }
_getStops() { _getStops() {
return this.diffs.reduce( return this.diffs.reduce(
(stops, diff) => { (stops, diff) => {
return stops.concat(diff.getCursorStops()); return stops.concat(diff.getCursorStops());
}, []); }, []);
}, }
_updateStops() { _updateStops() {
this.$.cursorManager.stops = this._getStops(); this.$.cursorManager.stops = this._getStops();
}, }
/** /**
* Setup and tear down on-render listeners for any diffs that are added or * Setup and tear down on-render listeners for any diffs that are added or
@@ -420,7 +428,7 @@
'render-content', 'handleDiffUpdate'); 'render-content', 'handleDiffUpdate');
} }
} }
}, }
_findRowByNumberAndFile(targetNumber, side, opt_path) { _findRowByNumberAndFile(targetNumber, side, opt_path) {
let stops; let stops;
@@ -437,6 +445,8 @@
return stops[i]; return stops[i];
} }
} }
}, }
}); }
customElements.define(GrDiffCursor.is, GrDiffCursor);
})(); })();

View File

@@ -17,10 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-diff-highlight', * @appliesMixin Gerrit.FireMixin
*/
class GrDiffHighlight extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-diff-highlight'; }
properties: { static get properties() {
return {
/** @type {!Array<!Gerrit.HoveredRange>} */ /** @type {!Array<!Gerrit.HoveredRange>} */
commentRanges: { commentRanges: {
type: Array, type: Array,
@@ -46,17 +54,18 @@
type: Object, type: Object,
notify: true, notify: true,
}, },
}, };
}
behaviors: [ created() {
Gerrit.FireBehavior, super.created();
], this.addEventListener('comment-thread-mouseleave',
e => this._handleCommentThreadMouseleave(e));
listeners: { this.addEventListener('comment-thread-mouseenter',
'comment-thread-mouseleave': '_handleCommentThreadMouseleave', e => this._handleCommentThreadMouseenter(e));
'comment-thread-mouseenter': '_handleCommentThreadMouseenter', this.addEventListener('create-comment-requested',
'create-comment-requested': '_handleRangeCommentRequest', e => this._handleRangeCommentRequest(e));
}, }
get diffBuilder() { get diffBuilder() {
if (!this._cachedDiffBuilder) { if (!this._cachedDiffBuilder) {
@@ -64,7 +73,7 @@
Polymer.dom(this).querySelector('gr-diff-builder'); Polymer.dom(this).querySelector('gr-diff-builder');
} }
return this._cachedDiffBuilder; return this._cachedDiffBuilder;
}, }
/** /**
* Determines side/line/range for a DOM selection and shows a tooltip. * Determines side/line/range for a DOM selection and shows a tooltip.
@@ -93,7 +102,7 @@
this.debounce( this.debounce(
'selectionChange', () => this._handleSelection(selection, isMouseUp), 'selectionChange', () => this._handleSelection(selection, isMouseUp),
10); 10);
}, }
_getThreadEl(e) { _getThreadEl(e) {
const path = Polymer.dom(e).path || []; const path = Polymer.dom(e).path || [];
@@ -101,7 +110,7 @@
if (pathEl.classList.contains('comment-thread')) return pathEl; if (pathEl.classList.contains('comment-thread')) return pathEl;
} }
return null; return null;
}, }
_handleCommentThreadMouseenter(e) { _handleCommentThreadMouseenter(e) {
const threadEl = this._getThreadEl(e); const threadEl = this._getThreadEl(e);
@@ -110,7 +119,7 @@
if (index !== undefined) { if (index !== undefined) {
this.set(['commentRanges', index, 'hovering'], true); this.set(['commentRanges', index, 'hovering'], true);
} }
}, }
_handleCommentThreadMouseleave(e) { _handleCommentThreadMouseleave(e) {
const threadEl = this._getThreadEl(e); const threadEl = this._getThreadEl(e);
@@ -119,7 +128,7 @@
if (index !== undefined) { if (index !== undefined) {
this.set(['commentRanges', index, 'hovering'], false); this.set(['commentRanges', index, 'hovering'], false);
} }
}, }
_indexForThreadEl(threadEl) { _indexForThreadEl(threadEl) {
const side = threadEl.getAttribute('comment-side'); const side = threadEl.getAttribute('comment-side');
@@ -128,7 +137,7 @@
if (!range) return undefined; if (!range) return undefined;
return this._indexOfCommentRange(side, range); return this._indexOfCommentRange(side, range);
}, }
_indexOfCommentRange(side, range) { _indexOfCommentRange(side, range) {
function rangesEqual(a, b) { function rangesEqual(a, b) {
@@ -146,7 +155,7 @@
return this.commentRanges.findIndex(commentRange => return this.commentRanges.findIndex(commentRange =>
commentRange.side === side && rangesEqual(commentRange.range, range)); commentRange.side === side && rangesEqual(commentRange.range, range));
}, }
/** /**
* Get current normalized selection. * Get current normalized selection.
@@ -184,7 +193,7 @@
end: endRange.end, end: endRange.end,
}; };
} }
}, }
/** /**
* Normalize a specific DOM Range. * Normalize a specific DOM Range.
@@ -198,7 +207,7 @@
end: this._normalizeSelectionSide( end: this._normalizeSelectionSide(
range.endContainer, range.endOffset), range.endContainer, range.endOffset),
}, domRange); }, domRange);
}, }
/** /**
* Adjust triple click selection for the whole line. * Adjust triple click selection for the whole line.
@@ -239,7 +248,7 @@
}; };
} }
return range; return range;
}, }
/** /**
* Convert DOM Range selection to concrete numbers (line, column, side). * Convert DOM Range selection to concrete numbers (line, column, side).
@@ -296,7 +305,7 @@
line, line,
column, column,
}; };
}, }
/** /**
* The only line in which add a comment tooltip is cut off is the first * The only line in which add a comment tooltip is cut off is the first
@@ -312,7 +321,7 @@
} }
actionBox.positionBelow = true; actionBox.positionBelow = true;
actionBox.placeBelow(range); actionBox.placeBelow(range);
}, }
_isRangeValid(range) { _isRangeValid(range) {
if (!range || !range.start || !range.end) { if (!range || !range.start || !range.end) {
@@ -326,7 +335,7 @@
return false; return false;
} }
return true; return true;
}, }
_handleSelection(selection, isMouseUp) { _handleSelection(selection, isMouseUp) {
const normalizedRange = this._getNormalizedRange(selection); const normalizedRange = this._getNormalizedRange(selection);
@@ -398,12 +407,12 @@
} else { } else {
this._positionActionBox(actionBox, start.line, start.node); this._positionActionBox(actionBox, start.line, start.node);
} }
}, }
_fireCreateRangeComment(side, range) { _fireCreateRangeComment(side, range) {
this.fire('create-range-comment', {side, range}); this.fire('create-range-comment', {side, range});
this._removeActionBox(); this._removeActionBox();
}, }
_handleRangeCommentRequest(e) { _handleRangeCommentRequest(e) {
e.stopPropagation(); e.stopPropagation();
@@ -412,7 +421,7 @@
} }
const {side, range} = this.selectedRange; const {side, range} = this.selectedRange;
this._fireCreateRangeComment(side, range); this._fireCreateRangeComment(side, range);
}, }
_removeActionBox() { _removeActionBox() {
this.selectedRange = undefined; this.selectedRange = undefined;
@@ -420,7 +429,7 @@
if (actionBox) { if (actionBox) {
Polymer.dom(this.root).removeChild(actionBox); Polymer.dom(this.root).removeChild(actionBox);
} }
}, }
_convertOffsetToColumn(el, offset) { _convertOffsetToColumn(el, offset) {
if (el instanceof Element && el.classList.contains('content')) { if (el instanceof Element && el.classList.contains('content')) {
@@ -436,7 +445,7 @@
} }
} }
return offset; return offset;
}, }
/** /**
* Traverse Element from right to left, call callback for each node. * Traverse Element from right to left, call callback for each node.
@@ -461,7 +470,7 @@
} }
node = nextNode; node = nextNode;
} }
}, }
/** /**
* Get length of a node. If the node is a content node, then only give the * Get length of a node. If the node is a content node, then only give the
@@ -476,6 +485,8 @@
} else { } else {
return GrAnnotation.getLength(node); return GrAnnotation.getLength(node);
} }
}, }
}); }
customElements.define(GrDiffHighlight.is, GrDiffHighlight);
})(); })();

View File

@@ -68,15 +68,23 @@
RIGHT: 'right', RIGHT: 'right',
}; };
/**
* @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.PatchSetMixin
*/
/** /**
* Wrapper around gr-diff. * Wrapper around gr-diff.
* *
* Webcomponent fetching diffs and related data from restAPI and passing them * Webcomponent fetching diffs and related data from restAPI and passing them
* to the presentational gr-diff for rendering. * to the presentational gr-diff for rendering.
*/ */
Polymer({ class GrDiffHost extends Polymer.mixinBehaviors( [
is: 'gr-diff-host', Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-diff-host'; }
/** /**
* Fired when the user selects a line. * Fired when the user selects a line.
* @event line-selected * @event line-selected
@@ -94,7 +102,8 @@
* @event diff-comments-modified * @event diff-comments-modified
*/ */
properties: { static get properties() {
return {
changeNum: String, changeNum: String,
noAutoRender: { noAutoRender: {
type: Boolean, type: Boolean,
@@ -227,49 +236,57 @@
type: Array, type: Array,
value: [], value: [],
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
Gerrit.PatchSetBehavior, '_whitespaceChanged(prefs.ignore_whitespace, _loadedWhitespaceLevel,' +
], ' noRenderOnPrefsChange)',
'_syntaxHighlightingChanged(noRenderOnPrefsChange, prefs.*)',
];
}
listeners: { created() {
super.created();
this.addEventListener(
// These are named inconsistently for a reason: // These are named inconsistently for a reason:
// The create-comment event is fired to indicate that we should // The create-comment event is fired to indicate that we should
// create a comment. // create a comment.
// The comment-* events are just notifying that the comments did already // The comment-* events are just notifying that the comments did already
// change in some way, and that we should update any models we may want // change in some way, and that we should update any models we may want
// to keep in sync. // to keep in sync.
'create-comment': '_handleCreateComment', 'create-comment',
'comment-discard': '_handleCommentDiscard', e => this._handleCreateComment(e));
'comment-update': '_handleCommentUpdate', this.addEventListener('comment-discard',
'comment-save': '_handleCommentSave', e => this._handleCommentDiscard(e));
this.addEventListener('comment-update',
'render-start': '_handleRenderStart', e => this._handleCommentUpdate(e));
'render-content': '_handleRenderContent', this.addEventListener('comment-save',
e => this._handleCommentSave(e));
'normalize-range': '_handleNormalizeRange', this.addEventListener('render-start',
'diff-context-expanded': '_handleDiffContextExpanded', () => this._handleRenderStart());
}, this.addEventListener('render-content',
() => this._handleRenderContent());
observers: [ this.addEventListener('normalize-range',
'_whitespaceChanged(prefs.ignore_whitespace, _loadedWhitespaceLevel,' + event => this._handleNormalizeRange(event));
' noRenderOnPrefsChange)', this.addEventListener('diff-context-expanded',
'_syntaxHighlightingChanged(noRenderOnPrefsChange, prefs.*)', event => this._handleDiffContextExpanded(event));
], }
ready() { ready() {
super.ready();
if (this._canReload()) { if (this._canReload()) {
this.reload(); this.reload();
} }
}, }
attached() { attached() {
super.attached();
this._getLoggedIn().then(loggedIn => { this._getLoggedIn().then(loggedIn => {
this._loggedIn = loggedIn; this._loggedIn = loggedIn;
}); });
}, }
/** /**
* @param {boolean=} shouldReportMetric indicate a new Diff Page. This is a * @param {boolean=} shouldReportMetric indicate a new Diff Page. This is a
@@ -364,7 +381,7 @@
console.warn('Error encountered loading diff:', err); console.warn('Error encountered loading diff:', err);
}) })
.then(() => { this._loading = false; }); .then(() => { this._loading = false; });
}, }
_getFilesWeblinks(diff) { _getFilesWeblinks(diff) {
if (!this.commitRange) { if (!this.commitRange) {
@@ -378,30 +395,30 @@
this.projectName, this.commitRange.commit, this.path, this.projectName, this.commitRange.commit, this.path,
{weblinks: diff && diff.meta_b && diff.meta_b.web_links}), {weblinks: diff && diff.meta_b && diff.meta_b.web_links}),
}; };
}, }
/** Cancel any remaining diff builder rendering work. */ /** Cancel any remaining diff builder rendering work. */
cancel() { cancel() {
this.$.diff.cancel(); this.$.diff.cancel();
}, }
/** @return {!Array<!HTMLElement>} */ /** @return {!Array<!HTMLElement>} */
getCursorStops() { getCursorStops() {
return this.$.diff.getCursorStops(); return this.$.diff.getCursorStops();
}, }
/** @return {boolean} */ /** @return {boolean} */
isRangeSelected() { isRangeSelected() {
return this.$.diff.isRangeSelected(); return this.$.diff.isRangeSelected();
}, }
createRangeComment() { createRangeComment() {
return this.$.diff.createRangeComment(); return this.$.diff.createRangeComment();
}, }
toggleLeftDiff() { toggleLeftDiff() {
this.$.diff.toggleLeftDiff(); this.$.diff.toggleLeftDiff();
}, }
/** /**
* Load and display blame information for the base of the diff. * Load and display blame information for the base of the diff.
@@ -418,12 +435,12 @@
this._blame = blame; this._blame = blame;
}); });
}, }
/** Unload blame information for the diff. */ /** Unload blame information for the diff. */
clearBlame() { clearBlame() {
this._blame = null; this._blame = null;
}, }
/** /**
* The thread elements in this diff, in no particular order. * The thread elements in this diff, in no particular order.
@@ -432,31 +449,31 @@
getThreadEls() { getThreadEls() {
return Array.from( return Array.from(
Polymer.dom(this.$.diff).querySelectorAll('.comment-thread')); Polymer.dom(this.$.diff).querySelectorAll('.comment-thread'));
}, }
/** @param {HTMLElement} el */ /** @param {HTMLElement} el */
addDraftAtLine(el) { addDraftAtLine(el) {
this.$.diff.addDraftAtLine(el); this.$.diff.addDraftAtLine(el);
}, }
clearDiffContent() { clearDiffContent() {
this.$.diff.clearDiffContent(); this.$.diff.clearDiffContent();
}, }
expandAllContext() { expandAllContext() {
this.$.diff.expandAllContext(); this.$.diff.expandAllContext();
}, }
/** @return {!Promise} */ /** @return {!Promise} */
_getLoggedIn() { _getLoggedIn() {
return this.$.restAPI.getLoggedIn(); return this.$.restAPI.getLoggedIn();
}, }
/** @return {boolean}} */ /** @return {boolean}} */
_canReload() { _canReload() {
return !!this.changeNum && !!this.patchRange && !!this.path && return !!this.changeNum && !!this.patchRange && !!this.path &&
!this.noAutoRender; !this.noAutoRender;
}, }
/** @return {!Promise<!Object>} */ /** @return {!Promise<!Object>} */
_getDiff() { _getDiff() {
@@ -472,7 +489,7 @@
reject) reject)
.then(resolve); .then(resolve);
}); });
}, }
_handleGetDiffError(response) { _handleGetDiffError(response) {
// Loading the diff may respond with 409 if the file is too large. In this // Loading the diff may respond with 409 if the file is too large. In this
@@ -492,7 +509,7 @@
} }
this.fire('page-error', {response}); this.fire('page-error', {response});
}, }
/** /**
* Report info about the diff response. * Report info about the diff response.
@@ -533,7 +550,7 @@
this.$.reporting.reportInteraction(EVENT_NONZERO_REBASE, this.$.reporting.reportInteraction(EVENT_NONZERO_REBASE,
percentRebaseDelta); percentRebaseDelta);
} }
}, }
/** /**
* @param {Object} diff * @param {Object} diff
@@ -550,7 +567,7 @@
this._revisionImage = null; this._revisionImage = null;
return Promise.resolve(); return Promise.resolve();
} }
}, }
/** /**
* @param {Object} diff * @param {Object} diff
@@ -558,7 +575,7 @@
*/ */
_computeIsImageDiff(diff) { _computeIsImageDiff(diff) {
return isImageDiff(diff); return isImageDiff(diff);
}, }
_commentsChanged(newComments) { _commentsChanged(newComments) {
const allComments = []; const allComments = [];
@@ -579,7 +596,7 @@
const threadEl = this._createThreadElement(thread); const threadEl = this._createThreadElement(thread);
this._attachThreadElement(threadEl); this._attachThreadElement(threadEl);
} }
}, }
/** /**
* @param {!Array<!Object>} comments * @param {!Array<!Object>} comments
@@ -621,7 +638,7 @@
threads.push(newThread); threads.push(newThread);
} }
return threads; return threads;
}, }
/** /**
* @param {Object} blame * @param {Object} blame
@@ -629,7 +646,7 @@
*/ */
_computeIsBlameLoaded(blame) { _computeIsBlameLoaded(blame) {
return !!blame; return !!blame;
}, }
/** /**
* @param {Object} diff * @param {Object} diff
@@ -638,7 +655,7 @@
_getImages(diff) { _getImages(diff) {
return this.$.restAPI.getImagesForDiff(this.changeNum, diff, return this.$.restAPI.getImagesForDiff(this.changeNum, diff,
this.patchRange); this.patchRange);
}, }
/** @param {CustomEvent} e */ /** @param {CustomEvent} e */
_handleCreateComment(e) { _handleCreateComment(e) {
@@ -648,7 +665,7 @@
threadEl.addOrEditDraft(lineNum, range); threadEl.addOrEditDraft(lineNum, range);
this.$.reporting.recordDraftInteraction(); this.$.reporting.recordDraftInteraction();
}, }
/** /**
* Gets or creates a comment thread at a given location. * Gets or creates a comment thread at a given location.
@@ -675,18 +692,18 @@
this._attachThreadElement(threadEl); this._attachThreadElement(threadEl);
} }
return threadEl; return threadEl;
}, }
_attachThreadElement(threadEl) { _attachThreadElement(threadEl) {
Polymer.dom(this.$.diff).appendChild(threadEl); Polymer.dom(this.$.diff).appendChild(threadEl);
}, }
_clearThreads() { _clearThreads() {
for (const threadEl of this.getThreadEls()) { for (const threadEl of this.getThreadEls()) {
const parent = Polymer.dom(threadEl).parentNode; const parent = Polymer.dom(threadEl).parentNode;
Polymer.dom(parent).removeChild(threadEl); Polymer.dom(parent).removeChild(threadEl);
} }
}, }
_createThreadElement(thread) { _createThreadElement(thread) {
const threadEl = document.createElement('gr-comment-thread'); const threadEl = document.createElement('gr-comment-thread');
@@ -717,7 +734,7 @@
}; };
threadEl.addEventListener('thread-discard', threadDiscardListener); threadEl.addEventListener('thread-discard', threadDiscardListener);
return threadEl; return threadEl;
}, }
/** /**
* Gets a comment thread element at a given location. * Gets a comment thread element at a given location.
@@ -746,7 +763,7 @@
const filteredThreadEls = this._filterThreadElsForLocation( const filteredThreadEls = this._filterThreadElsForLocation(
this.getThreadEls(), line, commentSide).filter(matchesRange); this.getThreadEls(), line, commentSide).filter(matchesRange);
return filteredThreadEls.length ? filteredThreadEls[0] : null; return filteredThreadEls.length ? filteredThreadEls[0] : null;
}, }
/** /**
* @param {!Array<!HTMLElement>} threadEls * @param {!Array<!HTMLElement>} threadEls
@@ -791,14 +808,14 @@
} }
return threadEls.filter(threadEl => return threadEls.filter(threadEl =>
matchers.some(matcher => matcher(threadEl))); matchers.some(matcher => matcher(threadEl)));
}, }
_getIgnoreWhitespace() { _getIgnoreWhitespace() {
if (!this.prefs || !this.prefs.ignore_whitespace) { if (!this.prefs || !this.prefs.ignore_whitespace) {
return WHITESPACE_IGNORE_NONE; return WHITESPACE_IGNORE_NONE;
} }
return this.prefs.ignore_whitespace; return this.prefs.ignore_whitespace;
}, }
_whitespaceChanged( _whitespaceChanged(
preferredWhitespaceLevel, loadedWhitespaceLevel, preferredWhitespaceLevel, loadedWhitespaceLevel,
@@ -816,7 +833,7 @@
!noRenderOnPrefsChange) { !noRenderOnPrefsChange) {
this.reload(); this.reload();
} }
}, }
_syntaxHighlightingChanged(noRenderOnPrefsChange, prefsChangeRecord) { _syntaxHighlightingChanged(noRenderOnPrefsChange, prefsChangeRecord) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -834,7 +851,7 @@
if (!noRenderOnPrefsChange) { if (!noRenderOnPrefsChange) {
this.reload(); this.reload();
} }
}, }
/** /**
* @param {Object} patchRangeRecord * @param {Object} patchRangeRecord
@@ -843,7 +860,7 @@
_computeParentIndex(patchRangeRecord) { _computeParentIndex(patchRangeRecord) {
return this.isMergeParent(patchRangeRecord.base.basePatchNum) ? return this.isMergeParent(patchRangeRecord.base.basePatchNum) ?
this.getParentIndex(patchRangeRecord.base.basePatchNum) : null; this.getParentIndex(patchRangeRecord.base.basePatchNum) : null;
}, }
_handleCommentSave(e) { _handleCommentSave(e) {
const comment = e.detail.comment; const comment = e.detail.comment;
@@ -851,13 +868,13 @@
const idx = this._findDraftIndex(comment, side); const idx = this._findDraftIndex(comment, side);
this.set(['comments', side, idx], comment); this.set(['comments', side, idx], comment);
this._handleCommentSaveOrDiscard(); this._handleCommentSaveOrDiscard();
}, }
_handleCommentDiscard(e) { _handleCommentDiscard(e) {
const comment = e.detail.comment; const comment = e.detail.comment;
this._removeComment(comment); this._removeComment(comment);
this._handleCommentSaveOrDiscard(); this._handleCommentSaveOrDiscard();
}, }
/** /**
* Closure annotation for Polymer.prototype.push is off. Submitted PR: * Closure annotation for Polymer.prototype.push is off. Submitted PR:
@@ -878,17 +895,17 @@
} else { // Create new draft. } else { // Create new draft.
this.push(['comments', side], comment); this.push(['comments', side], comment);
} }
}, }
_handleCommentSaveOrDiscard() { _handleCommentSaveOrDiscard() {
this.dispatchEvent(new CustomEvent( this.dispatchEvent(new CustomEvent(
'diff-comments-modified', {bubbles: true, composed: true})); 'diff-comments-modified', {bubbles: true, composed: true}));
}, }
_removeComment(comment) { _removeComment(comment) {
const side = comment.__commentSide; const side = comment.__commentSide;
this._removeCommentFromSide(comment, side); this._removeCommentFromSide(comment, side);
}, }
_removeCommentFromSide(comment, side) { _removeCommentFromSide(comment, side) {
let idx = this._findCommentIndex(comment, side); let idx = this._findCommentIndex(comment, side);
@@ -898,7 +915,7 @@
if (idx !== -1) { if (idx !== -1) {
this.splice('comments.' + side, idx, 1); this.splice('comments.' + side, idx, 1);
} }
}, }
/** @return {number} */ /** @return {number} */
_findCommentIndex(comment, side) { _findCommentIndex(comment, side) {
@@ -906,7 +923,7 @@
return -1; return -1;
} }
return this.comments[side].findIndex(item => item.id === comment.id); return this.comments[side].findIndex(item => item.id === comment.id);
}, }
/** @return {number} */ /** @return {number} */
_findDraftIndex(comment, side) { _findDraftIndex(comment, side) {
@@ -915,7 +932,7 @@
} }
return this.comments[side].findIndex( return this.comments[side].findIndex(
item => item.__draftID === comment.__draftID); item => item.__draftID === comment.__draftID);
}, }
_isSyntaxHighlightingEnabled(preferenceChangeRecord, diff) { _isSyntaxHighlightingEnabled(preferenceChangeRecord, diff) {
if (!preferenceChangeRecord || if (!preferenceChangeRecord ||
@@ -926,7 +943,7 @@
} }
return !this._anyLineTooLong(diff) && return !this._anyLineTooLong(diff) &&
this.$.diff.getDiffLength(diff) <= SYNTAX_MAX_DIFF_LENGTH; this.$.diff.getDiffLength(diff) <= SYNTAX_MAX_DIFF_LENGTH;
}, }
/** /**
* @return {boolean} whether any of the lines in diff are longer * @return {boolean} whether any of the lines in diff are longer
@@ -940,7 +957,7 @@
(section.a || []).concat(section.b || []); (section.a || []).concat(section.b || []);
return lines.some(line => line.length >= SYNTAX_MAX_LINE_LENGTH); return lines.some(line => line.length >= SYNTAX_MAX_LINE_LENGTH);
}); });
}, }
_listenToViewportRender() { _listenToViewportRender() {
const renderUpdateListener = start => { const renderUpdateListener = start => {
@@ -951,26 +968,28 @@
}; };
this.$.syntaxLayer.addListener(renderUpdateListener); this.$.syntaxLayer.addListener(renderUpdateListener);
}, }
_handleRenderStart() { _handleRenderStart() {
this.$.reporting.time(TimingLabel.TOTAL); this.$.reporting.time(TimingLabel.TOTAL);
this.$.reporting.time(TimingLabel.CONTENT); this.$.reporting.time(TimingLabel.CONTENT);
}, }
_handleRenderContent() { _handleRenderContent() {
this.$.reporting.timeEnd(TimingLabel.CONTENT); this.$.reporting.timeEnd(TimingLabel.CONTENT);
}, }
_handleNormalizeRange(event) { _handleNormalizeRange(event) {
this.$.reporting.reportInteraction('normalize-range', this.$.reporting.reportInteraction('normalize-range',
`Modified invalid comment range on l. ${event.detail.lineNum}` + `Modified invalid comment range on l. ${event.detail.lineNum}` +
` of the ${event.detail.side} side`); ` of the ${event.detail.side} side`);
}, }
_handleDiffContextExpanded(event) { _handleDiffContextExpanded(event) {
this.$.reporting.reportInteraction( this.$.reporting.reportInteraction(
'diff-context-expanded', event.detail.numLines); 'diff-context-expanded', event.detail.numLines);
}, }
}); }
customElements.define(GrDiffHost.is, GrDiffHost);
})(); })();

View File

@@ -17,10 +17,13 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrDiffModeSelector extends Polymer.GestureEventListeners(
is: 'gr-diff-mode-selector', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-diff-mode-selector'; }
properties: { static get properties() {
return {
mode: { mode: {
type: String, type: String,
notify: true, notify: true,
@@ -44,7 +47,8 @@
UNIFIED: 'UNIFIED_DIFF', UNIFIED: 'UNIFIED_DIFF',
}, },
}, },
}, };
}
/** /**
* Set the mode. If save on change is enabled also update the preference. * Set the mode. If save on change is enabled also update the preference.
@@ -54,18 +58,20 @@
this.$.restAPI.savePreferences({diff_view: newMode}); this.$.restAPI.savePreferences({diff_view: newMode});
} }
this.mode = newMode; this.mode = newMode;
}, }
_computeSelectedClass(diffViewMode, buttonViewMode) { _computeSelectedClass(diffViewMode, buttonViewMode) {
return buttonViewMode === diffViewMode ? 'selected' : ''; return buttonViewMode === diffViewMode ? 'selected' : '';
}, }
_handleSideBySideTap() { _handleSideBySideTap() {
this.setMode(this._VIEW_MODES.SIDE_BY_SIDE); this.setMode(this._VIEW_MODES.SIDE_BY_SIDE);
}, }
_handleUnifiedTap() { _handleUnifiedTap() {
this.setMode(this._VIEW_MODES.UNIFIED); this.setMode(this._VIEW_MODES.UNIFIED);
}, }
}); }
customElements.define(GrDiffModeSelector.is, GrDiffModeSelector);
})(); })();

View File

@@ -17,39 +17,44 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-diff-preferences-dialog', * @appliesMixin Gerrit.FireMixin
*/
class GrDiffPreferencesDialog extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-diff-preferences-dialog'; }
properties: { static get properties() {
return {
/** @type {?} */ /** @type {?} */
diffPrefs: Object, diffPrefs: Object,
_diffPrefsChanged: Boolean, _diffPrefsChanged: Boolean,
}, };
}
behaviors: [
Gerrit.FireBehavior,
],
getFocusStops() { getFocusStops() {
return { return {
start: this.$.diffPreferences.$.contextSelect, start: this.$.diffPreferences.$.contextSelect,
end: this.$.saveButton, end: this.$.saveButton,
}; };
}, }
resetFocus() { resetFocus() {
this.$.diffPreferences.$.contextSelect.focus(); this.$.diffPreferences.$.contextSelect.focus();
}, }
_computeHeaderClass(changed) { _computeHeaderClass(changed) {
return changed ? 'edited' : ''; return changed ? 'edited' : '';
}, }
_handleCancelDiff(e) { _handleCancelDiff(e) {
e.stopPropagation(); e.stopPropagation();
this.$.diffPrefsOverlay.close(); this.$.diffPrefsOverlay.close();
}, }
open() { open() {
this.$.diffPrefsOverlay.open().then(() => { this.$.diffPrefsOverlay.open().then(() => {
@@ -57,7 +62,7 @@
this.$.diffPrefsOverlay.setFocusStops(focusStops); this.$.diffPrefsOverlay.setFocusStops(focusStops);
this.resetFocus(); this.resetFocus();
}); });
}, }
_handleSaveDiffPreferences() { _handleSaveDiffPreferences() {
this.$.diffPreferences.save().then(() => { this.$.diffPreferences.save().then(() => {
@@ -65,6 +70,8 @@
this.$.diffPrefsOverlay.close(); this.$.diffPrefsOverlay.close();
}); });
}, }
}); }
customElements.define(GrDiffPreferencesDialog.is, GrDiffPreferencesDialog);
})(); })();

View File

@@ -64,10 +64,13 @@
* that the part that is within the context or has comments is shown, while * that the part that is within the context or has comments is shown, while
* the rest is not. * the rest is not.
*/ */
Polymer({ class GrDiffProcessor extends Polymer.GestureEventListeners(
is: 'gr-diff-processor', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-diff-processor'; }
properties: { static get properties() {
return {
/** /**
* The amount of context around collapsed groups. * The amount of context around collapsed groups.
@@ -112,23 +115,26 @@
value: null, value: null,
}, },
_isScrolling: Boolean, _isScrolling: Boolean,
}, };
}
attached() { attached() {
super.attached();
this.listen(window, 'scroll', '_handleWindowScroll'); this.listen(window, 'scroll', '_handleWindowScroll');
}, }
detached() { detached() {
super.detached();
this.cancel(); this.cancel();
this.unlisten(window, 'scroll', '_handleWindowScroll'); this.unlisten(window, 'scroll', '_handleWindowScroll');
}, }
_handleWindowScroll() { _handleWindowScroll() {
this._isScrolling = true; this._isScrolling = true;
this.debounce('resetIsScrolling', () => { this.debounce('resetIsScrolling', () => {
this._isScrolling = false; this._isScrolling = false;
}, 50); }, 50);
}, }
/** /**
* Asynchronously process the diff chunks into groups. As it processes, it * Asynchronously process the diff chunks into groups. As it processes, it
@@ -196,7 +202,7 @@
})); }));
return this._processPromise return this._processPromise
.finally(() => { this._processPromise = null; }); .finally(() => { this._processPromise = null; });
}, }
/** /**
* Cancel any jobs that are running. * Cancel any jobs that are running.
@@ -209,7 +215,7 @@
if (this._processPromise) { if (this._processPromise) {
this._processPromise.cancel(); this._processPromise.cancel();
} }
}, }
/** /**
* Process the next uncollapsible chunk, or the next collapsible chunks. * Process the next uncollapsible chunk, or the next collapsible chunks.
@@ -236,15 +242,15 @@
return this._processCollapsibleChunks( return this._processCollapsibleChunks(
state, chunks, firstUncollapsibleChunkIndex); state, chunks, firstUncollapsibleChunkIndex);
}, }
_linesLeft(chunk) { _linesLeft(chunk) {
return chunk.ab || chunk.a || []; return chunk.ab || chunk.a || [];
}, }
_linesRight(chunk) { _linesRight(chunk) {
return chunk.ab || chunk.b || []; return chunk.ab || chunk.b || [];
}, }
_firstUncollapsibleChunkIndex(chunks, offset) { _firstUncollapsibleChunkIndex(chunks, offset) {
let chunkIndex = offset; let chunkIndex = offset;
@@ -253,11 +259,11 @@
chunkIndex++; chunkIndex++;
} }
return chunkIndex; return chunkIndex;
}, }
_isCollapsibleChunk(chunk) { _isCollapsibleChunk(chunk) {
return (chunk.ab || chunk.common) && !chunk.keyLocation; return (chunk.ab || chunk.common) && !chunk.keyLocation;
}, }
/** /**
* Process a stretch of collapsible chunks. * Process a stretch of collapsible chunks.
@@ -303,7 +309,7 @@
groups, groups,
newChunkIndex: firstUncollapsibleChunkIndex, newChunkIndex: firstUncollapsibleChunkIndex,
}; };
}, }
_commonChunkLength(chunk) { _commonChunkLength(chunk) {
console.assert(chunk.ab || chunk.common); console.assert(chunk.ab || chunk.common);
@@ -311,7 +317,7 @@
!chunk.a || (chunk.b && chunk.a.length === chunk.b.length), !chunk.a || (chunk.b && chunk.a.length === chunk.b.length),
`common chunk needs same number of a and b lines: `, chunk); `common chunk needs same number of a and b lines: `, chunk);
return this._linesLeft(chunk).length; return this._linesLeft(chunk).length;
}, }
/** /**
* @param {!Array<!Object>} chunks * @param {!Array<!Object>} chunks
@@ -327,7 +333,7 @@
offsetRight += chunkLength; offsetRight += chunkLength;
return group; return group;
}); });
}, }
/** /**
* @param {!Object} chunk * @param {!Object} chunk
@@ -343,7 +349,7 @@
group.dueToRebase = chunk.due_to_rebase; group.dueToRebase = chunk.due_to_rebase;
group.ignoredWhitespaceOnly = chunk.common; group.ignoredWhitespaceOnly = chunk.common;
return group; return group;
}, }
_linesFromChunk(chunk, offsetLeft, offsetRight) { _linesFromChunk(chunk, offsetLeft, offsetRight) {
if (chunk.ab) { if (chunk.ab) {
@@ -366,7 +372,7 @@
chunk[DiffHighlights.ADDED])); chunk[DiffHighlights.ADDED]));
} }
return lines; return lines;
}, }
/** /**
* @param {string} lineType (GrDiffLine.Type) * @param {string} lineType (GrDiffLine.Type)
@@ -380,7 +386,7 @@
this._convertIntralineInfos(rows, opt_intralineInfos) : undefined; this._convertIntralineInfos(rows, opt_intralineInfos) : undefined;
return rows.map((row, i) => this._lineFromRow( return rows.map((row, i) => this._lineFromRow(
lineType, offset, offset, row, i, grDiffHighlights)); lineType, offset, offset, row, i, grDiffHighlights));
}, }
/** /**
* @param {string} type (GrDiffLine.Type) * @param {string} type (GrDiffLine.Type)
@@ -403,14 +409,14 @@
line.hasIntralineInfo = false; line.hasIntralineInfo = false;
} }
return line; return line;
}, }
_makeFileComments() { _makeFileComments() {
const line = new GrDiffLine(GrDiffLine.Type.BOTH); const line = new GrDiffLine(GrDiffLine.Type.BOTH);
line.beforeNumber = GrDiffLine.FILE; line.beforeNumber = GrDiffLine.FILE;
line.afterNumber = GrDiffLine.FILE; line.afterNumber = GrDiffLine.FILE;
return new GrDiffGroup(GrDiffGroup.Type.BOTH, [line]); return new GrDiffGroup(GrDiffGroup.Type.BOTH, [line]);
}, }
/** /**
* Split chunks into smaller chunks of the same kind. * Split chunks into smaller chunks of the same kind.
@@ -452,7 +458,7 @@
} }
} }
return newChunks; return newChunks;
}, }
/** /**
* In order to show key locations, such as comments, out of the bounds of * In order to show key locations, such as comments, out of the bounds of
@@ -503,7 +509,7 @@
} }
return result; return result;
}, }
/** /**
* @return {!Array<{offset: number, keyLocation: boolean}>} Offsets of the * @return {!Array<{offset: number, keyLocation: boolean}>} Offsets of the
@@ -534,7 +540,7 @@
} }
return result; return result;
}, }
_splitAtChunkEnds(lines, chunkEnds) { _splitAtChunkEnds(lines, chunkEnds) {
const result = []; const result = [];
@@ -545,7 +551,7 @@
lastChunkEndOffset = offset; lastChunkEndOffset = offset;
} }
return result; return result;
}, }
/** /**
* Converts `IntralineInfo`s return by the API to `GrLineHighlights` used * Converts `IntralineInfo`s return by the API to `GrLineHighlights` used
@@ -595,7 +601,7 @@
normalized.push(lineHighlight); normalized.push(lineHighlight);
} }
return normalized; return normalized;
}, }
/** /**
* If a group is an addition or a removal, break it down into smaller groups * If a group is an addition or a removal, break it down into smaller groups
@@ -625,7 +631,7 @@
} }
return subChunk; return subChunk;
}); });
}, }
/** /**
* Given an array and a size, return an array of arrays where no inner array * Given an array and a size, return an array of arrays where no inner array
@@ -643,6 +649,8 @@
const tail = array.slice(array.length - size); const tail = array.slice(array.length - size);
return this._breakdown(head, size).concat([tail]); return this._breakdown(head, size).concat([tail]);
}, }
}); }
customElements.define(GrDiffProcessor.is, GrDiffProcessor);
})(); })();

View File

@@ -30,10 +30,18 @@
const getNewCache = () => { return {left: null, right: null}; }; const getNewCache = () => { return {left: null, right: null}; };
Polymer({ /**
is: 'gr-diff-selection', * @appliesMixin Gerrit.DomUtilMixin
*/
class GrDiffSelection extends Polymer.mixinBehaviors( [
Gerrit.DomUtilBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-diff-selection'; }
properties: { static get properties() {
return {
diff: Object, diff: Object,
/** @type {?Object} */ /** @type {?Object} */
_cachedDiffBuilder: Object, _cachedDiffBuilder: Object,
@@ -41,24 +49,27 @@
type: Object, type: Object,
value: getNewCache(), value: getNewCache(),
}, },
}, };
}
observers: [ static get observers() {
return [
'_diffChanged(diff)', '_diffChanged(diff)',
], ];
}
listeners: { created() {
copy: '_handleCopy', super.created();
down: '_handleDown', this.addEventListener('copy',
}, e => this._handleCopy(e));
Polymer.Gestures.addListener(this, 'down',
behaviors: [ e => this._handleDown(e));
Gerrit.DomUtilBehavior, }
],
attached() { attached() {
super.attached();
this.classList.add(SelectionClass.RIGHT); this.classList.add(SelectionClass.RIGHT);
}, }
get diffBuilder() { get diffBuilder() {
if (!this._cachedDiffBuilder) { if (!this._cachedDiffBuilder) {
@@ -66,11 +77,11 @@
Polymer.dom(this).querySelector('gr-diff-builder'); Polymer.dom(this).querySelector('gr-diff-builder');
} }
return this._cachedDiffBuilder; return this._cachedDiffBuilder;
}, }
_diffChanged() { _diffChanged() {
this._linesCache = getNewCache(); this._linesCache = getNewCache();
}, }
_handleDownOnRangeComment(node) { _handleDownOnRangeComment(node) {
if (node && if (node &&
@@ -85,7 +96,7 @@
return true; return true;
} }
return false; return false;
}, }
_handleDown(e) { _handleDown(e) {
// Handle the down event on comment thread in Polymer 2 // Handle the down event on comment thread in Polymer 2
@@ -115,7 +126,7 @@
} }
this._setClasses(targetClasses); this._setClasses(targetClasses);
}, }
/** /**
* Set the provided list of classes on the element, to the exclusion of all * Set the provided list of classes on the element, to the exclusion of all
@@ -138,11 +149,11 @@
this.classList.add(_class); this.classList.add(_class);
} }
} }
}, }
_getCopyEventTarget(e) { _getCopyEventTarget(e) {
return Polymer.dom(e).rootTarget; return Polymer.dom(e).rootTarget;
}, }
/** /**
* Utility function to determine whether an element is a descendant of * Utility function to determine whether an element is a descendant of
@@ -155,7 +166,7 @@
_elementDescendedFromClass(element, className) { _elementDescendedFromClass(element, className) {
return this.descendedFromClass(element, className, return this.descendedFromClass(element, className,
this.diffBuilder.diffElement); this.diffBuilder.diffElement);
}, }
_handleCopy(e) { _handleCopy(e) {
let commentSelected = false; let commentSelected = false;
@@ -175,7 +186,7 @@
e.clipboardData.setData('Text', text); e.clipboardData.setData('Text', text);
e.preventDefault(); e.preventDefault();
} }
}, }
/** /**
* For Polymer 2, use shadowRoot.getSelection instead. * For Polymer 2, use shadowRoot.getSelection instead.
@@ -186,7 +197,7 @@
diffHost.shadowRoot && diffHost.shadowRoot &&
diffHost.shadowRoot.getSelection(); diffHost.shadowRoot.getSelection();
return selection ? selection: window.getSelection(); return selection ? selection: window.getSelection();
}, }
/** /**
* Get the text of the current selection. If commentSelected is * Get the text of the current selection. If commentSelected is
@@ -225,7 +236,7 @@
return this._getRangeFromDiff(startLineNum, range.startOffset, endLineNum, return this._getRangeFromDiff(startLineNum, range.startOffset, endLineNum,
range.endOffset, side); range.endOffset, side);
}, }
/** /**
* Query the diff object for the selected lines. * Query the diff object for the selected lines.
@@ -247,7 +258,7 @@
lines[0] = lines[0].substring(startOffset); lines[0] = lines[0].substring(startOffset);
} }
return lines.join('\n'); return lines.join('\n');
}, }
/** /**
* Query the diff object for the lines from a particular side. * Query the diff object for the lines from a particular side.
@@ -270,7 +281,7 @@
} }
this._linesCache[side] = lines; this._linesCache[side] = lines;
return lines; return lines;
}, }
/** /**
* Query the diffElement for comments and check whether they lie inside the * Query the diffElement for comments and check whether they lie inside the
@@ -308,7 +319,7 @@
} }
return content.join('\n'); return content.join('\n');
}, }
/** /**
* Given a DOM node, a selection, and a selection range, recursively get all * Given a DOM node, a selection, and a selection range, recursively get all
@@ -338,6 +349,8 @@
} }
} }
return text; return text;
}, }
}); }
customElements.define(GrDiffSelection.is, GrDiffSelection);
})(); })();

View File

@@ -33,9 +33,23 @@
UNIFIED: 'UNIFIED_DIFF', UNIFIED: 'UNIFIED_DIFF',
}; };
Polymer({ /**
is: 'gr-diff-view', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.PathListMixin
* @appliesMixin Gerrit.RESTClientMixin
*/
class GrDiffView extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.PathListBehavior,
Gerrit.RESTClientBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-diff-view'; }
/** /**
* Fired when the title of the page should change. * Fired when the title of the page should change.
* *
@@ -48,7 +62,8 @@
* @event show-alert * @event show-alert
*/ */
properties: { static get properties() {
return {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -177,25 +192,22 @@
type: Object, type: Object,
value: () => new Set(), value: () => new Set(),
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.PathListBehavior,
Gerrit.RESTClientBehavior,
],
observers: [
'_getProjectConfig(_change.project)', '_getProjectConfig(_change.project)',
'_getFiles(_changeNum, _patchRange.*)', '_getFiles(_changeNum, _patchRange.*)',
'_setReviewedObserver(_loggedIn, params.*, _prefs)', '_setReviewedObserver(_loggedIn, params.*, _prefs)',
], ];
}
keyBindings: { get keyBindings() {
return {
esc: '_handleEscKey', esc: '_handleEscKey',
}, };
}
keyboardShortcuts() { keyboardShortcuts() {
return { return {
@@ -230,37 +242,38 @@
[this.Shortcut.EXPAND_ALL_COMMENT_THREADS]: null, [this.Shortcut.EXPAND_ALL_COMMENT_THREADS]: null,
[this.Shortcut.COLLAPSE_ALL_COMMENT_THREADS]: null, [this.Shortcut.COLLAPSE_ALL_COMMENT_THREADS]: null,
}; };
}, }
attached() { attached() {
super.attached();
this._getLoggedIn().then(loggedIn => { this._getLoggedIn().then(loggedIn => {
this._loggedIn = loggedIn; this._loggedIn = loggedIn;
}); });
this.$.cursor.push('diffs', this.$.diffHost); this.$.cursor.push('diffs', this.$.diffHost);
}, }
_getLoggedIn() { _getLoggedIn() {
return this.$.restAPI.getLoggedIn(); return this.$.restAPI.getLoggedIn();
}, }
_getProjectConfig(project) { _getProjectConfig(project) {
return this.$.restAPI.getProjectConfig(project).then( return this.$.restAPI.getProjectConfig(project).then(
config => { config => {
this._projectConfig = config; this._projectConfig = config;
}); });
}, }
_getChangeDetail(changeNum) { _getChangeDetail(changeNum) {
return this.$.restAPI.getDiffChangeDetail(changeNum).then(change => { return this.$.restAPI.getDiffChangeDetail(changeNum).then(change => {
this._change = change; this._change = change;
return change; return change;
}); });
}, }
_getChangeEdit(changeNum) { _getChangeEdit(changeNum) {
return this.$.restAPI.getChangeEdit(this._changeNum); return this.$.restAPI.getChangeEdit(this._changeNum);
}, }
_getFiles(changeNum, patchRangeRecord) { _getFiles(changeNum, patchRangeRecord) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -274,25 +287,25 @@
changeNum, patchRange).then(files => { changeNum, patchRange).then(files => {
this._fileList = files; this._fileList = files;
}); });
}, }
_getDiffPreferences() { _getDiffPreferences() {
return this.$.restAPI.getDiffPreferences().then(prefs => { return this.$.restAPI.getDiffPreferences().then(prefs => {
this._prefs = prefs; this._prefs = prefs;
}); });
}, }
_getPreferences() { _getPreferences() {
return this.$.restAPI.getPreferences(); return this.$.restAPI.getPreferences();
}, }
_getWindowWidth() { _getWindowWidth() {
return window.innerWidth; return window.innerWidth;
}, }
_handleReviewedChange(e) { _handleReviewedChange(e) {
this._setReviewed(Polymer.dom(e).rootTarget.checked); this._setReviewed(Polymer.dom(e).rootTarget.checked);
}, }
_setReviewed(reviewed) { _setReviewed(reviewed) {
if (this._editMode) { return; } if (this._editMode) { return; }
@@ -301,12 +314,12 @@
this.fire('show-alert', {message: ERR_REVIEW_STATUS}); this.fire('show-alert', {message: ERR_REVIEW_STATUS});
throw err; throw err;
}); });
}, }
_saveReviewedState(reviewed) { _saveReviewedState(reviewed) {
return this.$.restAPI.saveFileReviewed(this._changeNum, return this.$.restAPI.saveFileReviewed(this._changeNum,
this._patchRange.patchNum, this._path, reviewed); this._patchRange.patchNum, this._path, reviewed);
}, }
_handleToggleFileReviewed(e) { _handleToggleFileReviewed(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -314,7 +327,7 @@
e.preventDefault(); e.preventDefault();
this._setReviewed(!this.$.reviewed.checked); this._setReviewed(!this.$.reviewed.checked);
}, }
_handleEscKey(e) { _handleEscKey(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -322,21 +335,21 @@
e.preventDefault(); e.preventDefault();
this.$.diffHost.displayLine = false; this.$.diffHost.displayLine = false;
}, }
_handleLeftPane(e) { _handleLeftPane(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
e.preventDefault(); e.preventDefault();
this.$.cursor.moveLeft(); this.$.cursor.moveLeft();
}, }
_handleRightPane(e) { _handleRightPane(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
e.preventDefault(); e.preventDefault();
this.$.cursor.moveRight(); this.$.cursor.moveRight();
}, }
_handlePrevLineOrFileWithComments(e) { _handlePrevLineOrFileWithComments(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -350,7 +363,7 @@
e.preventDefault(); e.preventDefault();
this.$.diffHost.displayLine = true; this.$.diffHost.displayLine = true;
this.$.cursor.moveUp(); this.$.cursor.moveUp();
}, }
_handleNextLineOrFileWithComments(e) { _handleNextLineOrFileWithComments(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -364,7 +377,7 @@
e.preventDefault(); e.preventDefault();
this.$.diffHost.displayLine = true; this.$.diffHost.displayLine = true;
this.$.cursor.moveDown(); this.$.cursor.moveDown();
}, }
_moveToPreviousFileWithComment() { _moveToPreviousFileWithComment() {
if (!this._commentSkips) { return; } if (!this._commentSkips) { return; }
@@ -378,7 +391,7 @@
Gerrit.Nav.navigateToDiff(this._change, this._commentSkips.previous, Gerrit.Nav.navigateToDiff(this._change, this._commentSkips.previous,
this._patchRange.patchNum, this._patchRange.basePatchNum); this._patchRange.patchNum, this._patchRange.basePatchNum);
}, }
_moveToNextFileWithComment() { _moveToNextFileWithComment() {
if (!this._commentSkips) { return; } if (!this._commentSkips) { return; }
@@ -391,14 +404,14 @@
Gerrit.Nav.navigateToDiff(this._change, this._commentSkips.next, Gerrit.Nav.navigateToDiff(this._change, this._commentSkips.next,
this._patchRange.patchNum, this._patchRange.basePatchNum); this._patchRange.patchNum, this._patchRange.basePatchNum);
}, }
_handleNewComment(e) { _handleNewComment(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
this.modifierPressed(e)) { return; } this.modifierPressed(e)) { return; }
e.preventDefault(); e.preventDefault();
this.$.cursor.createCommentInPlace(); this.$.cursor.createCommentInPlace();
}, }
_handlePrevFile(e) { _handlePrevFile(e) {
// Check for meta key to avoid overriding native chrome shortcut. // Check for meta key to avoid overriding native chrome shortcut.
@@ -407,7 +420,7 @@
e.preventDefault(); e.preventDefault();
this._navToFile(this._path, this._fileList, -1); this._navToFile(this._path, this._fileList, -1);
}, }
_handleNextFile(e) { _handleNextFile(e) {
// Check for meta key to avoid overriding native chrome shortcut. // Check for meta key to avoid overriding native chrome shortcut.
@@ -416,7 +429,7 @@
e.preventDefault(); e.preventDefault();
this._navToFile(this._path, this._fileList, 1); this._navToFile(this._path, this._fileList, 1);
}, }
_handleNextChunkOrCommentThread(e) { _handleNextChunkOrCommentThread(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -428,7 +441,7 @@
if (this.modifierPressed(e)) { return; } if (this.modifierPressed(e)) { return; }
this.$.cursor.moveToNextChunk(); this.$.cursor.moveToNextChunk();
} }
}, }
_handlePrevChunkOrCommentThread(e) { _handlePrevChunkOrCommentThread(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -440,7 +453,7 @@
if (this.modifierPressed(e)) { return; } if (this.modifierPressed(e)) { return; }
this.$.cursor.moveToPreviousChunk(); this.$.cursor.moveToPreviousChunk();
} }
}, }
_handleOpenReplyDialogOrToggleLeftPane(e) { _handleOpenReplyDialogOrToggleLeftPane(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -458,7 +471,7 @@
this.set('changeViewState.showReplyDialog', true); this.set('changeViewState.showReplyDialog', true);
e.preventDefault(); e.preventDefault();
this._navToChangeView(); this._navToChangeView();
}, }
_handleUpToChange(e) { _handleUpToChange(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -466,7 +479,7 @@
e.preventDefault(); e.preventDefault();
this._navToChangeView(); this._navToChangeView();
}, }
_handleCommaKey(e) { _handleCommaKey(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -475,7 +488,7 @@
e.preventDefault(); e.preventDefault();
this.$.diffPreferencesDialog.open(); this.$.diffPreferencesDialog.open();
}, }
_handleToggleDiffMode(e) { _handleToggleDiffMode(e) {
if (this.shouldSuppressKeyboardShortcut(e) || if (this.shouldSuppressKeyboardShortcut(e) ||
@@ -487,7 +500,7 @@
} else { } else {
this.$.modeSelect.setMode(DiffViewMode.SIDE_BY_SIDE); this.$.modeSelect.setMode(DiffViewMode.SIDE_BY_SIDE);
} }
}, }
_navToChangeView() { _navToChangeView() {
if (!this._changeNum || !this._patchRange.patchNum) { return; } if (!this._changeNum || !this._patchRange.patchNum) { return; }
@@ -495,7 +508,7 @@
this._change, this._change,
this._patchRange, this._patchRange,
this._change && this._change.revisions); this._change && this._change.revisions);
}, }
_navToFile(path, fileList, direction) { _navToFile(path, fileList, direction) {
const newPath = this._getNavLinkPath(path, fileList, direction); const newPath = this._getNavLinkPath(path, fileList, direction);
@@ -511,7 +524,7 @@
Gerrit.Nav.navigateToDiff(this._change, newPath.path, Gerrit.Nav.navigateToDiff(this._change, newPath.path,
this._patchRange.patchNum, this._patchRange.basePatchNum); this._patchRange.patchNum, this._patchRange.basePatchNum);
}, }
/** /**
* @param {?string} path The path of the current file being shown. * @param {?string} path The path of the current file being shown.
@@ -535,7 +548,7 @@
this._change && this._change.revisions); this._change && this._change.revisions);
} }
return this._getDiffUrl(this._change, this._patchRange, newPath.path); return this._getDiffUrl(this._change, this._patchRange, newPath.path);
}, }
/** /**
* Gives an object representing the target of navigating either left or * Gives an object representing the target of navigating either left or
@@ -575,7 +588,7 @@
} }
return {path: fileList[idx]}; return {path: fileList[idx]};
}, }
_getReviewedFiles(changeNum, patchNum) { _getReviewedFiles(changeNum, patchNum) {
return this.$.restAPI.getReviewedFiles(changeNum, patchNum) return this.$.restAPI.getReviewedFiles(changeNum, patchNum)
@@ -583,13 +596,13 @@
this._reviewedFiles = new Set(files); this._reviewedFiles = new Set(files);
return this._reviewedFiles; return this._reviewedFiles;
}); });
}, }
_getReviewedStatus(editMode, changeNum, patchNum, path) { _getReviewedStatus(editMode, changeNum, patchNum, path) {
if (editMode) { return Promise.resolve(false); } if (editMode) { return Promise.resolve(false); }
return this._getReviewedFiles(changeNum, patchNum) return this._getReviewedFiles(changeNum, patchNum)
.then(files => files.has(path)); .then(files => files.has(path));
}, }
_paramsChanged(value) { _paramsChanged(value) {
if (value.view !== Gerrit.Nav.View.DIFF) { return; } if (value.view !== Gerrit.Nav.View.DIFF) { return; }
@@ -676,7 +689,7 @@
// If diff view displayed has not ended yet, it ends here. // If diff view displayed has not ended yet, it ends here.
this.$.reporting.diffViewDisplayed(); this.$.reporting.diffViewDisplayed();
}); });
}, }
_changeViewStateChanged(changeViewState) { _changeViewStateChanged(changeViewState) {
if (changeViewState.diffMode === null) { if (changeViewState.diffMode === null) {
@@ -685,7 +698,7 @@
this.set('changeViewState.diffMode', prefs.default_diff_view); this.set('changeViewState.diffMode', prefs.default_diff_view);
}); });
} }
}, }
_setReviewedObserver(_loggedIn, paramsRecord, _prefs) { _setReviewedObserver(_loggedIn, paramsRecord, _prefs) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -709,7 +722,7 @@
if (params.view === Gerrit.Nav.View.DIFF) { if (params.view === Gerrit.Nav.View.DIFF) {
this._setReviewed(true); this._setReviewed(true);
} }
}, }
/** /**
* If the params specify a diff address then configure the diff cursor. * If the params specify a diff address then configure the diff cursor.
@@ -722,14 +735,14 @@
this.$.cursor.side = DiffSides.RIGHT; this.$.cursor.side = DiffSides.RIGHT;
} }
this.$.cursor.initialLineNumber = params.lineNum; this.$.cursor.initialLineNumber = params.lineNum;
}, }
_getLineOfInterest(params) { _getLineOfInterest(params) {
// If there is a line number specified, pass it along to the diff so that // If there is a line number specified, pass it along to the diff so that
// it will not get collapsed. // it will not get collapsed.
if (!params.lineNum) { return null; } if (!params.lineNum) { return null; }
return {number: params.lineNum, leftSide: params.leftSide}; return {number: params.lineNum, leftSide: params.leftSide};
}, }
_pathChanged(path) { _pathChanged(path) {
if (path) { if (path) {
@@ -741,7 +754,7 @@
this.set('changeViewState.selectedFileIndex', this.set('changeViewState.selectedFileIndex',
this._fileList.indexOf(path)); this._fileList.indexOf(path));
}, }
_getDiffUrl(change, patchRange, path) { _getDiffUrl(change, patchRange, path) {
if ([change, patchRange, path].some(arg => arg === undefined)) { if ([change, patchRange, path].some(arg => arg === undefined)) {
@@ -749,7 +762,7 @@
} }
return Gerrit.Nav.getUrlForDiff(change, path, patchRange.patchNum, return Gerrit.Nav.getUrlForDiff(change, path, patchRange.patchNum,
patchRange.basePatchNum); patchRange.basePatchNum);
}, }
_patchRangeStr(patchRange) { _patchRangeStr(patchRange) {
let patchStr = patchRange.patchNum; let patchStr = patchRange.patchNum;
@@ -758,7 +771,7 @@
patchStr = patchRange.basePatchNum + '..' + patchRange.patchNum; patchStr = patchRange.basePatchNum + '..' + patchRange.patchNum;
} }
return patchStr; return patchStr;
}, }
/** /**
* When the latest patch of the change is selected (and there is no base * When the latest patch of the change is selected (and there is no base
@@ -782,7 +795,7 @@
basePatchNum = patchRange.basePatchNum; basePatchNum = patchRange.basePatchNum;
} }
return {patchNum, basePatchNum}; return {patchNum, basePatchNum};
}, }
_getChangePath(change, patchRange, revisions) { _getChangePath(change, patchRange, revisions) {
if ([change, patchRange].some(arg => arg === undefined)) { if ([change, patchRange].some(arg => arg === undefined)) {
@@ -791,16 +804,16 @@
const range = this._getChangeUrlRange(patchRange, revisions); const range = this._getChangeUrlRange(patchRange, revisions);
return Gerrit.Nav.getUrlForChange(change, range.patchNum, return Gerrit.Nav.getUrlForChange(change, range.patchNum,
range.basePatchNum); range.basePatchNum);
}, }
_navigateToChange(change, patchRange, revisions) { _navigateToChange(change, patchRange, revisions) {
const range = this._getChangeUrlRange(patchRange, revisions); const range = this._getChangeUrlRange(patchRange, revisions);
Gerrit.Nav.navigateToChange(change, range.patchNum, range.basePatchNum); Gerrit.Nav.navigateToChange(change, range.patchNum, range.basePatchNum);
}, }
_computeChangePath(change, patchRangeRecord, revisions) { _computeChangePath(change, patchRangeRecord, revisions) {
return this._getChangePath(change, patchRangeRecord.base, revisions); return this._getChangePath(change, patchRangeRecord.base, revisions);
}, }
_formatFilesForDropdown(fileList, patchNum, changeComments) { _formatFilesForDropdown(fileList, patchNum, changeComments) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -824,7 +837,7 @@
}); });
} }
return dropdownContent; return dropdownContent;
}, }
_computeCommentString(changeComments, patchNum, path) { _computeCommentString(changeComments, patchNum, path) {
const unresolvedCount = changeComments.computeUnresolvedNum(patchNum, const unresolvedCount = changeComments.computeUnresolvedNum(patchNum,
@@ -840,11 +853,11 @@
(commentString && unresolvedString ? ', ' : '') + (commentString && unresolvedString ? ', ' : '') +
// Add parentheses around unresolved if it exists. // Add parentheses around unresolved if it exists.
(unresolvedString ? `${unresolvedString}` : ''); (unresolvedString ? `${unresolvedString}` : '');
}, }
_computePrefsButtonHidden(prefs, prefsDisabled) { _computePrefsButtonHidden(prefs, prefsDisabled) {
return prefsDisabled || !prefs; return prefsDisabled || !prefs;
}, }
_handleFileChange(e) { _handleFileChange(e) {
// This is when it gets set initially. // This is when it gets set initially.
@@ -855,7 +868,7 @@
Gerrit.Nav.navigateToDiff(this._change, path, this._patchRange.patchNum, Gerrit.Nav.navigateToDiff(this._change, path, this._patchRange.patchNum,
this._patchRange.basePatchNum); this._patchRange.basePatchNum);
}, }
_handleFileTap(e) { _handleFileTap(e) {
// async is needed so that that the click event is fired before the // async is needed so that that the click event is fired before the
@@ -863,7 +876,7 @@
this.async(() => { this.async(() => {
this.$.dropdown.close(); this.$.dropdown.close();
}, 1); }, 1);
}, }
_handlePatchChange(e) { _handlePatchChange(e) {
const {basePatchNum, patchNum} = e.detail; const {basePatchNum, patchNum} = e.detail;
@@ -871,12 +884,12 @@
this.patchNumEquals(patchNum, this._patchRange.patchNum)) { return; } this.patchNumEquals(patchNum, this._patchRange.patchNum)) { return; }
Gerrit.Nav.navigateToDiff( Gerrit.Nav.navigateToDiff(
this._change, this._path, patchNum, basePatchNum); this._change, this._path, patchNum, basePatchNum);
}, }
_handlePrefsTap(e) { _handlePrefsTap(e) {
e.preventDefault(); e.preventDefault();
this.$.diffPreferencesDialog.open(); this.$.diffPreferencesDialog.open();
}, }
/** /**
* _getDiffViewMode: Get the diff view (side-by-side or unified) based on * _getDiffViewMode: Get the diff view (side-by-side or unified) based on
@@ -901,11 +914,11 @@
} else { } else {
return 'SIDE_BY_SIDE'; return 'SIDE_BY_SIDE';
} }
}, }
_computeModeSelectHideClass(isImageDiff) { _computeModeSelectHideClass(isImageDiff) {
return isImageDiff ? 'hide' : ''; return isImageDiff ? 'hide' : '';
}, }
_onLineSelected(e, detail) { _onLineSelected(e, detail) {
this.$.cursor.moveToLineNumber(detail.number, detail.side); this.$.cursor.moveToLineNumber(detail.number, detail.side);
@@ -917,7 +930,7 @@
this._change.project, this._path, this._patchRange.patchNum, this._change.project, this._path, this._patchRange.patchNum,
this._patchRange.basePatchNum, number, leftSide); this._patchRange.basePatchNum, number, leftSide);
history.replaceState(null, '', url); history.replaceState(null, '', url);
}, }
_computeDownloadDropdownLinks( _computeDownloadDropdownLinks(
project, changeNum, patchRange, path, diff) { project, changeNum, patchRange, path, diff) {
@@ -956,7 +969,7 @@
} }
return links; return links;
}, }
_computeDownloadFileLink( _computeDownloadFileLink(
project, changeNum, patchRange, path, isBase) { project, changeNum, patchRange, path, isBase) {
@@ -976,13 +989,13 @@
} }
return url; return url;
}, }
_computeDownloadPatchLink(project, changeNum, patchRange, path) { _computeDownloadPatchLink(project, changeNum, patchRange, path) {
let url = this.changeBaseURL(project, changeNum, patchRange.patchNum); let url = this.changeBaseURL(project, changeNum, patchRange.patchNum);
url += '/patch?zip&path=' + encodeURIComponent(path); url += '/patch?zip&path=' + encodeURIComponent(path);
return url; return url;
}, }
_loadComments() { _loadComments() {
return this.$.commentAPI.loadAll(this._changeNum).then(comments => { return this.$.commentAPI.loadAll(this._changeNum).then(comments => {
@@ -992,20 +1005,20 @@
this._commentsForDiff = this._getCommentsForPath(this._path, this._commentsForDiff = this._getCommentsForPath(this._path,
this._patchRange, this._projectConfig); this._patchRange, this._projectConfig);
}); });
}, }
_getPaths(patchRange) { _getPaths(patchRange) {
return this._changeComments.getPaths(patchRange); return this._changeComments.getPaths(patchRange);
}, }
_getCommentsForPath(path, patchRange, projectConfig) { _getCommentsForPath(path, patchRange, projectConfig) {
return this._changeComments.getCommentsBySideForPath(path, patchRange, return this._changeComments.getCommentsBySideForPath(path, patchRange,
projectConfig); projectConfig);
}, }
_getDiffDrafts() { _getDiffDrafts() {
return this.$.restAPI.getDiffDrafts(this._changeNum); return this.$.restAPI.getDiffDrafts(this._changeNum);
}, }
_computeCommentSkips(commentMap, fileList, path) { _computeCommentSkips(commentMap, fileList, path) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -1038,13 +1051,13 @@
} }
return skips; return skips;
}, }
_computeDiffClass(panelFloatingDisabled) { _computeDiffClass(panelFloatingDisabled) {
if (panelFloatingDisabled) { if (panelFloatingDisabled) {
return 'noOverflow'; return 'noOverflow';
} }
}, }
/** /**
* @param {!Object} patchRangeRecord * @param {!Object} patchRangeRecord
@@ -1052,19 +1065,19 @@
_computeEditMode(patchRangeRecord) { _computeEditMode(patchRangeRecord) {
const patchRange = patchRangeRecord.base || {}; const patchRange = patchRangeRecord.base || {};
return this.patchNumEquals(patchRange.patchNum, this.EDIT_NAME); return this.patchNumEquals(patchRange.patchNum, this.EDIT_NAME);
}, }
/** /**
* @param {boolean} editMode * @param {boolean} editMode
*/ */
_computeContainerClass(editMode) { _computeContainerClass(editMode) {
return editMode ? 'editMode' : ''; return editMode ? 'editMode' : '';
}, }
_computeBlameToggleLabel(loaded, loading) { _computeBlameToggleLabel(loaded, loading) {
if (loaded) { return 'Hide blame'; } if (loaded) { return 'Hide blame'; }
return 'Show blame'; return 'Show blame';
}, }
/** /**
* Load and display blame information if it has not already been loaded. * Load and display blame information if it has not already been loaded.
@@ -1086,15 +1099,15 @@
.catch(() => { .catch(() => {
this._isBlameLoading = false; this._isBlameLoading = false;
}); });
}, }
_computeBlameLoaderClass(isImageDiff) { _computeBlameLoaderClass(isImageDiff) {
return !isImageDiff ? 'show' : ''; return !isImageDiff ? 'show' : '';
}, }
_getRevisionInfo(change) { _getRevisionInfo(change) {
return new Gerrit.RevisionInfo(change); return new Gerrit.RevisionInfo(change);
}, }
_computeFileNum(file, files) { _computeFileNum(file, files) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -1103,7 +1116,7 @@
} }
return files.findIndex(({value}) => value === file) + 1; return files.findIndex(({value}) => value === file) + 1;
}, }
/** /**
* @param {number} fileNum * @param {number} fileNum
@@ -1115,16 +1128,16 @@
return 'show'; return 'show';
} }
return ''; return '';
}, }
_handleExpandAllDiffContext(e) { _handleExpandAllDiffContext(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
this.$.diffHost.expandAllContext(); this.$.diffHost.expandAllContext();
}, }
_computeDiffPrefsDisabled(disableDiffPrefs, loggedIn) { _computeDiffPrefsDisabled(disableDiffPrefs, loggedIn) {
return disableDiffPrefs || !loggedIn; return disableDiffPrefs || !loggedIn;
}, }
_handleNextUnreviewedFile(e) { _handleNextUnreviewedFile(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
@@ -1135,10 +1148,12 @@
.filter(file => .filter(file =>
(file === this._path || !this._reviewedFiles.has(file))); (file === this._path || !this._reviewedFiles.has(file)));
this._navToFile(this._path, unreviewedFiles, 1); this._navToFile(this._path, unreviewedFiles, 1);
}, }
_handleReloadingDiffPreference() { _handleReloadingDiffPreference() {
this._getDiffPreferences(); this._getDiffPreferences();
}, }
}); }
customElements.define(GrDiffView.is, GrDiffView);
})(); })();

View File

@@ -91,9 +91,17 @@
const RENDER_DIFF_TABLE_DEBOUNCE_NAME = 'renderDiffTable'; const RENDER_DIFF_TABLE_DEBOUNCE_NAME = 'renderDiffTable';
Polymer({ /**
is: 'gr-diff', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.PatchSetMixin
*/
class GrDiff extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.PatchSetBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-diff'; }
/** /**
* Fired when the user selects a line. * Fired when the user selects a line.
* @event line-selected * @event line-selected
@@ -126,7 +134,8 @@
* @event diff-context-expanded * @event diff-context-expanded
*/ */
properties: { static get properties() {
return {
changeNum: String, changeNum: String,
noAutoRender: { noAutoRender: {
type: Boolean, type: Boolean,
@@ -263,36 +272,39 @@
/** Set by Polymer. */ /** Set by Polymer. */
isAttached: Boolean, isAttached: Boolean,
layers: Array, layers: Array,
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
Gerrit.PatchSetBehavior,
],
listeners: {
'create-range-comment': '_handleCreateRangeComment',
'render-content': '_handleRenderContent',
},
observers: [
'_enableSelectionObserver(loggedIn, isAttached)', '_enableSelectionObserver(loggedIn, isAttached)',
], ];
}
created() {
super.created();
this.addEventListener('create-range-comment',
e => this._handleCreateRangeComment(e));
this.addEventListener('render-content',
() => this._handleRenderContent());
}
attached() { attached() {
super.attached();
this._observeNodes(); this._observeNodes();
}, }
detached() { detached() {
super.detached();
this._unobserveIncrementalNodes(); this._unobserveIncrementalNodes();
this._unobserveNodes(); this._unobserveNodes();
}, }
showNoChangeMessage(loading, prefs, diffLength) { showNoChangeMessage(loading, prefs, diffLength) {
return !loading && return !loading &&
prefs && prefs.ignore_whitespace !== 'IGNORE_NONE' prefs && prefs.ignore_whitespace !== 'IGNORE_NONE'
&& diffLength === 0; && diffLength === 0;
}, }
_enableSelectionObserver(loggedIn, isAttached) { _enableSelectionObserver(loggedIn, isAttached) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -307,7 +319,7 @@
this.unlisten(document, 'selectionchange', '_handleSelectionChange'); this.unlisten(document, 'selectionchange', '_handleSelectionChange');
this.unlisten(document, 'mouseup', '_handleMouseUp'); this.unlisten(document, 'mouseup', '_handleMouseUp');
} }
}, }
_handleSelectionChange() { _handleSelectionChange() {
// Because of shadow DOM selections, we handle the selectionchange here, // Because of shadow DOM selections, we handle the selectionchange here,
@@ -315,7 +327,7 @@
// corresponding range is determined and normalized. // corresponding range is determined and normalized.
const selection = this._getShadowOrDocumentSelection(); const selection = this._getShadowOrDocumentSelection();
this.$.highlights.handleSelectionChange(selection, false); this.$.highlights.handleSelectionChange(selection, false);
}, }
_handleMouseUp(e) { _handleMouseUp(e) {
// To handle double-click outside of text creating comments, we check on // To handle double-click outside of text creating comments, we check on
@@ -323,7 +335,7 @@
// can't do that on selection change since the user may still be dragging. // can't do that on selection change since the user may still be dragging.
const selection = this._getShadowOrDocumentSelection(); const selection = this._getShadowOrDocumentSelection();
this.$.highlights.handleSelectionChange(selection, true); this.$.highlights.handleSelectionChange(selection, true);
}, }
/** Gets the current selection, preferring the shadow DOM selection. */ /** Gets the current selection, preferring the shadow DOM selection. */
_getShadowOrDocumentSelection() { _getShadowOrDocumentSelection() {
@@ -334,7 +346,7 @@
return this.root.getSelection ? return this.root.getSelection ?
this.root.getSelection() : this.root.getSelection() :
document.getSelection(); document.getSelection();
}, }
_observeNodes() { _observeNodes() {
this._nodeObserver = Polymer.dom(this).observeNodes(info => { this._nodeObserver = Polymer.dom(this).observeNodes(info => {
@@ -343,7 +355,7 @@
this._updateRanges(addedThreadEls, removedThreadEls); this._updateRanges(addedThreadEls, removedThreadEls);
this._redispatchHoverEvents(addedThreadEls); this._redispatchHoverEvents(addedThreadEls);
}); });
}, }
_updateRanges(addedThreadEls, removedThreadEls) { _updateRanges(addedThreadEls, removedThreadEls) {
function commentRangeFromThreadEl(threadEl) { function commentRangeFromThreadEl(threadEl) {
@@ -369,7 +381,7 @@
if (addedCommentRanges && addedCommentRanges.length) { if (addedCommentRanges && addedCommentRanges.length) {
this.push('_commentRanges', ...addedCommentRanges); this.push('_commentRanges', ...addedCommentRanges);
} }
}, }
/** /**
* The key locations based on the comments and line of interests, * The key locations based on the comments and line of interests,
@@ -400,7 +412,7 @@
} }
} }
return keyLocations; return keyLocations;
}, }
// Dispatch events that are handled by the gr-diff-highlight. // Dispatch events that are handled by the gr-diff-highlight.
_redispatchHoverEvents(addedThreadEls) { _redispatchHoverEvents(addedThreadEls) {
@@ -414,13 +426,13 @@
'comment-thread-mouseleave', {bubbles: true, composed: true})); 'comment-thread-mouseleave', {bubbles: true, composed: true}));
}); });
} }
}, }
/** Cancel any remaining diff builder rendering work. */ /** Cancel any remaining diff builder rendering work. */
cancel() { cancel() {
this.$.diffBuilder.cancel(); this.$.diffBuilder.cancel();
this.cancelDebouncer(RENDER_DIFF_TABLE_DEBOUNCE_NAME); this.cancelDebouncer(RENDER_DIFF_TABLE_DEBOUNCE_NAME);
}, }
/** @return {!Array<!HTMLElement>} */ /** @return {!Array<!HTMLElement>} */
getCursorStops() { getCursorStops() {
@@ -430,16 +442,16 @@
return Array.from( return Array.from(
Polymer.dom(this.root).querySelectorAll('.diff-row')); Polymer.dom(this.root).querySelectorAll('.diff-row'));
}, }
/** @return {boolean} */ /** @return {boolean} */
isRangeSelected() { isRangeSelected() {
return !!this.$.highlights.selectedRange; return !!this.$.highlights.selectedRange;
}, }
toggleLeftDiff() { toggleLeftDiff() {
this.toggleClass('no-left'); this.toggleClass('no-left');
}, }
_blameChanged(newValue) { _blameChanged(newValue) {
this.$.diffBuilder.setBlame(newValue); this.$.diffBuilder.setBlame(newValue);
@@ -448,7 +460,7 @@
} else { } else {
this.classList.remove('showBlame'); this.classList.remove('showBlame');
} }
}, }
/** @return {string} */ /** @return {string} */
_computeContainerClass(loggedIn, viewMode, displayLine) { _computeContainerClass(loggedIn, viewMode, displayLine) {
@@ -473,7 +485,7 @@
classes.push('displayLine'); classes.push('displayLine');
} }
return classes.join(' '); return classes.join(' ');
}, }
_handleTap(e) { _handleTap(e) {
const el = Polymer.dom(e).localTarget; const el = Polymer.dom(e).localTarget;
@@ -491,7 +503,7 @@
const target = this.$.diffBuilder.getLineElByChild(el); const target = this.$.diffBuilder.getLineElByChild(el);
if (target) { this._selectLine(target); } if (target) { this._selectLine(target); }
} }
}, }
_selectLine(el) { _selectLine(el) {
this.fire('line-selected', { this.fire('line-selected', {
@@ -499,7 +511,7 @@
number: el.getAttribute('data-value'), number: el.getAttribute('data-value'),
path: this.path, path: this.path,
}); });
}, }
addDraftAtLine(el) { addDraftAtLine(el) {
this._selectLine(el); this._selectLine(el);
@@ -515,7 +527,7 @@
} }
} }
this._createComment(el, lineNum); this._createComment(el, lineNum);
}, }
createRangeComment() { createRangeComment() {
if (!this.isRangeSelected()) { if (!this.isRangeSelected()) {
@@ -523,7 +535,7 @@
} }
const {side, range} = this.$.highlights.selectedRange; const {side, range} = this.$.highlights.selectedRange;
this._createCommentForSelection(side, range); this._createCommentForSelection(side, range);
}, }
_createCommentForSelection(side, range) { _createCommentForSelection(side, range) {
const lineNum = range.end_line; const lineNum = range.end_line;
@@ -531,13 +543,13 @@
if (this._isValidElForComment(lineEl)) { if (this._isValidElForComment(lineEl)) {
this._createComment(lineEl, lineNum, side, range); this._createComment(lineEl, lineNum, side, range);
} }
}, }
_handleCreateRangeComment(e) { _handleCreateRangeComment(e) {
const range = e.detail.range; const range = e.detail.range;
const side = e.detail.side; const side = e.detail.side;
this._createCommentForSelection(side, range); this._createCommentForSelection(side, range);
}, }
/** @return {boolean} */ /** @return {boolean} */
_isValidElForComment(el) { _isValidElForComment(el) {
@@ -561,7 +573,7 @@
return false; return false;
} }
return true; return true;
}, }
/** /**
* @param {!Object} lineEl * @param {!Object} lineEl
@@ -589,11 +601,11 @@
range, range,
}, },
})); }));
}, }
_getThreadGroupForLine(contentEl) { _getThreadGroupForLine(contentEl) {
return contentEl.querySelector('.thread-group'); return contentEl.querySelector('.thread-group');
}, }
/** /**
* Gets or creates a comment thread group for a specific line and side on a * Gets or creates a comment thread group for a specific line and side on a
@@ -612,7 +624,7 @@
contentEl.appendChild(threadGroupEl); contentEl.appendChild(threadGroupEl);
} }
return threadGroupEl; return threadGroupEl;
}, }
/** /**
* The value to be used for the patch number of new comments created at the * The value to be used for the patch number of new comments created at the
@@ -638,7 +650,7 @@
patchNum = this.patchRange.basePatchNum; patchNum = this.patchRange.basePatchNum;
} }
return patchNum; return patchNum;
}, }
/** @return {boolean} */ /** @return {boolean} */
_getIsParentCommentByLineAndContent(lineEl, contentEl) { _getIsParentCommentByLineAndContent(lineEl, contentEl) {
@@ -649,7 +661,7 @@
return true; return true;
} }
return false; return false;
}, }
/** @return {string} */ /** @return {string} */
_getCommentSideByLineAndContent(lineEl, contentEl) { _getCommentSideByLineAndContent(lineEl, contentEl) {
@@ -659,7 +671,7 @@
side = 'left'; side = 'left';
} }
return side; return side;
}, }
_prefsObserver(newPrefs, oldPrefs) { _prefsObserver(newPrefs, oldPrefs) {
// Scan the preference objects one level deep to see if they differ. // Scan the preference objects one level deep to see if they differ.
@@ -675,16 +687,16 @@
if (differ) { if (differ) {
this._prefsChanged(newPrefs); this._prefsChanged(newPrefs);
} }
}, }
_pathObserver() { _pathObserver() {
// Call _prefsChanged(), because line-limit style value depends on path. // Call _prefsChanged(), because line-limit style value depends on path.
this._prefsChanged(this.prefs); this._prefsChanged(this.prefs);
}, }
_viewModeObserver() { _viewModeObserver() {
this._prefsChanged(this.prefs); this._prefsChanged(this.prefs);
}, }
/** @param {boolean} newValue */ /** @param {boolean} newValue */
_loadingChanged(newValue) { _loadingChanged(newValue) {
@@ -695,11 +707,11 @@
this._showWarning = false; this._showWarning = false;
this.clearDiffContent(); this.clearDiffContent();
} }
}, }
_lineWrappingObserver() { _lineWrappingObserver() {
this._prefsChanged(this.prefs); this._prefsChanged(this.prefs);
}, }
_prefsChanged(prefs) { _prefsChanged(prefs) {
if (!prefs) { return; } if (!prefs) { return; }
@@ -730,14 +742,14 @@
if (this.diff && !this.noRenderOnPrefsChange) { if (this.diff && !this.noRenderOnPrefsChange) {
this._debounceRenderDiffTable(); this._debounceRenderDiffTable();
} }
}, }
_diffChanged(newValue) { _diffChanged(newValue) {
if (newValue) { if (newValue) {
this._diffLength = this.getDiffLength(newValue); this._diffLength = this.getDiffLength(newValue);
this._debounceRenderDiffTable(); this._debounceRenderDiffTable();
} }
}, }
/** /**
* When called multiple times from the same microtask, will call * When called multiple times from the same microtask, will call
@@ -752,7 +764,7 @@
_debounceRenderDiffTable() { _debounceRenderDiffTable() {
this.debounce( this.debounce(
RENDER_DIFF_TABLE_DEBOUNCE_NAME, () => this._renderDiffTable()); RENDER_DIFF_TABLE_DEBOUNCE_NAME, () => this._renderDiffTable());
}, }
_renderDiffTable() { _renderDiffTable() {
this._unobserveIncrementalNodes(); this._unobserveIncrementalNodes();
@@ -782,7 +794,7 @@
detail: {contentRendered: true}, detail: {contentRendered: true},
})); }));
}); });
}, }
_handleRenderContent() { _handleRenderContent() {
this._incrementalNodeObserver = Polymer.dom(this).observeNodes(info => { this._incrementalNodeObserver = Polymer.dom(this).observeNodes(info => {
@@ -821,19 +833,19 @@
lastEl.replaceWith(lastEl); lastEl.replaceWith(lastEl);
} }
}); });
}, }
_unobserveIncrementalNodes() { _unobserveIncrementalNodes() {
if (this._incrementalNodeObserver) { if (this._incrementalNodeObserver) {
Polymer.dom(this).unobserveNodes(this._incrementalNodeObserver); Polymer.dom(this).unobserveNodes(this._incrementalNodeObserver);
} }
}, }
_unobserveNodes() { _unobserveNodes() {
if (this._nodeObserver) { if (this._nodeObserver) {
Polymer.dom(this).unobserveNodes(this._nodeObserver); Polymer.dom(this).unobserveNodes(this._nodeObserver);
} }
}, }
/** /**
* Get the preferences object including the safety bypass context (if any). * Get the preferences object including the safety bypass context (if any).
@@ -843,12 +855,12 @@
return Object.assign({}, this.prefs, {context: this._safetyBypass}); return Object.assign({}, this.prefs, {context: this._safetyBypass});
} }
return this.prefs; return this.prefs;
}, }
clearDiffContent() { clearDiffContent() {
this._unobserveIncrementalNodes(); this._unobserveIncrementalNodes();
this.$.diffTable.innerHTML = null; this.$.diffTable.innerHTML = null;
}, }
/** @return {!Array} */ /** @return {!Array} */
_computeDiffHeaderItems(diffInfoRecord) { _computeDiffHeaderItems(diffInfoRecord) {
@@ -861,27 +873,27 @@
item.startsWith('--- ') || item.startsWith('--- ') ||
item === 'Binary files differ'); item === 'Binary files differ');
}); });
}, }
/** @return {boolean} */ /** @return {boolean} */
_computeDiffHeaderHidden(items) { _computeDiffHeaderHidden(items) {
return items.length === 0; return items.length === 0;
}, }
_handleFullBypass() { _handleFullBypass() {
this._safetyBypass = FULL_CONTEXT; this._safetyBypass = FULL_CONTEXT;
this._debounceRenderDiffTable(); this._debounceRenderDiffTable();
}, }
_handleLimitedBypass() { _handleLimitedBypass() {
this._safetyBypass = LIMITED_CONTEXT; this._safetyBypass = LIMITED_CONTEXT;
this._debounceRenderDiffTable(); this._debounceRenderDiffTable();
}, }
/** @return {string} */ /** @return {string} */
_computeWarningClass(showWarning) { _computeWarningClass(showWarning) {
return showWarning ? 'warn' : ''; return showWarning ? 'warn' : '';
}, }
/** /**
* @param {string} errorMessage * @param {string} errorMessage
@@ -889,11 +901,11 @@
*/ */
_computeErrorClass(errorMessage) { _computeErrorClass(errorMessage) {
return errorMessage ? 'showError' : ''; return errorMessage ? 'showError' : '';
}, }
expandAllContext() { expandAllContext() {
this._handleFullBypass(); this._handleFullBypass();
}, }
/** /**
* Find the last chunk for the given side. * Find the last chunk for the given side.
@@ -929,7 +941,7 @@
if (chunkIndex === -1) { return null; } if (chunkIndex === -1) { return null; }
return chunk; return chunk;
}, }
/** /**
* Check whether the specified side of the diff has a trailing newline. * Check whether the specified side of the diff has a trailing newline.
@@ -950,7 +962,7 @@
lines = leftSide ? chunk.a : chunk.b; lines = leftSide ? chunk.a : chunk.b;
} }
return lines[lines.length - 1] === ''; return lines[lines.length - 1] === '';
}, }
/** /**
* @param {!Object} diff * @param {!Object} diff
@@ -968,7 +980,7 @@
} }
if (!messages.length) { return null; } if (!messages.length) { return null; }
return messages.join(' — '); return messages.join(' — ');
}, }
/** /**
* @param {string} warning * @param {string} warning
@@ -978,7 +990,7 @@
_computeNewlineWarningClass(warning, loading) { _computeNewlineWarningClass(warning, loading) {
if (loading || !warning) { return 'newlineWarning hidden'; } if (loading || !warning) { return 'newlineWarning hidden'; }
return 'newlineWarning'; return 'newlineWarning';
}, }
/** /**
* Get the approximate length of the diff as the sum of the maximum * Get the approximate length of the diff as the sum of the maximum
@@ -997,6 +1009,8 @@
sec.hasOwnProperty('b') ? sec.b.length : 0); sec.hasOwnProperty('b') ? sec.b.length : 0);
} }
}, 0); }, 0);
}, }
}); }
customElements.define(GrDiff.is, GrDiff);
})(); })();

View File

@@ -20,6 +20,9 @@
// Maximum length for patch set descriptions. // Maximum length for patch set descriptions.
const PATCH_DESC_MAX_LENGTH = 500; const PATCH_DESC_MAX_LENGTH = 500;
/**
* @appliesMixin Gerrit.PatchSetMixin
*/
/** /**
* Fired when the patch range changes * Fired when the patch range changes
* *
@@ -28,11 +31,15 @@
* @property {string} patchNum * @property {string} patchNum
* @property {string} basePatchNum * @property {string} basePatchNum
*/ */
class GrPatchRangeSelect extends Polymer.mixinBehaviors( [
Gerrit.PatchSetBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-patch-range-select'; }
Polymer({ static get properties() {
is: 'gr-patch-range-select', return {
properties: {
availablePatches: Array, availablePatches: Array,
_baseDropdownContent: { _baseDropdownContent: {
type: Object, type: Object,
@@ -53,19 +60,18 @@
revisions: Object, revisions: Object,
revisionInfo: Object, revisionInfo: Object,
_sortedRevisions: Array, _sortedRevisions: Array,
}, };
}
observers: [ static get observers() {
return [
'_updateSortedRevisions(revisions.*)', '_updateSortedRevisions(revisions.*)',
], ];
}
behaviors: [
Gerrit.PatchSetBehavior,
],
_getShaForPatch(patch) { _getShaForPatch(patch) {
return patch.sha.substring(0, 10); return patch.sha.substring(0, 10);
}, }
_computeBaseDropdownContent(availablePatches, patchNum, _sortedRevisions, _computeBaseDropdownContent(availablePatches, patchNum, _sortedRevisions,
changeComments, revisionInfo) { changeComments, revisionInfo) {
@@ -113,13 +119,13 @@
} }
return dropdownContent; return dropdownContent;
}, }
_computeMobileText(patchNum, changeComments, revisions) { _computeMobileText(patchNum, changeComments, revisions) {
return `${patchNum}` + return `${patchNum}` +
`${this._computePatchSetCommentsString(changeComments, patchNum)}` + `${this._computePatchSetCommentsString(changeComments, patchNum)}` +
`${this._computePatchSetDescription(revisions, patchNum, true)}`; `${this._computePatchSetDescription(revisions, patchNum, true)}`;
}, }
_computePatchDropdownContent(availablePatches, basePatchNum, _computePatchDropdownContent(availablePatches, basePatchNum,
_sortedRevisions, changeComments) { _sortedRevisions, changeComments) {
@@ -145,13 +151,13 @@
})); }));
} }
return dropdownContent; return dropdownContent;
}, }
_computeText(patchNum, prefix, changeComments, sha) { _computeText(patchNum, prefix, changeComments, sha) {
return `${prefix}${patchNum}` + return `${prefix}${patchNum}` +
`${this._computePatchSetCommentsString(changeComments, patchNum)}` `${this._computePatchSetCommentsString(changeComments, patchNum)}`
+ (` | ${sha}`); + (` | ${sha}`);
}, }
_createDropdownEntry(patchNum, prefix, sortedRevisions, changeComments, _createDropdownEntry(patchNum, prefix, sortedRevisions, changeComments,
sha) { sha) {
@@ -169,12 +175,12 @@
entry['date'] = date; entry['date'] = date;
} }
return entry; return entry;
}, }
_updateSortedRevisions(revisionsRecord) { _updateSortedRevisions(revisionsRecord) {
const revisions = revisionsRecord.base; const revisions = revisionsRecord.base;
this._sortedRevisions = this.sortRevisions(Object.values(revisions)); this._sortedRevisions = this.sortRevisions(Object.values(revisions));
}, }
/** /**
* The basePatchNum should always be <= patchNum -- because sortedRevisions * The basePatchNum should always be <= patchNum -- because sortedRevisions
@@ -187,7 +193,7 @@
_computeLeftDisabled(basePatchNum, patchNum, sortedRevisions) { _computeLeftDisabled(basePatchNum, patchNum, sortedRevisions) {
return this.findSortedIndex(basePatchNum, sortedRevisions) <= return this.findSortedIndex(basePatchNum, sortedRevisions) <=
this.findSortedIndex(patchNum, sortedRevisions); this.findSortedIndex(patchNum, sortedRevisions);
}, }
/** /**
* The basePatchNum should always be <= patchNum -- because sortedRevisions * The basePatchNum should always be <= patchNum -- because sortedRevisions
@@ -216,7 +222,7 @@
return this.findSortedIndex(basePatchNum, sortedRevisions) <= return this.findSortedIndex(basePatchNum, sortedRevisions) <=
this.findSortedIndex(patchNum, sortedRevisions); this.findSortedIndex(patchNum, sortedRevisions);
}, }
_computePatchSetCommentsString(changeComments, patchNum) { _computePatchSetCommentsString(changeComments, patchNum) {
if (!changeComments) { return; } if (!changeComments) { return; }
@@ -237,7 +243,7 @@
// Add a comma + space if both comments and unresolved // Add a comma + space if both comments and unresolved
(commentString && unresolvedString ? ', ' : '') + (commentString && unresolvedString ? ', ' : '') +
`${unresolvedString})`; `${unresolvedString})`;
}, }
/** /**
* @param {!Array} revisions * @param {!Array} revisions
@@ -249,7 +255,7 @@
return (rev && rev.description) ? return (rev && rev.description) ?
(opt_addFrontSpace ? ' ' : '') + (opt_addFrontSpace ? ' ' : '') +
rev.description.substring(0, PATCH_DESC_MAX_LENGTH) : ''; rev.description.substring(0, PATCH_DESC_MAX_LENGTH) : '';
}, }
/** /**
* @param {!Array} revisions * @param {!Array} revisions
@@ -258,7 +264,7 @@
_computePatchSetDate(revisions, patchNum) { _computePatchSetDate(revisions, patchNum) {
const rev = this.getRevisionByPatchNum(revisions, patchNum); const rev = this.getRevisionByPatchNum(revisions, patchNum);
return rev ? rev.created : undefined; return rev ? rev.created : undefined;
}, }
/** /**
* Catches value-change events from the patchset dropdowns and determines * Catches value-change events from the patchset dropdowns and determines
@@ -276,6 +282,8 @@
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('patch-range-change', {detail, bubbles: false})); new CustomEvent('patch-range-change', {detail, bubbles: false}));
}, }
}); }
customElements.define(GrPatchRangeSelect.is, GrPatchRangeSelect);
})(); })();

View File

@@ -23,9 +23,10 @@
const RANGE_HIGHLIGHT = 'style-scope gr-diff range'; const RANGE_HIGHLIGHT = 'style-scope gr-diff range';
const HOVER_HIGHLIGHT = 'style-scope gr-diff rangeHighlight'; const HOVER_HIGHLIGHT = 'style-scope gr-diff rangeHighlight';
Polymer({ class GrRangedCommentLayer extends Polymer.GestureEventListeners(
is: 'gr-ranged-comment-layer', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-ranged-comment-layer'; }
/** /**
* Fired when the range in a range comment was malformed and had to be * Fired when the range in a range comment was malformed and had to be
* normalized. * normalized.
@@ -35,7 +36,8 @@
* @event normalize-range * @event normalize-range
*/ */
properties: { static get properties() {
return {
/** @type {!Array<!Gerrit.HoveredRange>} */ /** @type {!Array<!Gerrit.HoveredRange>} */
commentRanges: Array, commentRanges: Array,
_listeners: { _listeners: {
@@ -46,15 +48,18 @@
type: Object, type: Object,
value() { return {left: {}, right: {}}; }, value() { return {left: {}, right: {}}; },
}, },
}, };
}
observers: [ static get observers() {
return [
'_handleCommentRangesChange(commentRanges.*)', '_handleCommentRangesChange(commentRanges.*)',
], ];
}
get styleModuleName() { get styleModuleName() {
return 'gr-ranged-comment-styles'; return 'gr-ranged-comment-styles';
}, }
/** /**
* Layer method to add annotations to a line. * Layer method to add annotations to a line.
@@ -81,7 +86,7 @@
range.end - range.start, range.end - range.start,
range.hovering ? HOVER_HIGHLIGHT : RANGE_HIGHLIGHT); range.hovering ? HOVER_HIGHLIGHT : RANGE_HIGHLIGHT);
} }
}, }
/** /**
* Register a listener for layer updates. * Register a listener for layer updates.
@@ -91,7 +96,7 @@
*/ */
addListener(fn) { addListener(fn) {
this._listeners.push(fn); this._listeners.push(fn);
}, }
/** /**
* Notify Layer listeners of changes to annotations. * Notify Layer listeners of changes to annotations.
@@ -103,7 +108,7 @@
for (const listener of this._listeners) { for (const listener of this._listeners) {
listener(start, end, side); listener(start, end, side);
} }
}, }
/** /**
* Handle change in the ranges by updating the ranges maps and by * Handle change in the ranges by updating the ranges maps and by
@@ -161,7 +166,7 @@
} }
} }
} }
}, }
_updateRangesMap(side, range, hovering, operation) { _updateRangesMap(side, range, hovering, operation) {
const forSide = this._rangesMap[side] || (this._rangesMap[side] = {}); const forSide = this._rangesMap[side] || (this._rangesMap[side] = {});
@@ -172,7 +177,7 @@
operation(forLine, start, end, hovering); operation(forLine, start, end, hovering);
} }
this._notifyUpdateRange(range.start_line, range.end_line, side); this._notifyUpdateRange(range.start_line, range.end_line, side);
}, }
_getRangesForLine(line, side) { _getRangesForLine(line, side) {
const lineNum = side === 'left' ? line.beforeNumber : line.afterNumber; const lineNum = side === 'left' ? line.beforeNumber : line.afterNumber;
@@ -200,6 +205,8 @@
}) })
// Sort the ranges so that hovering highlights are on top. // Sort the ranges so that hovering highlights are on top.
.sort((a, b) => a.hovering && !b.hovering ? 1 : 0); .sort((a, b) => a.hovering && !b.hovering ? 1 : 0);
}, }
}); }
customElements.define(GrRangedCommentLayer.is, GrRangedCommentLayer);
})(); })();

View File

@@ -17,31 +17,38 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-selection-action-box', * @appliesMixin Gerrit.FireMixin
*/
class GrSelectionActionBox extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-selection-action-box'; }
/** /**
* Fired when the comment creation action was taken (click). * Fired when the comment creation action was taken (click).
* *
* @event create-comment-requested * @event create-comment-requested
*/ */
properties: { static get properties() {
return {
keyEventTarget: { keyEventTarget: {
type: Object, type: Object,
value() { return document.body; }, value() { return document.body; },
}, },
positionBelow: Boolean, positionBelow: Boolean,
}, };
}
behaviors: [ created() {
Gerrit.FireBehavior, super.created();
],
listeners: {
// See https://crbug.com/gerrit/4767 // See https://crbug.com/gerrit/4767
mousedown: '_handleMouseDown', this.addEventListener('mousedown',
}, e => this._handleMouseDown(e));
}
placeAbove(el) { placeAbove(el) {
Polymer.dom.flush(); Polymer.dom.flush();
@@ -52,7 +59,7 @@
rect.top - parentRect.top - boxRect.height - 6 + 'px'; rect.top - parentRect.top - boxRect.height - 6 + 'px';
this.style.left = this.style.left =
rect.left - parentRect.left + (rect.width - boxRect.width) / 2 + 'px'; rect.left - parentRect.left + (rect.width - boxRect.width) / 2 + 'px';
}, }
placeBelow(el) { placeBelow(el) {
Polymer.dom.flush(); Polymer.dom.flush();
@@ -63,14 +70,14 @@
rect.top - parentRect.top + boxRect.height - 6 + 'px'; rect.top - parentRect.top + boxRect.height - 6 + 'px';
this.style.left = this.style.left =
rect.left - parentRect.left + (rect.width - boxRect.width) / 2 + 'px'; rect.left - parentRect.left + (rect.width - boxRect.width) / 2 + 'px';
}, }
_getParentBoundingClientRect() { _getParentBoundingClientRect() {
// With native shadow DOM, the parent is the shadow root, not the gr-diff // With native shadow DOM, the parent is the shadow root, not the gr-diff
// element // element
const parent = this.parentElement || this.parentNode.host; const parent = this.parentElement || this.parentNode.host;
return parent.getBoundingClientRect(); return parent.getBoundingClientRect();
}, }
_getTargetBoundingRect(el) { _getTargetBoundingRect(el) {
let rect; let rect;
@@ -83,13 +90,15 @@
rect = el.getBoundingClientRect(); rect = el.getBoundingClientRect();
} }
return rect; return rect;
}, }
_handleMouseDown(e) { _handleMouseDown(e) {
if (e.button !== 0) { return; } // 0 = main button if (e.button !== 0) { return; } // 0 = main button
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this.fire('create-comment-requested'); this.fire('create-comment-requested');
}, }
}); }
customElements.define(GrSelectionActionBox.is, GrSelectionActionBox);
})(); })();

View File

@@ -130,10 +130,13 @@
const GO_BACKSLASH_LITERAL = '\'\\\\\''; const GO_BACKSLASH_LITERAL = '\'\\\\\'';
const GLOBAL_LT_PATTERN = /</g; const GLOBAL_LT_PATTERN = /</g;
Polymer({ class GrSyntaxLayer extends Polymer.GestureEventListeners(
is: 'gr-syntax-layer', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-syntax-layer'; }
properties: { static get properties() {
return {
diff: { diff: {
type: Object, type: Object,
observer: '_diffChanged', observer: '_diffChanged',
@@ -169,15 +172,16 @@
value: null, value: null,
}, },
_hljs: Object, _hljs: Object,
}, };
}
addListener(fn) { addListener(fn) {
this.push('_listeners', fn); this.push('_listeners', fn);
}, }
removeListener(fn) { removeListener(fn) {
this._listeners = this._listeners.filter(f => f != fn); this._listeners = this._listeners.filter(f => f != fn);
}, }
/** /**
* Annotation layer method to add syntax annotations to the given element * Annotation layer method to add syntax annotations to the given element
@@ -214,14 +218,14 @@
GrAnnotation.annotateElement( GrAnnotation.annotateElement(
el, range.start, range.length, range.className); el, range.start, range.length, range.className);
} }
}, }
_getLanguage(diffFileMetaInfo) { _getLanguage(diffFileMetaInfo) {
// The Gerrit API provides only content-type, but for other users of // The Gerrit API provides only content-type, but for other users of
// gr-diff it may be more convenient to specify the language directly. // gr-diff it may be more convenient to specify the language directly.
return diffFileMetaInfo.language || return diffFileMetaInfo.language ||
LANGUAGE_MAP[diffFileMetaInfo.content_type]; LANGUAGE_MAP[diffFileMetaInfo.content_type];
}, }
/** /**
* Start processing syntax for the loaded diff and notify layer listeners * Start processing syntax for the loaded diff and notify layer listeners
@@ -298,7 +302,7 @@
})); }));
return this._processPromise return this._processPromise
.finally(() => { this._processPromise = null; }); .finally(() => { this._processPromise = null; });
}, }
/** /**
* Cancel any asynchronous syntax processing jobs. * Cancel any asynchronous syntax processing jobs.
@@ -311,13 +315,13 @@
if (this._processPromise) { if (this._processPromise) {
this._processPromise.cancel(); this._processPromise.cancel();
} }
}, }
_diffChanged() { _diffChanged() {
this._cancel(); this._cancel();
this._baseRanges = []; this._baseRanges = [];
this._revisionRanges = []; this._revisionRanges = [];
}, }
/** /**
* Take a string of HTML with the (potentially nested) syntax markers * Take a string of HTML with the (potentially nested) syntax markers
@@ -339,7 +343,7 @@
const ranges = this._rangesFromElement(div, 0); const ranges = this._rangesFromElement(div, 0);
rangesCache.set(str, ranges); rangesCache.set(str, ranges);
return ranges; return ranges;
}, }
_rangesFromElement(elem, offset) { _rangesFromElement(elem, offset) {
let result = []; let result = [];
@@ -362,7 +366,7 @@
offset += nodeLength; offset += nodeLength;
} }
return result; return result;
}, }
/** /**
* For a given state, process the syntax for the next line (or pair of * For a given state, process the syntax for the next line (or pair of
@@ -412,7 +416,7 @@
this._rangesFromString(result.value, rangesCache)); this._rangesFromString(result.value, rangesCache));
state.revisionContext = result.top; state.revisionContext = result.top;
} }
}, }
/** /**
* Ad hoc fixes for HLJS parsing bugs. Rewrite lines of code in constrained * Ad hoc fixes for HLJS parsing bugs. Rewrite lines of code in constrained
@@ -479,7 +483,7 @@
} }
return line; return line;
}, }
/** /**
* Tells whether the state has exhausted its current section. * Tells whether the state has exhausted its current section.
@@ -494,7 +498,7 @@
return (!section.a || state.lineIndex >= section.a.length) && return (!section.a || state.lineIndex >= section.a.length) &&
(!section.b || state.lineIndex >= section.b.length); (!section.b || state.lineIndex >= section.b.length);
} }
}, }
/** /**
* For a given state, notify layer listeners of any processed line ranges * For a given state, notify layer listeners of any processed line ranges
@@ -516,18 +520,20 @@
'right'); 'right');
state.lastNotify.right = state.lineNums.right; state.lastNotify.right = state.lineNums.right;
} }
}, }
_notifyRange(start, end, side) { _notifyRange(start, end, side) {
for (const fn of this._listeners) { for (const fn of this._listeners) {
fn(start, end, side); fn(start, end, side);
} }
}, }
_loadHLJS() { _loadHLJS() {
return this.$.libLoader.getHLJS().then(hljs => { return this.$.libLoader.getHLJS().then(hljs => {
this._hljs = hljs; this._hljs = hljs;
}); });
}, }
}); }
customElements.define(GrSyntaxLayer.is, GrSyntaxLayer);
})(); })();

View File

@@ -17,10 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-documentation-search', * @appliesMixin Gerrit.ListViewMixin
*/
class GrDocumentationSearch extends Polymer.mixinBehaviors( [
Gerrit.ListViewBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-documentation-search'; }
properties: { static get properties() {
return {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -44,23 +52,21 @@
type: String, type: String,
value: '', value: '',
}, },
}, };
}
behaviors: [
Gerrit.ListViewBehavior,
],
attached() { attached() {
super.attached();
this.dispatchEvent( this.dispatchEvent(
new CustomEvent('title-change', {title: 'Documentation Search'})); new CustomEvent('title-change', {title: 'Documentation Search'}));
}, }
_paramsChanged(params) { _paramsChanged(params) {
this._loading = true; this._loading = true;
this._filter = this.getFilterValue(params); this._filter = this.getFilterValue(params);
return this._getDocumentationSearches(this._filter); return this._getDocumentationSearches(this._filter);
}, }
_getDocumentationSearches(filter) { _getDocumentationSearches(filter) {
this._documentationSearches = []; this._documentationSearches = [];
@@ -71,11 +77,13 @@
this._documentationSearches = searches; this._documentationSearches = searches;
this._loading = false; this._loading = false;
}); });
}, }
_computeSearchUrl(url) { _computeSearchUrl(url) {
if (!url) { return ''; } if (!url) { return ''; }
return this.getBaseUrl() + '/' + url; return this.getBaseUrl() + '/' + url;
}, }
}); }
customElements.define(GrDocumentationSearch.is, GrDocumentationSearch);
})(); })();

View File

@@ -17,23 +17,28 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrDefaultEditor extends Polymer.GestureEventListeners(
is: 'gr-default-editor', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-default-editor'; }
/** /**
* Fired when the content of the editor changes. * Fired when the content of the editor changes.
* *
* @event content-change * @event content-change
*/ */
properties: { static get properties() {
return {
fileContent: String, fileContent: String,
}, };
}
_handleTextareaInput(e) { _handleTextareaInput(e) {
this.dispatchEvent(new CustomEvent( this.dispatchEvent(new CustomEvent(
'content-change', 'content-change',
{detail: {value: e.target.value}, bubbles: true, composed: true})); {detail: {value: e.target.value}, bubbles: true, composed: true}));
}, }
}); }
customElements.define(GrDefaultEditor.is, GrDefaultEditor);
})(); })();

View File

@@ -17,10 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-edit-controls', * @appliesMixin Gerrit.PatchSetMixin
*/
class GrEditControls extends Polymer.mixinBehaviors( [
Gerrit.PatchSetBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-edit-controls'; }
properties: { static get properties() {
return {
change: Object, change: Object,
patchNum: String, patchNum: String,
@@ -53,11 +61,8 @@
return this._queryFiles.bind(this); return this._queryFiles.bind(this);
}, },
}, },
}, };
}
behaviors: [
Gerrit.PatchSetBehavior,
],
_handleTap(e) { _handleTap(e) {
e.preventDefault(); e.preventDefault();
@@ -76,7 +81,7 @@
this.openRestoreDialog(); this.openRestoreDialog();
return; return;
} }
}, }
/** /**
* @param {string=} opt_path * @param {string=} opt_path
@@ -84,7 +89,7 @@
openOpenDialog(opt_path) { openOpenDialog(opt_path) {
if (opt_path) { this._path = opt_path; } if (opt_path) { this._path = opt_path; }
return this._showDialog(this.$.openDialog); return this._showDialog(this.$.openDialog);
}, }
/** /**
* @param {string=} opt_path * @param {string=} opt_path
@@ -92,7 +97,7 @@
openDeleteDialog(opt_path) { openDeleteDialog(opt_path) {
if (opt_path) { this._path = opt_path; } if (opt_path) { this._path = opt_path; }
return this._showDialog(this.$.deleteDialog); return this._showDialog(this.$.deleteDialog);
}, }
/** /**
* @param {string=} opt_path * @param {string=} opt_path
@@ -100,7 +105,7 @@
openRenameDialog(opt_path) { openRenameDialog(opt_path) {
if (opt_path) { this._path = opt_path; } if (opt_path) { this._path = opt_path; }
return this._showDialog(this.$.renameDialog); return this._showDialog(this.$.renameDialog);
}, }
/** /**
* @param {string=} opt_path * @param {string=} opt_path
@@ -108,7 +113,7 @@
openRestoreDialog(opt_path) { openRestoreDialog(opt_path) {
if (opt_path) { this._path = opt_path; } if (opt_path) { this._path = opt_path; }
return this._showDialog(this.$.restoreDialog); return this._showDialog(this.$.restoreDialog);
}, }
/** /**
* Given a path string, checks that it is a valid file path. * Given a path string, checks that it is a valid file path.
@@ -118,11 +123,11 @@
_isValidPath(path) { _isValidPath(path) {
// Double negation needed for strict boolean return type. // Double negation needed for strict boolean return type.
return !!path.length && !path.endsWith('/'); return !!path.length && !path.endsWith('/');
}, }
_computeRenameDisabled(path, newPath) { _computeRenameDisabled(path, newPath) {
return this._isValidPath(path) && this._isValidPath(newPath); return this._isValidPath(path) && this._isValidPath(newPath);
}, }
/** /**
* Given a dom event, gets the dialog that lies along this event path. * Given a dom event, gets the dialog that lies along this event path.
@@ -134,7 +139,7 @@
if (!element.classList) { return false; } if (!element.classList) { return false; }
return element.classList.contains('dialog'); return element.classList.contains('dialog');
}); });
}, }
_showDialog(dialog) { _showDialog(dialog) {
// Some dialogs may not fire their on-close event when closed in certain // Some dialogs may not fire their on-close event when closed in certain
@@ -148,12 +153,12 @@
if (autocomplete) { autocomplete.focus(); } if (autocomplete) { autocomplete.focus(); }
this.async(() => { this.$.overlay.center(); }, 1); this.async(() => { this.$.overlay.center(); }, 1);
}); });
}, }
_hideAllDialogs() { _hideAllDialogs() {
const dialogs = Polymer.dom(this.root).querySelectorAll('.dialog'); const dialogs = Polymer.dom(this.root).querySelectorAll('.dialog');
for (const dialog of dialogs) { this._closeDialog(dialog); } for (const dialog of dialogs) { this._closeDialog(dialog); }
}, }
/** /**
* @param {Element|undefined} dialog * @param {Element|undefined} dialog
@@ -175,18 +180,18 @@
dialog.classList.toggle('invisible', true); dialog.classList.toggle('invisible', true);
return this.$.overlay.close(); return this.$.overlay.close();
}, }
_handleDialogCancel(e) { _handleDialogCancel(e) {
this._closeDialog(this._getDialogFromEvent(e)); this._closeDialog(this._getDialogFromEvent(e));
}, }
_handleOpenConfirm(e) { _handleOpenConfirm(e) {
const url = Gerrit.Nav.getEditUrlForDiff(this.change, this._path, const url = Gerrit.Nav.getEditUrlForDiff(this.change, this._path,
this.patchNum); this.patchNum);
Gerrit.Nav.navigateToRelativeUrl(url); Gerrit.Nav.navigateToRelativeUrl(url);
this._closeDialog(this._getDialogFromEvent(e), true); this._closeDialog(this._getDialogFromEvent(e), true);
}, }
_handleDeleteConfirm(e) { _handleDeleteConfirm(e) {
// Get the dialog before the api call as the event will change during bubbling // Get the dialog before the api call as the event will change during bubbling
@@ -198,7 +203,7 @@
this._closeDialog(dialog, true); this._closeDialog(dialog, true);
Gerrit.Nav.navigateToChange(this.change); Gerrit.Nav.navigateToChange(this.change);
}); });
}, }
_handleRestoreConfirm(e) { _handleRestoreConfirm(e) {
const dialog = this._getDialogFromEvent(e); const dialog = this._getDialogFromEvent(e);
@@ -208,7 +213,7 @@
this._closeDialog(dialog, true); this._closeDialog(dialog, true);
Gerrit.Nav.navigateToChange(this.change); Gerrit.Nav.navigateToChange(this.change);
}); });
}, }
_handleRenameConfirm(e) { _handleRenameConfirm(e) {
const dialog = this._getDialogFromEvent(e); const dialog = this._getDialogFromEvent(e);
@@ -218,17 +223,19 @@
this._closeDialog(dialog, true); this._closeDialog(dialog, true);
Gerrit.Nav.navigateToChange(this.change); Gerrit.Nav.navigateToChange(this.change);
}); });
}, }
_queryFiles(input) { _queryFiles(input) {
return this.$.restAPI.queryChangeFiles(this.change._number, return this.$.restAPI.queryChangeFiles(this.change._number,
this.patchNum, input).then(res => res.map(file => { this.patchNum, input).then(res => res.map(file => {
return {name: file}; return {name: file};
})); }));
}, }
_computeIsInvisible(id, hiddenActions) { _computeIsInvisible(id, hiddenActions) {
return hiddenActions.includes(id) ? 'invisible' : ''; return hiddenActions.includes(id) ? 'invisible' : '';
}, }
}); }
customElements.define(GrEditControls.is, GrEditControls);
})(); })();

View File

@@ -17,16 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrEditFileControls extends Polymer.GestureEventListeners(
is: 'gr-edit-file-controls', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-edit-file-controls'; }
/** /**
* Fired when an action in the overflow menu is tapped. * Fired when an action in the overflow menu is tapped.
* *
* @event file-action-tap * @event file-action-tap
*/ */
properties: { static get properties() {
return {
filePath: String, filePath: String,
_allFileActions: { _allFileActions: {
type: Array, type: Array,
@@ -36,19 +38,20 @@
type: Array, type: Array,
computed: '_computeFileActions(_allFileActions)', computed: '_computeFileActions(_allFileActions)',
}, },
}, };
}
_handleActionTap(e) { _handleActionTap(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
this._dispatchFileAction(e.detail.id, this.filePath); this._dispatchFileAction(e.detail.id, this.filePath);
}, }
_dispatchFileAction(action, path) { _dispatchFileAction(action, path) {
this.dispatchEvent(new CustomEvent( this.dispatchEvent(new CustomEvent(
'file-action-tap', 'file-action-tap',
{detail: {action, path}, bubbles: true, composed: true})); {detail: {action, path}, bubbles: true, composed: true}));
}, }
_computeFileActions(actions) { _computeFileActions(actions) {
// TODO(kaspern): conditionally disable some actions based on file status. // TODO(kaspern): conditionally disable some actions based on file status.
@@ -58,6 +61,8 @@
id: action.id, id: action.id,
}; };
}); });
}, }
}); }
customElements.define(GrEditFileControls.is, GrEditFileControls);
})(); })();

View File

@@ -24,9 +24,21 @@
const STORAGE_DEBOUNCE_INTERVAL_MS = 100; const STORAGE_DEBOUNCE_INTERVAL_MS = 100;
Polymer({ /**
is: 'gr-editor-view', * @appliesMixin Gerrit.FireMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
* @appliesMixin Gerrit.PatchSetMixin
* @appliesMixin Gerrit.PathListMixin
*/
class GrEditorView extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.PathListBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-editor-view'; }
/** /**
* Fired when the title of the page should change. * Fired when the title of the page should change.
* *
@@ -39,7 +51,8 @@
* @event show-alert * @event show-alert
*/ */
properties: { static get properties() {
return {
/** /**
* URL params passed from the router. * URL params passed from the router.
*/ */
@@ -70,38 +83,37 @@
computed: '_computeSaveDisabled(_content, _newContent, _saving)', computed: '_computeSaveDisabled(_content, _newContent, _saving)',
}, },
_prefs: Object, _prefs: Object,
}, };
}
behaviors: [ get keyBindings() {
Gerrit.FireBehavior, return {
Gerrit.KeyboardShortcutBehavior,
Gerrit.PatchSetBehavior,
Gerrit.PathListBehavior,
],
listeners: {
'content-change': '_handleContentChange',
},
keyBindings: {
'ctrl+s meta+s': '_handleSaveShortcut', 'ctrl+s meta+s': '_handleSaveShortcut',
}, };
}
created() {
super.created();
this.addEventListener('content-change',
e => this._handleContentChange(e));
}
attached() { attached() {
super.attached();
this._getEditPrefs().then(prefs => { this._prefs = prefs; }); this._getEditPrefs().then(prefs => { this._prefs = prefs; });
}, }
get storageKey() { get storageKey() {
return `c${this._changeNum}_ps${this._patchNum}_${this._path}`; return `c${this._changeNum}_ps${this._patchNum}_${this._path}`;
}, }
_getLoggedIn() { _getLoggedIn() {
return this.$.restAPI.getLoggedIn(); return this.$.restAPI.getLoggedIn();
}, }
_getEditPrefs() { _getEditPrefs() {
return this.$.restAPI.getEditPreferences(); return this.$.restAPI.getEditPreferences();
}, }
_paramsChanged(value) { _paramsChanged(value) {
if (value.view !== Gerrit.Nav.View.EDIT) { if (value.view !== Gerrit.Nav.View.EDIT) {
@@ -126,13 +138,13 @@
promises.push( promises.push(
this._getFileData(this._changeNum, this._path, this._patchNum)); this._getFileData(this._changeNum, this._path, this._patchNum));
return Promise.all(promises); return Promise.all(promises);
}, }
_getChangeDetail(changeNum) { _getChangeDetail(changeNum) {
return this.$.restAPI.getDiffChangeDetail(changeNum).then(change => { return this.$.restAPI.getDiffChangeDetail(changeNum).then(change => {
this._change = change; this._change = change;
}); });
}, }
_handlePathChanged(e) { _handlePathChanged(e) {
const path = e.detail; const path = e.detail;
@@ -146,13 +158,13 @@
this._successfulSave = true; this._successfulSave = true;
this._viewEditInChangeView(); this._viewEditInChangeView();
}); });
}, }
_viewEditInChangeView() { _viewEditInChangeView() {
const patch = this._successfulSave ? this.EDIT_NAME : this._patchNum; const patch = this._successfulSave ? this.EDIT_NAME : this._patchNum;
Gerrit.Nav.navigateToChange(this._change, patch, null, Gerrit.Nav.navigateToChange(this._change, patch, null,
patch !== this.EDIT_NAME); patch !== this.EDIT_NAME);
}, }
_getFileData(changeNum, path, patchNum) { _getFileData(changeNum, path, patchNum) {
const storedContent = const storedContent =
@@ -183,7 +195,7 @@
this._type = ''; this._type = '';
} }
}); });
}, }
_saveEdit() { _saveEdit() {
this._saving = true; this._saving = true;
@@ -198,7 +210,7 @@
this._content = this._newContent; this._content = this._newContent;
this._successfulSave = true; this._successfulSave = true;
}); });
}, }
_showAlert(message) { _showAlert(message) {
this.dispatchEvent(new CustomEvent('show-alert', { this.dispatchEvent(new CustomEvent('show-alert', {
@@ -206,7 +218,7 @@
bubbles: true, bubbles: true,
composed: true, composed: true,
})); }));
}, }
_computeSaveDisabled(content, newContent, saving) { _computeSaveDisabled(content, newContent, saving) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -222,12 +234,12 @@
return true; return true;
} }
return content === newContent; return content === newContent;
}, }
_handleCloseTap() { _handleCloseTap() {
// TODO(kaspern): Add a confirm dialog if there are unsaved changes. // TODO(kaspern): Add a confirm dialog if there are unsaved changes.
this._viewEditInChangeView(); this._viewEditInChangeView();
}, }
_handleContentChange(e) { _handleContentChange(e) {
this.debounce('store', () => { this.debounce('store', () => {
@@ -239,13 +251,15 @@
this.$.storage.eraseEditableContentItem(this.storageKey); this.$.storage.eraseEditableContentItem(this.storageKey);
} }
}, STORAGE_DEBOUNCE_INTERVAL_MS); }, STORAGE_DEBOUNCE_INTERVAL_MS);
}, }
_handleSaveShortcut(e) { _handleSaveShortcut(e) {
e.preventDefault(); e.preventDefault();
if (!this._saveDisabled) { if (!this._saveDisabled) {
this._saveEdit(); this._saveEdit();
} }
}, }
}); }
customElements.define(GrEditorView.is, GrEditorView);
})(); })();

View File

@@ -17,16 +17,25 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-app-element', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.KeyboardShortcutMixin
*/
class GrAppElement extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.KeyboardShortcutBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-app-element'; }
/** /**
* Fired when the URL location changes. * Fired when the URL location changes.
* *
* @event location-change * @event location-change
*/ */
properties: { static get properties() {
return {
/** /**
* @type {{ query: string, view: string, screen: string }} * @type {{ query: string, view: string, screen: string }}
*/ */
@@ -83,24 +92,15 @@
type: Boolean, type: Boolean,
value: false, value: false,
}, },
}, };
}
listeners: { static get observers() {
'page-error': '_handlePageError', return [
'title-change': '_handleTitleChange',
'location-change': '_handleLocationChange',
'rpc-log': '_handleRpcLog',
},
observers: [
'_viewChanged(params.view)', '_viewChanged(params.view)',
'_paramsChanged(params.*)', '_paramsChanged(params.*)',
], ];
}
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.KeyboardShortcutBehavior,
],
keyboardShortcuts() { keyboardShortcuts() {
return { return {
@@ -111,13 +111,23 @@
[this.Shortcut.GO_TO_ABANDONED_CHANGES]: '_goToAbandonedChanges', [this.Shortcut.GO_TO_ABANDONED_CHANGES]: '_goToAbandonedChanges',
[this.Shortcut.GO_TO_WATCHED_CHANGES]: '_goToWatchedChanges', [this.Shortcut.GO_TO_WATCHED_CHANGES]: '_goToWatchedChanges',
}; };
}, }
created() { created() {
super.created();
this._bindKeyboardShortcuts(); this._bindKeyboardShortcuts();
}, this.addEventListener('page-error',
e => this._handlePageError(e));
this.addEventListener('title-change',
e => this._handleTitleChange(e));
this.addEventListener('location-change',
e => this._handleLocationChange(e));
this.addEventListener('rpc-log',
e => this._handleRpcLog(e));
}
ready() { ready() {
super.ready();
this.$.reporting.appStarted(); this.$.reporting.appStarted();
this.$.router.start(); this.$.router.start();
@@ -165,7 +175,7 @@
selectedChangeIndex: 0, selectedChangeIndex: 0,
}, },
}; };
}, }
_bindKeyboardShortcuts() { _bindKeyboardShortcuts() {
this.bindShortcut(this.Shortcut.SEND_REPLY, this.bindShortcut(this.Shortcut.SEND_REPLY,
@@ -287,7 +297,7 @@
this.bindShortcut( this.bindShortcut(
this.Shortcut.SEARCH, '/'); this.Shortcut.SEARCH, '/');
}, }
_accountChanged(account) { _accountChanged(account) {
if (!account) { return; } if (!account) { return; }
@@ -298,7 +308,7 @@
this.$.restAPI.getEditPreferences(); this.$.restAPI.getEditPreferences();
this.$.errorManager.knownAccountId = this.$.errorManager.knownAccountId =
this._account && this._account._account_id || null; this._account && this._account._account_id || null;
}, }
_viewChanged(view) { _viewChanged(view) {
this.$.errorView.classList.remove('show'); this.$.errorView.classList.remove('show');
@@ -328,7 +338,7 @@
}); });
} }
this.$.header.unfloat(); this.$.header.unfloat();
}, }
_handlePageError(e) { _handlePageError(e) {
const props = [ const props = [
@@ -356,7 +366,7 @@
this._lastError = err; this._lastError = err;
}); });
} }
}, }
_handleLocationChange(e) { _handleLocationChange(e) {
const hash = e.detail.hash.substring(1); const hash = e.detail.hash.substring(1);
@@ -365,7 +375,7 @@
pathname += '@' + hash; pathname += '@' + hash;
} }
this.set('_path', pathname); this.set('_path', pathname);
}, }
_paramsChanged(paramsRecord) { _paramsChanged(paramsRecord) {
const params = paramsRecord.base; const params = paramsRecord.base;
@@ -373,7 +383,7 @@
if (viewsToCheck.includes(params.view)) { if (viewsToCheck.includes(params.view)) {
this.set('_lastSearchPage', location.pathname); this.set('_lastSearchPage', location.pathname);
} }
}, }
_handleTitleChange(e) { _handleTitleChange(e) {
if (e.detail.title) { if (e.detail.title) {
@@ -381,54 +391,54 @@
} else { } else {
document.title = ''; document.title = '';
} }
}, }
_showKeyboardShortcuts(e) { _showKeyboardShortcuts(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }
this.$.keyboardShortcuts.open(); this.$.keyboardShortcuts.open();
}, }
_handleKeyboardShortcutDialogClose() { _handleKeyboardShortcutDialogClose() {
this.$.keyboardShortcuts.close(); this.$.keyboardShortcuts.close();
}, }
_handleAccountDetailUpdate(e) { _handleAccountDetailUpdate(e) {
this.$.mainHeader.reload(); this.$.mainHeader.reload();
if (this.params.view === Gerrit.Nav.View.SETTINGS) { if (this.params.view === Gerrit.Nav.View.SETTINGS) {
this.$$('gr-settings-view').reloadAccountDetail(); this.$$('gr-settings-view').reloadAccountDetail();
} }
}, }
_handleRegistrationDialogClose(e) { _handleRegistrationDialogClose(e) {
this.params.justRegistered = false; this.params.justRegistered = false;
this.$.registrationOverlay.close(); this.$.registrationOverlay.close();
}, }
_goToOpenedChanges() { _goToOpenedChanges() {
Gerrit.Nav.navigateToStatusSearch('open'); Gerrit.Nav.navigateToStatusSearch('open');
}, }
_goToUserDashboard() { _goToUserDashboard() {
Gerrit.Nav.navigateToUserDashboard(); Gerrit.Nav.navigateToUserDashboard();
}, }
_goToMergedChanges() { _goToMergedChanges() {
Gerrit.Nav.navigateToStatusSearch('merged'); Gerrit.Nav.navigateToStatusSearch('merged');
}, }
_goToAbandonedChanges() { _goToAbandonedChanges() {
Gerrit.Nav.navigateToStatusSearch('abandoned'); Gerrit.Nav.navigateToStatusSearch('abandoned');
}, }
_goToWatchedChanges() { _goToWatchedChanges() {
// The query is hardcoded, and doesn't respect custom menu entries // The query is hardcoded, and doesn't respect custom menu entries
Gerrit.Nav.navigateToSearchQuery('is:watched is:open'); Gerrit.Nav.navigateToSearchQuery('is:watched is:open');
}, }
_computePluginScreenName({plugin, screen}) { _computePluginScreenName({plugin, screen}) {
if (!plugin || !screen) return ''; if (!plugin || !screen) return '';
return `${plugin}-screen-${screen}`; return `${plugin}-screen-${screen}`;
}, }
_logWelcome() { _logWelcome() {
console.group('Runtime Info'); console.group('Runtime Info');
@@ -441,7 +451,7 @@
console.log(`Please file bugs and feedback at: ${this._feedbackUrl}`); console.log(`Please file bugs and feedback at: ${this._feedbackUrl}`);
} }
console.groupEnd(); console.groupEnd();
}, }
/** /**
* Intercept RPC log events emitted by REST API interfaces. * Intercept RPC log events emitted by REST API interfaces.
@@ -451,17 +461,19 @@
_handleRpcLog(e) { _handleRpcLog(e) {
this.$.reporting.reportRpcTiming(e.detail.anonymizedUrl, this.$.reporting.reportRpcTiming(e.detail.anonymizedUrl,
e.detail.elapsed); e.detail.elapsed);
}, }
_mobileSearchToggle(e) { _mobileSearchToggle(e) {
this.mobileSearch = !this.mobileSearch; this.mobileSearch = !this.mobileSearch;
}, }
getThemeEndpoint() { getThemeEndpoint() {
// For now, we only have dark mode and light mode // For now, we only have dark mode and light mode
return window.localStorage.getItem('dark-theme') ? return window.localStorage.getItem('dark-theme') ?
'app-theme-dark' : 'app-theme-dark' :
'app-theme-light'; 'app-theme-light';
}, }
}); }
customElements.define(GrAppElement.is, GrAppElement);
})(); })();

View File

@@ -17,7 +17,11 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrApp extends Polymer.GestureEventListeners(
is: 'gr-app', Polymer.LegacyElementMixin(
}); Polymer.Element)) {
static get is() { return 'gr-app'; }
}
customElements.define(GrApp.is, GrApp);
})(); })();

View File

@@ -19,10 +19,13 @@
const INIT_PROPERTIES_TIMEOUT_MS = 10000; const INIT_PROPERTIES_TIMEOUT_MS = 10000;
Polymer({ class GrEndpointDecorator extends Polymer.GestureEventListeners(
is: 'gr-endpoint-decorator', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-endpoint-decorator'; }
properties: { static get properties() {
return {
name: String, name: String,
/** @type {!Map} */ /** @type {!Map} */
_domHooks: { _domHooks: {
@@ -39,13 +42,15 @@
type: Map, type: Map,
value() { return new Map(); }, value() { return new Map(); },
}, },
}, };
}
detached() { detached() {
super.detached();
for (const [el, domHook] of this._domHooks) { for (const [el, domHook] of this._domHooks) {
domHook.handleInstanceDetached(el); domHook.handleInstanceDetached(el);
} }
}, }
/** /**
* @suppress {checkTypes} * @suppress {checkTypes}
@@ -54,7 +59,7 @@
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
(this.importHref || Polymer.importHref)(url, resolve, reject); (this.importHref || Polymer.importHref)(url, resolve, reject);
}); });
}, }
_initDecoration(name, plugin) { _initDecoration(name, plugin) {
const el = document.createElement(name); const el = document.createElement(name);
@@ -62,7 +67,7 @@
this.getContentChildren().find( this.getContentChildren().find(
el => el.nodeName !== 'GR-ENDPOINT-PARAM')) el => el.nodeName !== 'GR-ENDPOINT-PARAM'))
.then(el => this._appendChild(el)); .then(el => this._appendChild(el));
}, }
_initReplacement(name, plugin) { _initReplacement(name, plugin) {
this.getContentChildNodes() this.getContentChildNodes()
@@ -71,12 +76,12 @@
const el = document.createElement(name); const el = document.createElement(name);
return this._initProperties(el, plugin).then( return this._initProperties(el, plugin).then(
el => this._appendChild(el)); el => this._appendChild(el));
}, }
_getEndpointParams() { _getEndpointParams() {
return Array.from( return Array.from(
Polymer.dom(this).querySelectorAll('gr-endpoint-param')); Polymer.dom(this).querySelectorAll('gr-endpoint-param'));
}, }
/** /**
* @param {!Element} el * @param {!Element} el
@@ -109,11 +114,11 @@
clearTimeout(timeoutId); clearTimeout(timeoutId);
return el; return el;
}); });
}, }
_appendChild(el) { _appendChild(el) {
return Polymer.dom(this.root).appendChild(el); return Polymer.dom(this.root).appendChild(el);
}, }
_initModule({moduleName, plugin, type, domHook}) { _initModule({moduleName, plugin, type, domHook}) {
const name = plugin.getPluginName() + '.' + moduleName; const name = plugin.getPluginName() + '.' + moduleName;
@@ -137,9 +142,10 @@
domHook.handleInstanceAttached(el); domHook.handleInstanceAttached(el);
this._domHooks.set(el, domHook); this._domHooks.set(el, domHook);
}); });
}, }
ready() { ready() {
super.ready();
Gerrit._endpoints.onNewEndpoint(this.name, this._initModule.bind(this)); Gerrit._endpoints.onNewEndpoint(this.name, this._initModule.bind(this));
Gerrit.awaitPluginsLoaded().then(() => Promise.all( Gerrit.awaitPluginsLoaded().then(() => Promise.all(
Gerrit._endpoints.getPlugins(this.name).map( Gerrit._endpoints.getPlugins(this.name).map(
@@ -149,6 +155,8 @@
.getDetails(this.name) .getDetails(this.name)
.forEach(this._initModule, this) .forEach(this._initModule, this)
); );
}, }
}); }
customElements.define(GrEndpointDecorator.is, GrEndpointDecorator);
})(); })();

View File

@@ -17,17 +17,21 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrEndpointParam extends Polymer.GestureEventListeners(
is: 'gr-endpoint-param', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-endpoint-param'; }
properties: { static get properties() {
return {
name: String, name: String,
value: { value: {
type: Object, type: Object,
notify: true, notify: true,
observer: '_valueChanged', observer: '_valueChanged',
}, },
}, };
}
_valueChanged(newValue, oldValue) { _valueChanged(newValue, oldValue) {
/* In polymer 2 the following change was made: /* In polymer 2 the following change was made:
@@ -42,6 +46,8 @@
value: newValue, value: newValue,
}; };
this.dispatchEvent(new CustomEvent('value-changed', {detail})); this.dispatchEvent(new CustomEvent('value-changed', {detail}));
}, }
}); }
customElements.define(GrEndpointParam.is, GrEndpointParam);
})(); })();

View File

@@ -17,10 +17,13 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrExternalStyle extends Polymer.GestureEventListeners(
is: 'gr-external-style', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-external-style'; }
properties: { static get properties() {
return {
name: String, name: String,
_urlsImported: { _urlsImported: {
type: Array, type: Array,
@@ -30,7 +33,8 @@
type: Array, type: Array,
value() { return []; }, value() { return []; },
}, },
}, };
}
/** /**
* @suppress {checkTypes} * @suppress {checkTypes}
@@ -41,7 +45,7 @@
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
(this.importHref || Polymer.importHref)(url, resolve, reject); (this.importHref || Polymer.importHref)(url, resolve, reject);
}); });
}, }
_applyStyle(name) { _applyStyle(name) {
if (this._stylesApplied.includes(name)) { return; } if (this._stylesApplied.includes(name)) { return; }
@@ -56,7 +60,7 @@
const topEl = document.getElementsByTagName('body')[0]; const topEl = document.getElementsByTagName('body')[0];
topEl.insertBefore(cs, topEl.firstChild); topEl.insertBefore(cs, topEl.firstChild);
Polymer.updateStyles(); Polymer.updateStyles();
}, }
_importAndApply() { _importAndApply() {
Promise.all(Gerrit._endpoints.getPlugins(this.name).map( Promise.all(Gerrit._endpoints.getPlugins(this.name).map(
@@ -67,14 +71,18 @@
this._applyStyle(name); this._applyStyle(name);
} }
}); });
}, }
attached() { attached() {
super.attached();
this._importAndApply(); this._importAndApply();
}, }
ready() { ready() {
super.ready();
Gerrit.awaitPluginsLoaded().then(() => this._importAndApply()); Gerrit.awaitPluginsLoaded().then(() => this._importAndApply());
}, }
}); }
customElements.define(GrExternalStyle.is, GrExternalStyle);
})(); })();

View File

@@ -17,15 +17,19 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ class GrPluginHost extends Polymer.GestureEventListeners(
is: 'gr-plugin-host', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-plugin-host'; }
properties: { static get properties() {
return {
config: { config: {
type: Object, type: Object,
observer: '_configChanged', observer: '_configChanged',
}, },
}, };
}
_configChanged(config) { _configChanged(config) {
const plugins = config.plugin; const plugins = config.plugin;
@@ -50,7 +54,7 @@
} }
Gerrit._loadPlugins(pluginsPending, pluginOpts); Gerrit._loadPlugins(pluginsPending, pluginOpts);
}, }
/** /**
* Omit .js plugins that have .html counterparts. * Omit .js plugins that have .html counterparts.
@@ -61,6 +65,8 @@
const counterpart = url.replace(/\.js$/, '.html'); const counterpart = url.replace(/\.js$/, '.html');
return !htmlPlugins.includes(counterpart); return !htmlPlugins.includes(counterpart);
}); });
}, }
}); }
customElements.define(GrPluginHost.is, GrPluginHost);
})(); })();

View File

@@ -17,19 +17,23 @@
(function(window) { (function(window) {
'use strict'; 'use strict';
Polymer({ class GrPluginPopup extends Polymer.GestureEventListeners(
is: 'gr-plugin-popup', Polymer.LegacyElementMixin(
Polymer.Element)) {
static get is() { return 'gr-plugin-popup'; }
get opened() { get opened() {
return this.$.overlay.opened; return this.$.overlay.opened;
}, }
open() { open() {
return this.$.overlay.open(); return this.$.overlay.open();
}, }
close() { close() {
this.$.overlay.close(); this.$.overlay.close();
}, }
}); }
customElements.define(GrPluginPopup.is, GrPluginPopup);
})(window); })(window);

View File

@@ -17,16 +17,23 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-account-info', * @appliesMixin Gerrit.FireMixin
*/
class GrAccountInfo extends Polymer.mixinBehaviors( [
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-account-info'; }
/** /**
* Fired when account details are changed. * Fired when account details are changed.
* *
* @event account-detail-update * @event account-detail-update
*/ */
properties: { static get properties() {
return {
usernameMutable: { usernameMutable: {
type: Boolean, type: Boolean,
notify: true, notify: true,
@@ -66,16 +73,15 @@
type: String, type: String,
value: '', value: '',
}, },
}, };
}
behaviors: [ static get observers() {
Gerrit.FireBehavior, return [
],
observers: [
'_nameChanged(_account.name)', '_nameChanged(_account.name)',
'_statusChanged(_account.status)', '_statusChanged(_account.status)',
], ];
}
loadData() { loadData() {
const promises = []; const promises = [];
@@ -104,7 +110,7 @@
return Promise.all(promises).then(() => { return Promise.all(promises).then(() => {
this._loading = false; this._loading = false;
}); });
}, }
save() { save() {
if (!this.hasUnsavedChanges) { if (!this.hasUnsavedChanges) {
@@ -123,29 +129,29 @@
this._saving = false; this._saving = false;
this.fire('account-detail-update'); this.fire('account-detail-update');
}); });
}, }
_maybeSetName() { _maybeSetName() {
return this._hasNameChange && this.nameMutable ? return this._hasNameChange && this.nameMutable ?
this.$.restAPI.setAccountName(this._account.name) : this.$.restAPI.setAccountName(this._account.name) :
Promise.resolve(); Promise.resolve();
}, }
_maybeSetUsername() { _maybeSetUsername() {
return this._hasUsernameChange && this.usernameMutable ? return this._hasUsernameChange && this.usernameMutable ?
this.$.restAPI.setAccountUsername(this._username) : this.$.restAPI.setAccountUsername(this._username) :
Promise.resolve(); Promise.resolve();
}, }
_maybeSetStatus() { _maybeSetStatus() {
return this._hasStatusChange ? return this._hasStatusChange ?
this.$.restAPI.setAccountStatus(this._account.status) : this.$.restAPI.setAccountStatus(this._account.status) :
Promise.resolve(); Promise.resolve();
}, }
_computeHasUnsavedChanges(nameChanged, usernameChanged, statusChanged) { _computeHasUnsavedChanges(nameChanged, usernameChanged, statusChanged) {
return nameChanged || usernameChanged || statusChanged; return nameChanged || usernameChanged || statusChanged;
}, }
_computeUsernameMutable(config, username) { _computeUsernameMutable(config, username) {
// Polymer 2: check for undefined // Polymer 2: check for undefined
@@ -159,34 +165,34 @@
// Username may not be changed once it is set. // Username may not be changed once it is set.
return config.auth.editable_account_fields.includes('USER_NAME') && return config.auth.editable_account_fields.includes('USER_NAME') &&
!username; !username;
}, }
_computeNameMutable(config) { _computeNameMutable(config) {
return config.auth.editable_account_fields.includes('FULL_NAME'); return config.auth.editable_account_fields.includes('FULL_NAME');
}, }
_statusChanged() { _statusChanged() {
if (this._loading) { return; } if (this._loading) { return; }
this._hasStatusChange = true; this._hasStatusChange = true;
}, }
_usernameChanged() { _usernameChanged() {
if (this._loading || !this._account) { return; } if (this._loading || !this._account) { return; }
this._hasUsernameChange = this._hasUsernameChange =
(this._account.username || '') !== (this._username || ''); (this._account.username || '') !== (this._username || '');
}, }
_nameChanged() { _nameChanged() {
if (this._loading) { return; } if (this._loading) { return; }
this._hasNameChange = true; this._hasNameChange = true;
}, }
_handleKeydown(e) { _handleKeydown(e) {
if (e.keyCode === 13) { // Enter if (e.keyCode === 13) { // Enter
e.stopPropagation(); e.stopPropagation();
this.save(); this.save();
} }
}, }
_hideAvatarChangeUrl(avatarChangeUrl) { _hideAvatarChangeUrl(avatarChangeUrl) {
if (!avatarChangeUrl) { if (!avatarChangeUrl) {
@@ -194,6 +200,8 @@
} }
return ''; return '';
}, }
}); }
customElements.define(GrAccountInfo.is, GrAccountInfo);
})(); })();

View File

@@ -17,33 +17,41 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-agreements-list', * @appliesMixin Gerrit.BaseUrlMixin
*/
properties: { class GrAgreementsList extends Polymer.mixinBehaviors( [
_agreements: Array,
},
behaviors: [
Gerrit.BaseUrlBehavior, Gerrit.BaseUrlBehavior,
], ], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-agreements-list'; }
static get properties() {
return {
_agreements: Array,
};
}
attached() { attached() {
super.attached();
this.loadData(); this.loadData();
}, }
loadData() { loadData() {
return this.$.restAPI.getAccountAgreements().then(agreements => { return this.$.restAPI.getAccountAgreements().then(agreements => {
this._agreements = agreements; this._agreements = agreements;
}); });
}, }
getUrl() { getUrl() {
return this.getBaseUrl() + '/settings/new-agreement'; return this.getBaseUrl() + '/settings/new-agreement';
}, }
getUrlBase(item) { getUrlBase(item) {
return this.getBaseUrl() + '/' + item; return this.getBaseUrl() + '/' + item;
}, }
}); }
customElements.define(GrAgreementsList.is, GrAgreementsList);
})(); })();

View File

@@ -17,10 +17,18 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-change-table-editor', * @appliesMixin Gerrit.ChangeTableMixin
*/
class GrChangeTableEditor extends Polymer.mixinBehaviors( [
Gerrit.ChangeTableBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-change-table-editor'; }
properties: { static get properties() {
return {
displayedColumns: { displayedColumns: {
type: Array, type: Array,
notify: true, notify: true,
@@ -29,11 +37,8 @@
type: Boolean, type: Boolean,
notify: true, notify: true,
}, },
}, };
}
behaviors: [
Gerrit.ChangeTableBehavior,
],
/** /**
* Get the list of enabled column names from whichever checkboxes are * Get the list of enabled column names from whichever checkboxes are
@@ -45,7 +50,7 @@
.querySelectorAll('.checkboxContainer input:not([name=number])')) .querySelectorAll('.checkboxContainer input:not([name=number])'))
.filter(checkbox => checkbox.checked) .filter(checkbox => checkbox.checked)
.map(checkbox => checkbox.name); .map(checkbox => checkbox.name);
}, }
/** /**
* Handle a click on a checkbox container and relay the click to the checkbox it * Handle a click on a checkbox container and relay the click to the checkbox it
@@ -55,7 +60,7 @@
const checkbox = Polymer.dom(e.target).querySelector('input'); const checkbox = Polymer.dom(e.target).querySelector('input');
if (!checkbox) { return; } if (!checkbox) { return; }
checkbox.click(); checkbox.click();
}, }
/** /**
* Handle a click on the number checkbox and update the showNumber property * Handle a click on the number checkbox and update the showNumber property
@@ -63,7 +68,7 @@
*/ */
_handleNumberCheckboxClick(e) { _handleNumberCheckboxClick(e) {
this.showNumber = Polymer.dom(e).rootTarget.checked; this.showNumber = Polymer.dom(e).rootTarget.checked;
}, }
/** /**
* Handle a click on a displayed column checkboxes (excluding number) and * Handle a click on a displayed column checkboxes (excluding number) and
@@ -71,6 +76,8 @@
*/ */
_handleTargetClick(e) { _handleTargetClick(e) {
this.set('displayedColumns', this._getDisplayedColumns()); this.set('displayedColumns', this._getDisplayedColumns());
}, }
}); }
customElements.define(GrChangeTableEditor.is, GrChangeTableEditor);
})(); })();

View File

@@ -17,10 +17,20 @@
(function() { (function() {
'use strict'; 'use strict';
Polymer({ /**
is: 'gr-cla-view', * @appliesMixin Gerrit.BaseUrlMixin
* @appliesMixin Gerrit.FireMixin
*/
class GrClaView extends Polymer.mixinBehaviors( [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
], Polymer.GestureEventListeners(
Polymer.LegacyElementMixin(
Polymer.Element))) {
static get is() { return 'gr-cla-view'; }
properties: { static get properties() {
return {
_groups: Object, _groups: Object,
/** @type {?} */ /** @type {?} */
_serverConfig: Object, _serverConfig: Object,
@@ -32,18 +42,15 @@
value: false, value: false,
}, },
_agreementsUrl: String, _agreementsUrl: String,
}, };
}
behaviors: [
Gerrit.BaseUrlBehavior,
Gerrit.FireBehavior,
],
attached() { attached() {
super.attached();
this.loadData(); this.loadData();
this.fire('title-change', {title: 'New Contributor Agreement'}); this.fire('title-change', {title: 'New Contributor Agreement'});
}, }
loadData() { loadData() {
const promises = []; const promises = [];
@@ -62,7 +69,7 @@
})); }));
return Promise.all(promises); return Promise.all(promises);
}, }
_getAgreementsUrl(configUrl) { _getAgreementsUrl(configUrl) {
let url; let url;
@@ -76,14 +83,14 @@
} }
return url; return url;
}, }
_handleShowAgreement(e) { _handleShowAgreement(e) {
this._agreementName = e.target.getAttribute('data-name'); this._agreementName = e.target.getAttribute('data-name');
this._agreementsUrl = this._agreementsUrl =
this._getAgreementsUrl(e.target.getAttribute('data-url')); this._getAgreementsUrl(e.target.getAttribute('data-url'));
this._showAgreements = true; this._showAgreements = true;
}, }
_handleSaveAgreements(e) { _handleSaveAgreements(e) {
this._createToast('Agreement saving...'); this._createToast('Agreement saving...');
@@ -99,16 +106,16 @@
this._agreementsText = ''; this._agreementsText = '';
this._showAgreements = false; this._showAgreements = false;
}); });
}, }
_createToast(message) { _createToast(message) {
this.dispatchEvent(new CustomEvent( this.dispatchEvent(new CustomEvent(
'show-alert', {detail: {message}, bubbles: true, composed: true})); 'show-alert', {detail: {message}, bubbles: true, composed: true}));
}, }
_computeShowAgreementsClass(agreements) { _computeShowAgreementsClass(agreements) {
return agreements ? 'show' : ''; return agreements ? 'show' : '';
}, }
_disableAggreements(item, groups, signedAgreements) { _disableAggreements(item, groups, signedAgreements) {
for (const group of groups) { for (const group of groups) {
@@ -119,16 +126,16 @@
} }
} }
return false; return false;
}, }
_hideAggreements(item, groups, signedAgreements) { _hideAggreements(item, groups, signedAgreements) {
return this._disableAggreements(item, groups, signedAgreements) ? return this._disableAggreements(item, groups, signedAgreements) ?
'' : 'hide'; '' : 'hide';
}, }
_disableAgreementsText(text) { _disableAgreementsText(text) {
return text.toLowerCase() === 'i agree' ? false : true; return text.toLowerCase() === 'i agree' ? false : true;
}, }
// This checks for auto_verify_group, // This checks for auto_verify_group,
// if specified it returns 'hideAgreementsTextBox' which // if specified it returns 'hideAgreementsTextBox' which
@@ -148,6 +155,8 @@
} }
} }
} }
}, }
}); }
customElements.define(GrClaView.is, GrClaView);
})(); })();

Some files were not shown because too many files have changed in this diff Show More