OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 <include src="../uber/uber_utils.js"> | 5 <include src="../uber/uber_utils.js"> |
6 | 6 |
7 /////////////////////////////////////////////////////////////////////////////// | 7 /////////////////////////////////////////////////////////////////////////////// |
8 // Globals: | 8 // Globals: |
9 /** @const */ var RESULTS_PER_PAGE = 150; | 9 /** @const */ var RESULTS_PER_PAGE = 150; |
10 | 10 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 // Whether this is the continuation of a previous day. | 65 // Whether this is the continuation of a previous day. |
66 this.continued = continued; | 66 this.continued = continued; |
67 } | 67 } |
68 | 68 |
69 // Visit, public: ------------------------------------------------------------- | 69 // Visit, public: ------------------------------------------------------------- |
70 | 70 |
71 /** | 71 /** |
72 * Returns a dom structure for a browse page result or a search page result. | 72 * Returns a dom structure for a browse page result or a search page result. |
73 * @param {Object} propertyBag A bag of configuration properties, false by | 73 * @param {Object} propertyBag A bag of configuration properties, false by |
74 * default: | 74 * default: |
75 * <ul> | 75 * - isSearchResult: Whether or not the result is a search result. |
76 * <li>isSearchResult: Whether or not the result is a search result.</li> | 76 * - addTitleFavicon: Whether or not the favicon should be added. |
77 * <li>addTitleFavicon: Whether or not the favicon should be added.</li> | |
78 * </ul> | |
79 * @return {Node} A DOM node to represent the history entry or search result. | 77 * @return {Node} A DOM node to represent the history entry or search result. |
80 */ | 78 */ |
81 Visit.prototype.getResultDOM = function(propertyBag) { | 79 Visit.prototype.getResultDOM = function(propertyBag) { |
82 var isSearchResult = propertyBag.isSearchResult || false; | 80 var isSearchResult = propertyBag.isSearchResult || false; |
83 var addTitleFavicon = propertyBag.addTitleFavicon || false; | 81 var addTitleFavicon = propertyBag.addTitleFavicon || false; |
84 var node = createElementWithClassName('li', 'entry'); | 82 var node = createElementWithClassName('li', 'entry'); |
85 var time = createElementWithClassName('div', 'time'); | 83 var time = createElementWithClassName('div', 'time'); |
86 var entryBox = createElementWithClassName('label', 'entry-box'); | 84 var entryBox = createElementWithClassName('label', 'entry-box'); |
87 var domain = createElementWithClassName('div', 'domain'); | 85 var domain = createElementWithClassName('div', 'domain'); |
88 | 86 |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
372 * Receiver for history query. | 370 * Receiver for history query. |
373 * @param {Object} info An object containing information about the query. | 371 * @param {Object} info An object containing information about the query. |
374 * @param {Array} results A list of results. | 372 * @param {Array} results A list of results. |
375 */ | 373 */ |
376 HistoryModel.prototype.addResults = function(info, results) { | 374 HistoryModel.prototype.addResults = function(info, results) { |
377 $('loading-spinner').hidden = true; | 375 $('loading-spinner').hidden = true; |
378 this.inFlight_ = false; | 376 this.inFlight_ = false; |
379 this.isQueryFinished_ = info.finished; | 377 this.isQueryFinished_ = info.finished; |
380 this.queryCursor_ = info.cursor; | 378 this.queryCursor_ = info.cursor; |
381 | 379 |
382 // If the results are not for the current search term there's nothing more | 380 // If the results are not for the current search term then there is nothing |
Patrick Dubroy
2013/01/25 15:29:59
Didn't want to do what James suggested? ;-)
Sergiu
2013/01/28 17:24:52
I realized that I didn't like the sentence with or
| |
383 // to do. | 381 // more to do. |
384 if (info.term != this.searchText_) | 382 if (info.term != this.searchText_) |
385 return; | 383 return; |
386 | 384 |
387 // If necessary, sort the results from newest to oldest. | 385 // If necessary, sort the results from newest to oldest. |
388 if (!results.sorted) | 386 if (!results.sorted) |
389 results.sort(function(a, b) { return b.time - a.time; }); | 387 results.sort(function(a, b) { return b.time - a.time; }); |
390 | 388 |
391 var lastVisit = this.visits_.slice(-1)[0]; | 389 var lastVisit = this.visits_.slice(-1)[0]; |
392 var lastDay = lastVisit ? lastVisit.dateRelativeDay : null; | 390 var lastDay = lastVisit ? lastVisit.dateRelativeDay : null; |
393 | 391 |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
691 * Record that the given visit has been rendered. | 689 * Record that the given visit has been rendered. |
692 * @param {Visit} visit The visit that was rendered. | 690 * @param {Visit} visit The visit that was rendered. |
693 * @private | 691 * @private |
694 */ | 692 */ |
695 HistoryView.prototype.setVisitRendered_ = function(visit) { | 693 HistoryView.prototype.setVisitRendered_ = function(visit) { |
696 visit.isRendered = true; | 694 visit.isRendered = true; |
697 this.currentVisits_.push(visit); | 695 this.currentVisits_.push(visit); |
698 }; | 696 }; |
699 | 697 |
700 /** | 698 /** |
701 * This function generates and adds the grouped visits DOM for a certain | 699 * Generates and adds the grouped visits DOM for a certain domain. This |
702 * domain. This includes the clickable arrow and domain name and the visit | 700 * includes the clickable arrow and domain name and the visit entries for |
703 * entries for that domain. | 701 * that domain. |
704 * @param {Element} results DOM object to which to add the elements. | 702 * @param {Element} results DOM object to which to add the elements. |
705 * @param {string} domain Current domain name. | 703 * @param {string} domain Current domain name. |
706 * @param {Array} domainVisits Array of visits for this domain. | 704 * @param {Array} domainVisits Array of visits for this domain. |
707 * @private | 705 * @private |
708 */ | 706 */ |
709 HistoryView.prototype.getGroupedVisitsDOM_ = function( | 707 HistoryView.prototype.getGroupedVisitsDOM_ = function( |
710 results, domain, domainVisits) { | 708 results, domain, domainVisits) { |
711 // Add a new domain entry. | 709 // Add a new domain entry. |
712 var siteResults = results.appendChild( | 710 var siteResults = results.appendChild( |
713 createElementWithClassName('li', 'site-entry')); | 711 createElementWithClassName('li', 'site-entry')); |
714 // Make a wrapper that will contain the arrow, the favicon and the domain. | 712 // Make a wrapper that will contain the arrow, the favicon and the domain. |
715 var siteDomainWrapper = siteResults.appendChild( | 713 var siteDomainWrapper = siteResults.appendChild( |
716 createElementWithClassName('div', 'site-domain-wrapper')); | 714 createElementWithClassName('div', 'site-domain-wrapper')); |
717 var siteArrow = siteDomainWrapper.appendChild( | 715 var siteArrow = siteDomainWrapper.appendChild( |
718 createElementWithClassName('div', 'site-domain-arrow collapse')); | 716 createElementWithClassName('div', 'site-domain-arrow collapse')); |
719 siteArrow.textContent = '►'; | 717 siteArrow.textContent = '►'; |
720 var siteDomain = siteDomainWrapper.appendChild( | 718 var siteDomain = siteDomainWrapper.appendChild( |
721 createElementWithClassName('div', 'site-domain')); | 719 createElementWithClassName('div', 'site-domain')); |
722 var numberOfVisits = createElementWithClassName('span', 'number-visits'); | 720 var numberOfVisits = createElementWithClassName('span', 'number-visits'); |
723 numberOfVisits.textContent = loadTimeData.getStringF('numbervisits', | 721 numberOfVisits.textContent = loadTimeData.getStringF('numbervisits', |
724 domainVisits.length); | 722 domainVisits.length); |
725 siteDomain.textContent = domain; | 723 siteDomain.textContent = ' ' + domain + ' '; |
Patrick Dubroy
2013/01/25 15:29:59
Why are you adding space to both sides of the doma
Sergiu
2013/01/28 17:24:52
Put in a -webkit-margin-end but it may still not w
| |
726 siteDomain.appendChild(numberOfVisits); | 724 siteDomain.appendChild(numberOfVisits); |
727 siteResults.appendChild(siteDomainWrapper); | 725 siteResults.appendChild(siteDomainWrapper); |
728 var resultsList = siteResults.appendChild( | 726 var resultsList = siteResults.appendChild( |
729 createElementWithClassName('ol', 'site-results')); | 727 createElementWithClassName('ol', 'site-results')); |
730 | 728 |
731 domainVisits[0].addFaviconToElement_(siteDomain); | 729 domainVisits[0].addFaviconToElement_(siteDomain); |
732 | 730 |
733 siteDomainWrapper.addEventListener('click', toggleHandler); | 731 siteDomainWrapper.addEventListener('click', toggleHandler); |
734 // Collapse until it gets toggled. | 732 // Collapse until it gets toggled. |
735 resultsList.style.height = 0; | 733 resultsList.style.height = 0; |
(...skipping 22 matching lines...) Expand all Loading... | |
758 visitsByDomain[domain] = []; | 756 visitsByDomain[domain] = []; |
759 domains.push(domain); | 757 domains.push(domain); |
760 } | 758 } |
761 visitsByDomain[domain].push(visit); | 759 visitsByDomain[domain].push(visit); |
762 } | 760 } |
763 var sortByVisits = function(a, b) { | 761 var sortByVisits = function(a, b) { |
764 return visitsByDomain[b].length - visitsByDomain[a].length; | 762 return visitsByDomain[b].length - visitsByDomain[a].length; |
765 }; | 763 }; |
766 domains.sort(sortByVisits); | 764 domains.sort(sortByVisits); |
767 | 765 |
768 for (var i = 0, domain; domain = domains[i]; i++) { | 766 for (var i = 0, domain; domain = domains[i]; i++) |
769 this.getGroupedVisitsDOM_(results, domain, visitsByDomain[domain]); | 767 this.getGroupedVisitsDOM_(results, domain, visitsByDomain[domain]); |
770 } | |
771 }; | 768 }; |
772 | 769 |
773 /** | 770 /** |
774 * Adds the results grouped by days, grouping them if needed. | 771 * Adds the results grouped by days, grouping them if needed. |
775 * @param {Array} visits Visits returned by the query. | 772 * @param {Array} visits Visits returned by the query. |
776 * @param {Element} parentElement Element to which to add the results to. | 773 * @param {Element} parentElement Element to which to add the results to. |
777 * @private | 774 * @private |
778 */ | 775 */ |
779 HistoryView.prototype.addDayResults_ = function(visits, parentElement) { | 776 HistoryView.prototype.addDayResults_ = function(visits, parentElement) { |
780 if (visits.length == 0) | 777 if (visits.length == 0) |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
962 * Set the hash to a specified state, this will create an entry in the | 959 * Set the hash to a specified state, this will create an entry in the |
963 * session history so the back button cycles through hash states, which | 960 * session history so the back button cycles through hash states, which |
964 * are then picked up by our listener. | 961 * are then picked up by our listener. |
965 * @param {string} term The current search string. | 962 * @param {string} term The current search string. |
966 * @param {number} page The page currently being viewed. | 963 * @param {number} page The page currently being viewed. |
967 * @param {boolean} grouped Whether the results are grouped or not. | 964 * @param {boolean} grouped Whether the results are grouped or not. |
968 */ | 965 */ |
969 PageState.prototype.setUIState = function(term, page, grouped) { | 966 PageState.prototype.setUIState = function(term, page, grouped) { |
970 // Make sure the form looks pretty. | 967 // Make sure the form looks pretty. |
971 $('search-field').value = term; | 968 $('search-field').value = term; |
972 if (grouped) { | 969 if (grouped) |
973 $('display-filter-sites').checked = true; | 970 $('display-filter-sites').checked = true; |
974 } else { | 971 else |
975 $('display-filter-sites').checked = false; | 972 $('display-filter-sites').checked = false; |
976 } | |
977 var hash = this.getHashData(); | 973 var hash = this.getHashData(); |
978 if (hash.q != term || hash.p != page || hash.g != grouped) { | 974 if (hash.q != term || hash.p != page || hash.g != grouped) { |
979 window.location.hash = PageState.getHashString( | 975 window.location.hash = PageState.getHashString( |
980 term, page, grouped); | 976 term, page, grouped); |
981 } | 977 } |
982 }; | 978 }; |
983 | 979 |
984 /** | 980 /** |
985 * Static method to get the hash string for a specified state | 981 * Static method to get the hash string for a specified state |
986 * @param {string} term The current search string. | 982 * @param {string} term The current search string. |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1306 historyView.reload(); | 1302 historyView.reload(); |
1307 } | 1303 } |
1308 | 1304 |
1309 // Add handlers to HTML elements. | 1305 // Add handlers to HTML elements. |
1310 document.addEventListener('DOMContentLoaded', load); | 1306 document.addEventListener('DOMContentLoaded', load); |
1311 | 1307 |
1312 // This event lets us enable and disable menu items before the menu is shown. | 1308 // This event lets us enable and disable menu items before the menu is shown. |
1313 document.addEventListener('canExecute', function(e) { | 1309 document.addEventListener('canExecute', function(e) { |
1314 e.canExecute = true; | 1310 e.canExecute = true; |
1315 }); | 1311 }); |
OLD | NEW |