| 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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   168 // Visit, private: ------------------------------------------------------------ |   168 // Visit, private: ------------------------------------------------------------ | 
|   169  |   169  | 
|   170 /** |   170 /** | 
|   171  * Extracts and returns the domain (and subdomains) from a URL. |   171  * Extracts and returns the domain (and subdomains) from a URL. | 
|   172  * @param {string} url The url. |   172  * @param {string} url The url. | 
|   173  * @return {string} The domain. An empty string is returned if no domain can |   173  * @return {string} The domain. An empty string is returned if no domain can | 
|   174  *     be found. |   174  *     be found. | 
|   175  * @private |   175  * @private | 
|   176  */ |   176  */ | 
|   177 Visit.prototype.getDomainFromURL_ = function(url) { |   177 Visit.prototype.getDomainFromURL_ = function(url) { | 
|   178   var domain = url.replace(/^.+:\/\//, '').match(/[^/]+/); |   178   // TODO(sergiu): Extract the domain from the C++ side and send it here. | 
 |   179   var domain = url.replace(/^.+?:\/\//, '').match(/[^/]+/); | 
|   179   return domain ? domain[0] : ''; |   180   return domain ? domain[0] : ''; | 
|   180 }; |   181 }; | 
|   181  |   182  | 
|   182 /** |   183 /** | 
|   183  * Add child text nodes to a node such that occurrences of the specified text is |   184  * Add child text nodes to a node such that occurrences of the specified text is | 
|   184  * highlighted. |   185  * highlighted. | 
|   185  * @param {Node} node The node under which new text nodes will be made as |   186  * @param {Node} node The node under which new text nodes will be made as | 
|   186  *     children. |   187  *     children. | 
|   187  * @param {string} content Text to be added beneath |node| as one or more |   188  * @param {string} content Text to be added beneath |node| as one or more | 
|   188  *     text nodes. |   189  *     text nodes. | 
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   399  * @param {Array} results A list of results. |   400  * @param {Array} results A list of results. | 
|   400  */ |   401  */ | 
|   401 HistoryModel.prototype.addResults = function(info, results) { |   402 HistoryModel.prototype.addResults = function(info, results) { | 
|   402   $('loading-spinner').hidden = true; |   403   $('loading-spinner').hidden = true; | 
|   403   this.inFlight_ = false; |   404   this.inFlight_ = false; | 
|   404   this.isQueryFinished_ = info.finished; |   405   this.isQueryFinished_ = info.finished; | 
|   405   this.queryCursor_ = info.cursor; |   406   this.queryCursor_ = info.cursor; | 
|   406   this.queryStartTime = info.queryStartTime; |   407   this.queryStartTime = info.queryStartTime; | 
|   407   this.queryEndTime = info.queryEndTime; |   408   this.queryEndTime = info.queryEndTime; | 
|   408  |   409  | 
|   409   // If the results are not for the current search term there's nothing more |   410   // If the results are not for the current search term then there is nothing | 
|   410   // to do. |   411   // more to do. | 
|   411   if (info.term != this.searchText_) |   412   if (info.term != this.searchText_) | 
|   412     return; |   413     return; | 
|   413  |   414  | 
|   414   // If necessary, sort the results from newest to oldest. |   415   // If necessary, sort the results from newest to oldest. | 
|   415   if (!results.sorted) |   416   if (!results.sorted) | 
|   416     results.sort(function(a, b) { return b.time - a.time; }); |   417     results.sort(function(a, b) { return b.time - a.time; }); | 
|   417  |   418  | 
|   418   var lastVisit = this.visits_.slice(-1)[0]; |   419   var lastVisit = this.visits_.slice(-1)[0]; | 
|   419   var lastDay = lastVisit ? lastVisit.dateRelativeDay : null; |   420   var lastDay = lastVisit ? lastVisit.dateRelativeDay : null; | 
|   420  |   421  | 
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   840  * Record that the given visit has been rendered. |   841  * Record that the given visit has been rendered. | 
|   841  * @param {Visit} visit The visit that was rendered. |   842  * @param {Visit} visit The visit that was rendered. | 
|   842  * @private |   843  * @private | 
|   843  */ |   844  */ | 
|   844 HistoryView.prototype.setVisitRendered_ = function(visit) { |   845 HistoryView.prototype.setVisitRendered_ = function(visit) { | 
|   845   visit.isRendered = true; |   846   visit.isRendered = true; | 
|   846   this.currentVisits_.push(visit); |   847   this.currentVisits_.push(visit); | 
|   847 }; |   848 }; | 
|   848  |   849  | 
|   849 /** |   850 /** | 
|   850  * This function generates and adds the grouped visits DOM for a certain |   851  * Generates and adds the grouped visits DOM for a certain domain. This | 
|   851  * domain. This includes the clickable arrow and domain name and the visit |   852  * includes the clickable arrow and domain name and the visit entries for | 
|   852  * entries for that domain. |   853  * that domain. | 
|   853  * @param {Element} results DOM object to which to add the elements. |   854  * @param {Element} results DOM object to which to add the elements. | 
|   854  * @param {string} domain Current domain name. |   855  * @param {string} domain Current domain name. | 
|   855  * @param {Array} domainVisits Array of visits for this domain. |   856  * @param {Array} domainVisits Array of visits for this domain. | 
|   856  * @private |   857  * @private | 
|   857  */ |   858  */ | 
|   858 HistoryView.prototype.getGroupedVisitsDOM_ = function( |   859 HistoryView.prototype.getGroupedVisitsDOM_ = function( | 
|   859     results, domain, domainVisits) { |   860     results, domain, domainVisits) { | 
|   860   // Add a new domain entry. |   861   // Add a new domain entry. | 
|   861   var siteResults = results.appendChild( |   862   var siteResults = results.appendChild( | 
|   862       createElementWithClassName('li', 'site-entry')); |   863       createElementWithClassName('li', 'site-entry')); | 
|   863   // Make a wrapper that will contain the arrow, the favicon and the domain. |   864   // Make a wrapper that will contain the arrow, the favicon and the domain. | 
|   864   var siteDomainWrapper = siteResults.appendChild( |   865   var siteDomainWrapper = siteResults.appendChild( | 
|   865       createElementWithClassName('div', 'site-domain-wrapper')); |   866       createElementWithClassName('div', 'site-domain-wrapper')); | 
|   866   var siteArrow = siteDomainWrapper.appendChild( |   867   var siteArrow = siteDomainWrapper.appendChild( | 
|   867       createElementWithClassName('div', 'site-domain-arrow collapse')); |   868       createElementWithClassName('div', 'site-domain-arrow collapse')); | 
|   868   siteArrow.textContent = '►'; |   869   siteArrow.textContent = '►'; | 
|   869   var siteDomain = siteDomainWrapper.appendChild( |   870   var siteDomain = siteDomainWrapper.appendChild( | 
|   870       createElementWithClassName('div', 'site-domain')); |   871       createElementWithClassName('div', 'site-domain')); | 
|   871   var numberOfVisits = createElementWithClassName('span', 'number-visits'); |   872   var numberOfVisits = createElementWithClassName('span', 'number-visits'); | 
|   872   numberOfVisits.textContent = loadTimeData.getStringF('numbervisits', |   873   numberOfVisits.textContent = loadTimeData.getStringF('numbervisits', | 
|   873                                                        domainVisits.length); |   874                                                        domainVisits.length); | 
|   874   siteDomain.textContent = domain; |   875   var domainElement = document.createElement('span'); | 
 |   876   domainElement.textContent = domain; | 
 |   877   siteDomain.appendChild(domainElement); | 
|   875   siteDomain.appendChild(numberOfVisits); |   878   siteDomain.appendChild(numberOfVisits); | 
|   876   siteResults.appendChild(siteDomainWrapper); |   879   siteResults.appendChild(siteDomainWrapper); | 
|   877   var resultsList = siteResults.appendChild( |   880   var resultsList = siteResults.appendChild( | 
|   878       createElementWithClassName('ol', 'site-results')); |   881       createElementWithClassName('ol', 'site-results')); | 
|   879  |   882  | 
|   880   domainVisits[0].addFaviconToElement_(siteDomain); |   883   domainVisits[0].addFaviconToElement_(siteDomain); | 
|   881  |   884  | 
|   882   siteDomainWrapper.addEventListener('click', toggleHandler); |   885   siteDomainWrapper.addEventListener('click', toggleHandler); | 
|   883   // Collapse until it gets toggled. |   886   // Collapse until it gets toggled. | 
|   884   resultsList.style.height = 0; |   887   resultsList.style.height = 0; | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   942       visitsByDomain[domain] = []; |   945       visitsByDomain[domain] = []; | 
|   943       domains.push(domain); |   946       domains.push(domain); | 
|   944     } |   947     } | 
|   945     visitsByDomain[domain].push(visit); |   948     visitsByDomain[domain].push(visit); | 
|   946   } |   949   } | 
|   947   var sortByVisits = function(a, b) { |   950   var sortByVisits = function(a, b) { | 
|   948     return visitsByDomain[b].length - visitsByDomain[a].length; |   951     return visitsByDomain[b].length - visitsByDomain[a].length; | 
|   949   }; |   952   }; | 
|   950   domains.sort(sortByVisits); |   953   domains.sort(sortByVisits); | 
|   951  |   954  | 
|   952   for (var i = 0, domain; domain = domains[i]; i++) { |   955   for (var i = 0, domain; domain = domains[i]; i++) | 
|   953     this.getGroupedVisitsDOM_(results, domain, visitsByDomain[domain]); |   956     this.getGroupedVisitsDOM_(results, domain, visitsByDomain[domain]); | 
|   954   } |  | 
|   955 }; |   957 }; | 
|   956  |   958  | 
|   957 /** |   959 /** | 
|   958  * Adds the results for a month. |   960  * Adds the results for a month. | 
|   959  * @param {Array} visits Visits returned by the query. |   961  * @param {Array} visits Visits returned by the query. | 
|   960  * @param {Element} parentElement Element to which to add the results to. |   962  * @param {Element} parentElement Element to which to add the results to. | 
|   961  * @private |   963  * @private | 
|   962  */ |   964  */ | 
|   963 HistoryView.prototype.addMonthResults_ = function(visits, parentElement) { |   965 HistoryView.prototype.addMonthResults_ = function(visits, parentElement) { | 
|   964   if (visits.length == 0) |   966   if (visits.length == 0) | 
| (...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1545     historyView.reload(); |  1547     historyView.reload(); | 
|  1546 } |  1548 } | 
|  1547  |  1549  | 
|  1548 // Add handlers to HTML elements. |  1550 // Add handlers to HTML elements. | 
|  1549 document.addEventListener('DOMContentLoaded', load); |  1551 document.addEventListener('DOMContentLoaded', load); | 
|  1550  |  1552  | 
|  1551 // This event lets us enable and disable menu items before the menu is shown. |  1553 // This event lets us enable and disable menu items before the menu is shown. | 
|  1552 document.addEventListener('canExecute', function(e) { |  1554 document.addEventListener('canExecute', function(e) { | 
|  1553   e.canExecute = true; |  1555   e.canExecute = true; | 
|  1554 }); |  1556 }); | 
| OLD | NEW |