Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1351)

Unified Diff: appengine/monorail/static/js/tracker/tracker-nav.js

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: appengine/monorail/static/js/tracker/tracker-nav.js
diff --git a/appengine/monorail/static/js/tracker/tracker-nav.js b/appengine/monorail/static/js/tracker/tracker-nav.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b55f05ae33793373857bae935e3e12a2d649f31
--- /dev/null
+++ b/appengine/monorail/static/js/tracker/tracker-nav.js
@@ -0,0 +1,181 @@
+/* Copyright 2016 The Chromium Authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file or at
+ * https://developers.google.com/open-source/licenses/bsd
+ */
+
+/**
+ * This file contains JS functions that implement various navigation
+ * features of Monorail.
+ */
+
+
+/**
+ * Navigate the browser to the given URL.
+ * @param {string} url The URL of the page to browse.
+ * @param {boolean} newWindow Open a new tab or window.
+ */
+function TKR_go(url, newWindow) {
+ if (newWindow)
+ window.open(url, '_blank');
+ else
+ document.location = url;
+}
+
+
+/**
+ * Tell the browser to scroll to the given anchor on the current page.
+ * @param {string} anchor Name of the <a name="xxx"> anchor on the page.
+ */
+function TKR_goToAnchor(anchor) {
+ document.location.hash = anchor;
+}
+
+
+/**
+ * Get the user-editable colspec form field. This text field is normally
+ * display:none, but it is shown when the user chooses "Edit columns...".
+ * We need a function to get this element because there are multiple form
+ * fields on the page with name="colspec", and an IE misfeature sets their
+ * id attributes as well, which makes document.getElementById() fail.
+ * @return {Element} user editable colspec form field.
+ */
+function TKR_getColspecElement() {
+ return document.getElementById('colspec_field').firstChild;
+}
+
+
+/**
+ * Get the hidden form field for colspec. This is a type="hidden" input field
+ * that is submitted as part of the artfact search query. We need a
+ * function to get this element because there are multiple form fields on the
+ * page with name="colspec", and an IE misfeature sets their id attributes
+ * as well, which makes document.getElementById() fail.
+ * @return {Element} colspec hidden form field.
+ */
+function TKR_getSearchColspecElement() {
+ return document.getElementById('search_colspec').firstChild;
+}
+
+
+/**
+ * Get the artifact search form field. This is a visible text field where
+ * the user enters a query for issues. This function
+ * is needed because there is also the project search field on the each page,
+ * and it has name="q". An IE misfeature confuses name="..." with id="...".
+ * @return {Element} artifact query form field, or undefined.
+ */
+function TKR_getArtifactSearchField() {
+ var qq = document.getElementById('qq');
+ return qq ? qq.firstChild : undefined;
+}
+
+
+/**
+ * Resize the artifiact search box to be bigger when the user has a long
+ * query.
+ */
+var MAX_ARTIFACT_SEARCH_FIELD_SIZE = 75;
+var AUTOSIZE_STEP = 3;
+
+function TKR_autosizeArtifactSerchField() {
+ var qq = TKR_getArtifactSearchField();
+ if (qq) {
+ var new_size = qq.value.length + AUTOSIZE_STEP;
+ if (new_size > MAX_ARTIFACT_SEARCH_FIELD_SIZE) {
+ new_size = MAX_ARTIFACT_SEARCH_FIELD_SIZE;
+ }
+ if (new_size > qq.size) {
+ qq.size = new_size;
+ }
+ }
+}
+
+window.setInterval(TKR_autosizeArtifactSerchField, 700);
+
+
+/**
+ * Build a query string for all the common contextual values that we use.
+ */
+function TKR_formatContextQueryArgs() {
+ var args = "";
+ var colspec = TKR_getColspecElement().value;
+ if (_ctxCan != 2) args += "&can=" + _ctxCan;
+ if (_ctxQuery != "") args += "&q=" + encodeURIComponent(_ctxQuery);
+ if (_ctxSortspec != "") args += "&sort=" + _ctxSortspec;
+ if (_ctxGroupBy != "") args += "&groupby=" + _ctxGroupBy;
+ if (colspec != _ctxDefaultColspec) args += "&colspec=" + colspec;
+ if (_ctxStart != 0) args += "&start=" + _ctxStart;
+ if (_ctxNum != _ctxResultsPerPage) args += "&num=" + _ctxNum;
+ return args;
+}
+
+// Fields that should use ":" when filtering.
+var _PRETOKENIZED_FIELDS = [
+ 'owner', 'reporter', 'cc', 'commentby', 'component'];
+
+/**
+ * The user wants to narrow his/her search results by adding a search term
+ * for the given prefix and value. Reload the issue list page with that
+ * additional search term.
+ * @param {string} prefix Field or label prefix, e.g., "Priority".
+ * @param {string} suffix Field or label value, e.g., "High".
+ */
+function TKR_filterTo(prefix, suffix) {
+ var newQuery = TKR_getArtifactSearchField().value;
+ if (newQuery != '') newQuery += ' ';
+
+ var op = '=';
+ for (var i = 0; i < _PRETOKENIZED_FIELDS.length; i++) {
+ if (prefix == _PRETOKENIZED_FIELDS[i]) {
+ op = ':';
+ break;
+ }
+ }
+
+ newQuery += prefix + op + suffix;
+ var url = 'list?can=' + $('can').value + '&q=' + newQuery;
+ if ($('sort') && $('sort').value) url += '&sort=' + $('sort').value;
+ url += '&colspec=' + TKR_getColspecElement().value;
+ TKR_go(url);
+}
+
+
+/**
+ * The user wants to sort his/her search results by adding a sort spec
+ * for the given column. Reload the issue list page with that
+ * additional sort spec.
+ * @param {string} colname Field or label prefix, e.g., "Priority".
+ * @param {boolean} descending True if the values should be reversed.
+ */
+function TKR_addSort(colname, descending) {
+ var existingSortSpec = '';
+ if ($('sort')) { existingSortSpec = $('sort').value; }
+ var oldSpecs = existingSortSpec.split(/ +/);
+ var sortDirective = colname;
+ if (descending) sortDirective = '-' + colname;
+ var specs = [sortDirective];
+ for (var i = 0; i < oldSpecs.length; i++) {
+ if (oldSpecs[i] != "" && oldSpecs[i] != colname &&
+ oldSpecs[i] != '-' + colname) {
+ specs.push(oldSpecs[i])
+ }
+ }
+
+ var url = ('list?can='+ $('can').value + '&q=' +
+ TKR_getArtifactSearchField().value);
+ url += '&sort=' + specs.join('+');
+ url += '&colspec=' + TKR_getColspecElement().value;
+ TKR_go(url)
+}
+
+/** Convenience function for sorting in ascending order. */
+function TKR_sortUp(colname) {
+ TKR_addSort(colname, false);
+}
+
+/** Convenience function for sorting in descending order. */
+function TKR_sortDown(colname) {
+ TKR_addSort(colname, true);
+}
« no previous file with comments | « appengine/monorail/static/js/tracker/tracker-keystrokes.js ('k') | appengine/monorail/static/js/tracker/tracker-onload.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698