| <!-- |
| @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. |
| --> |
| <script src="../../scripts/util.js"></script> |
| <script> |
| (function(window) { |
| 'use strict'; |
| |
| window.Gerrit = window.Gerrit || {}; |
| /** @polymerBehavior Gerrit.PathListBehavior */ |
| Gerrit.PathListBehavior = { |
| |
| COMMIT_MESSAGE_PATH: '/COMMIT_MSG', |
| MERGE_LIST_PATH: '/MERGE_LIST', |
| |
| /** |
| * @param {string} a |
| * @param {string} b |
| * @return {number} |
| */ |
| specialFilePathCompare(a, b) { |
| // The commit message always goes first. |
| if (a === Gerrit.PathListBehavior.COMMIT_MESSAGE_PATH) { |
| return -1; |
| } |
| if (b === Gerrit.PathListBehavior.COMMIT_MESSAGE_PATH) { |
| return 1; |
| } |
| |
| // The merge list always comes next. |
| if (a === Gerrit.PathListBehavior.MERGE_LIST_PATH) { |
| return -1; |
| } |
| if (b === Gerrit.PathListBehavior.MERGE_LIST_PATH) { |
| return 1; |
| } |
| |
| const aLastDotIndex = a.lastIndexOf('.'); |
| const aExt = a.substr(aLastDotIndex + 1); |
| const aFile = a.substr(0, aLastDotIndex) || a; |
| |
| const bLastDotIndex = b.lastIndexOf('.'); |
| const bExt = b.substr(bLastDotIndex + 1); |
| const bFile = b.substr(0, bLastDotIndex) || b; |
| |
| // Sort header files above others with the same base name. |
| const headerExts = ['h', 'hxx', 'hpp']; |
| if (aFile.length > 0 && aFile === bFile) { |
| if (headerExts.includes(aExt) && headerExts.includes(bExt)) { |
| return a.localeCompare(b); |
| } |
| if (headerExts.includes(aExt)) { |
| return -1; |
| } |
| if (headerExts.includes(bExt)) { |
| return 1; |
| } |
| } |
| return aFile.localeCompare(bFile) || a.localeCompare(b); |
| }, |
| |
| computeDisplayPath(path) { |
| if (path === Gerrit.PathListBehavior.COMMIT_MESSAGE_PATH) { |
| return 'Commit message'; |
| } else if (path === Gerrit.PathListBehavior.MERGE_LIST_PATH) { |
| return 'Merge list'; |
| } |
| return path; |
| }, |
| |
| computeTruncatedPath(path) { |
| return Gerrit.PathListBehavior.truncatePath( |
| Gerrit.PathListBehavior.computeDisplayPath(path)); |
| }, |
| |
| /** |
| * Truncates URLs to display filename only |
| * Example |
| * // returns '.../text.html' |
| * util.truncatePath.('dir/text.html'); |
| * Example |
| * // returns 'text.html' |
| * util.truncatePath.('text.html'); |
| * |
| * @param {string} path |
| * @param {number=} opt_threshold |
| * @return {string} Returns the truncated value of a URL. |
| */ |
| truncatePath(path, opt_threshold) { |
| const threshold = opt_threshold || 1; |
| const pathPieces = path.split('/'); |
| |
| if (pathPieces.length <= threshold) { return path; } |
| |
| const index = pathPieces.length - threshold; |
| // Character is an ellipsis. |
| return `\u2026/${pathPieces.slice(index).join('/')}`; |
| }, |
| }; |
| })(window); |
| </script> |