 8cdc76ba4c
			
		
	
	8cdc76ba4c
	
	
	
		
			
			These tags are preserved by the Closure compiler and vulcanize in order to serve the license notices embedded in the outputs. In a standalone Gerrit server, these license are also covered in the LICENSES.txt served with the documentation. When serving PG assets from a CDN, it's less obvious what the corresponding LICENSES.txt file is, since the CDN is not directly linked to a running Gerrit server. Safer to embed the licenses in the assets themselves. Change-Id: Id1add1451fad1baa7916882a6bda02c326ccc988
		
			
				
	
	
		
			117 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright (C) 2016 The Android Open Source Project
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  * http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| (function() {
 | |
|   'use strict';
 | |
| 
 | |
|   Polymer({
 | |
|     is: 'gr-selection-action-box',
 | |
| 
 | |
|     /**
 | |
|      * Fired when the comment creation action was taken (hotkey, click).
 | |
|      *
 | |
|      * @event create-comment
 | |
|      */
 | |
| 
 | |
|     properties: {
 | |
|       keyEventTarget: {
 | |
|         type: Object,
 | |
|         value() { return document.body; },
 | |
|       },
 | |
|       range: {
 | |
|         type: Object,
 | |
|         value: {
 | |
|           startLine: NaN,
 | |
|           startChar: NaN,
 | |
|           endLine: NaN,
 | |
|           endChar: NaN,
 | |
|         },
 | |
|       },
 | |
|       positionBelow: Boolean,
 | |
|       side: {
 | |
|         type: String,
 | |
|         value: '',
 | |
|       },
 | |
|     },
 | |
| 
 | |
|     behaviors: [
 | |
|       Gerrit.KeyboardShortcutBehavior,
 | |
|     ],
 | |
| 
 | |
|     listeners: {
 | |
|       mousedown: '_handleMouseDown', // See https://crbug.com/gerrit/4767
 | |
|     },
 | |
| 
 | |
|     keyBindings: {
 | |
|       c: '_handleCKey',
 | |
|     },
 | |
| 
 | |
|     placeAbove(el) {
 | |
|       Polymer.dom.flush();
 | |
|       const rect = this._getTargetBoundingRect(el);
 | |
|       const boxRect = this.$.tooltip.getBoundingClientRect();
 | |
|       const parentRect = this.parentElement.getBoundingClientRect();
 | |
|       this.style.top =
 | |
|           rect.top - parentRect.top - boxRect.height - 6 + 'px';
 | |
|       this.style.left =
 | |
|           rect.left - parentRect.left + (rect.width - boxRect.width) / 2 + 'px';
 | |
|     },
 | |
| 
 | |
|     placeBelow(el) {
 | |
|       Polymer.dom.flush();
 | |
|       const rect = this._getTargetBoundingRect(el);
 | |
|       const boxRect = this.$.tooltip.getBoundingClientRect();
 | |
|       const parentRect = this.parentElement.getBoundingClientRect();
 | |
|       this.style.top =
 | |
|           rect.top - parentRect.top + boxRect.height - 6 + 'px';
 | |
|       this.style.left =
 | |
|           rect.left - parentRect.left + (rect.width - boxRect.width) / 2 + 'px';
 | |
|     },
 | |
| 
 | |
|     _getTargetBoundingRect(el) {
 | |
|       let rect;
 | |
|       if (el instanceof Text) {
 | |
|         const range = document.createRange();
 | |
|         range.selectNode(el);
 | |
|         rect = range.getBoundingClientRect();
 | |
|         range.detach();
 | |
|       } else {
 | |
|         rect = el.getBoundingClientRect();
 | |
|       }
 | |
|       return rect;
 | |
|     },
 | |
| 
 | |
|     _handleCKey(e) {
 | |
|       if (this.shouldSuppressKeyboardShortcut(e) ||
 | |
|           this.modifierPressed(e)) { return; }
 | |
| 
 | |
|       e.preventDefault();
 | |
|       this._fireCreateComment();
 | |
|     },
 | |
| 
 | |
|     _handleMouseDown(e) {
 | |
|       if (e.button !== 0) { return; } // 0 = main button
 | |
|       e.preventDefault();
 | |
|       e.stopPropagation();
 | |
|       this._fireCreateComment();
 | |
|     },
 | |
| 
 | |
|     _fireCreateComment() {
 | |
|       this.fire('create-comment', {side: this.side, range: this.range});
 | |
|     },
 | |
|   });
 | |
| })();
 |