Merge "Update highlight.js to include soy" into stable-2.16
diff --git a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.js b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.js
index 91c16c3..b04bbfd 100644
--- a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.js
+++ b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.js
@@ -91,7 +91,7 @@
 
   // All of the ops, with corresponding negations.
   const SEARCH_OPERATORS_WITH_NEGATIONS =
-      SEARCH_OPERATORS.concat(SEARCH_OPERATORS.map(op => `-${op}`));
+    SEARCH_OPERATORS.concat(SEARCH_OPERATORS.map(op => `-${op}`));
 
   const MAX_AUTOCOMPLETE_RESULTS = 10;
 
@@ -185,7 +185,16 @@
       } else {
         target.blur();
       }
-      if (this._inputVal) {
+      const trimmedInput = this._inputVal && this._inputVal.trim();
+      if (trimmedInput) {
+        const predefinedOpOnlyQuery = SEARCH_OPERATORS_WITH_NEGATIONS.some(
+            op => {
+              return op.endsWith(':') && op === trimmedInput;
+            }
+        );
+        if (predefinedOpOnlyQuery) {
+          return;
+        }
         this.dispatchEvent(new CustomEvent('handle-search', {
           detail: {inputVal: this._inputVal},
         }));
diff --git a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar_test.html b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar_test.html
index 93e0e307..1bc3c9d 100644
--- a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar_test.html
+++ b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar_test.html
@@ -91,6 +91,42 @@
       assert.isFalse(searchSpy.called);
     });
 
+    test('Predefined query op with no predication doesnt trigger nav', () => {
+      const searchSpy = sandbox.spy();
+      element.addEventListener('handle-search', searchSpy);
+      element.value = 'added:';
+      MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
+          null, 'enter');
+      assert.isFalse(searchSpy.called);
+    });
+
+    test('predefined predicate query triggers nav', () => {
+      const searchSpy = sandbox.spy();
+      element.addEventListener('handle-search', searchSpy);
+      element.value = 'age:1week';
+      MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
+          null, 'enter');
+      assert.isTrue(searchSpy.called);
+    });
+
+    test('undefined predicate query triggers nav', () => {
+      const searchSpy = sandbox.spy();
+      element.addEventListener('handle-search', searchSpy);
+      element.value = 'random:1week';
+      MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
+          null, 'enter');
+      assert.isTrue(searchSpy.called);
+    });
+
+    test('empty undefined predicate query triggers nav', () => {
+      const searchSpy = sandbox.spy();
+      element.addEventListener('handle-search', searchSpy);
+      element.value = 'random:';
+      MockInteractions.pressAndReleaseKeyOn(element.$.searchInput.$.input, 13,
+          null, 'enter');
+      assert.isTrue(searchSpy.called);
+    });
+
     test('keyboard shortcuts', () => {
       const focusSpy = sandbox.spy(element.$.searchInput, 'focus');
       const selectAllSpy = sandbox.spy(element.$.searchInput, 'selectAll');