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

Side by Side Diff: chrome/browser/resources/engagement/site_engagement.js

Issue 1758573002: Make chrome://site-engagement non-polymer and re-enable on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 'use strict'; 5 'use strict';
6 6
7 define('main', [ 7 define('main', [
8 'mojo/public/js/connection', 8 'mojo/public/js/connection',
9 'chrome/browser/ui/webui/engagement/site_engagement.mojom', 9 'chrome/browser/ui/webui/engagement/site_engagement.mojom',
10 'content/public/renderer/service_provider', 10 'content/public/renderer/service_provider',
11 ], function(connection, siteEngagementMojom, serviceProvider) { 11 ], function(connection, siteEngagementMojom, serviceProvider) {
12 return function() { 12 return function() {
13 var uiHandler = connection.bindHandleToProxy( 13 var uiHandler = connection.bindHandleToProxy(
14 serviceProvider.connectToService( 14 serviceProvider.connectToService(
15 siteEngagementMojom.SiteEngagementUIHandler.name), 15 siteEngagementMojom.SiteEngagementUIHandler.name),
16 siteEngagementMojom.SiteEngagementUIHandler); 16 siteEngagementMojom.SiteEngagementUIHandler);
17 17
18 var engagementTable = $('engagement-table'); 18 var engagementTableBody = $('engagement-table-body');
19 var updateInterval = null; 19 var updateInterval = null;
20 var info = null;
21 var sortKey = 'score';
22 var sortReverse = true;
20 23
21 engagementTable.addEventListener('score-edited', function(e) { 24 // Set table header sort handlers.
22 var detail = e.detail; 25 var engagementTableHeader = $('engagement-table-header');
23 uiHandler.setSiteEngagementScoreForOrigin(detail.origin, detail.score); 26 var headers = engagementTableHeader.children;
27 for (var i = 0; i < headers.length; i++) {
28 headers[i].onclick = function(e) {
tsergeant 2016/03/03 04:00:56 use headers[i].addEventListener('click', functio
calamity 2016/03/08 07:35:57 Done.
29 var newSortKey = e.target.getAttribute('sort-key');
30 if (sortKey == newSortKey) {
31 sortReverse = !sortReverse;
32 } else {
33 sortKey = newSortKey;
34 sortReverse = false;
35 }
36 var oldSortColumn = document.querySelector('.sort-column');
37 oldSortColumn.className = '';
tsergeant 2016/03/03 04:00:56 Should probably use classList instead of className
calamity 2016/03/08 07:35:57 Done.
38 e.target.className = 'sort-column';
39 if (sortReverse)
40 e.target.setAttribute('sort-reverse', '');
41 else
42 e.target.removeAttribute('sort-reverse');
43 renderTable();
44 };
45 }
46
47 /**
48 * Creates a single row in the engagement table.
49 * @param {SiteEngagementInfo} info The info to create the row from.
50 * @return {HTMLElement}
51 */
52 function createRow(info) {
tsergeant 2016/03/03 04:00:56 You could do var row = document.createElement('tr
tsergeant 2016/03/03 22:36:42 Alternatively, util.js has a function 'createEleme
calamity 2016/03/08 07:35:57 Done.
53 var originCell = document.createElement('td');
54 originCell.className = 'origin-cell';
55 originCell.textContent = info.origin;
56
57 var scoreInput = document.createElement('input');
58 scoreInput.className = 'score-input';
59 scoreInput.onchange = handleScoreChange.bind(undefined, info.origin);
tsergeant 2016/03/03 04:00:56 scoreInput.addEventListener('change', handleScoreC
calamity 2016/03/08 07:35:57 Done.
60 scoreInput.value = info.score;
61
62 var scoreCell = document.createElement('td');
63 scoreCell.className = 'score-cell';
64 scoreCell.appendChild(scoreInput);
65
66 var engagementBar = document.createElement('div');
67 engagementBar.className = 'engagement-bar';
68 engagementBar.style.width = (info.score * 4) + 'px';
69
70 var engagementBarCell = document.createElement('td');
71 engagementBarCell.className = 'engagement-bar-cell';
72 engagementBarCell.appendChild(engagementBar);
73
74 var row = document.createElement('tr');
75 row.appendChild(originCell);
76 row.appendChild(scoreCell);
77 row.appendChild(engagementBarCell);
78 return row;
79 }
80
81 /**
82 * Sets the engagement score when a score input it changed. Also resets the
83 * update interval.
84 * @param {string} origin The origin of the engagement score to set.
85 * @param {Event} e
86 */
87 function handleScoreChange(origin, e) {
88 uiHandler.setSiteEngagementScoreForOrigin(origin, e.target.value);
24 clearInterval(updateInterval); 89 clearInterval(updateInterval);
25 updateInterval = setInterval(updateEngagementTable, 5000); 90 updateInterval = setInterval(updateEngagementTable, 5000);
26 }); 91 }
27 92
28 var updateEngagementTable = function() { 93 /**
94 * Remove all rows from the engagement table.
95 */
96 function clearTable() {
97 while (engagementTableBody.firstChild)
tsergeant 2016/03/03 04:00:56 How about just using engagementTableBody.innerHTML
calamity 2016/03/08 07:35:57 Done.
98 engagementTableBody.removeChild(engagementTableBody.firstChild);
99 }
100
101 /**
102 * Sort the engagement info based on |sortKey| and |sortReverse|.
103 */
104 function sortInfo() {
105 info.sort(function(a, b) {
106 return (sortReverse ? -1 : 1) *
107 compareTableItem(sortKey, a, b);
108 });
109 }
110
111 /**
112 * Compares two SiteEngagementInfo objects based on |sortKey|.
113 * @param {string} sortKey The name of the property to sort by.
114 * @return {number} A negative number if |a| should be ordered before |b|, a
115 * positive number otherwise.
116 */
117 function compareTableItem(sortKey, a, b) {
118 var val1 = a[sortKey];
119 var val2 = b[sortKey];
120
121 // Compare the hosts of the origin ignoring schemes.
122 if (sortKey == 'origin')
123 return new URL(val1).host > new URL(val2).host ? 1 : -1;
124
125 if (sortKey == 'score')
126 return val1 - val2;
127
128 assertNotReached('Unsupported sort key: ' + sortKey);
129 return 0;
130 }
131
132 /**
133 * Regenerates the engagement table from |info|.
134 */
135 function renderTable() {
136 clearTable();
137 sortInfo();
138 // Round each score to 2 decimal places.
139 info.forEach(function(info) {
140 info.score = Number(Math.round(info.score * 100) / 100);
141 engagementTableBody.appendChild(createRow(info));
142 });
143 }
144
145 /**
146 * Retrieve site engagement info and render the engagement table.
147 */
148 function updateEngagementTable() {
29 // Populate engagement table. 149 // Populate engagement table.
30 uiHandler.getSiteEngagementInfo().then(function(response) { 150 uiHandler.getSiteEngagementInfo().then(function(response) {
31 // Round each score to 2 decimal places. 151 info = response.info;
32 response.info.forEach(function(x) { 152 renderTable(info);
33 x.score = Number(Math.round(x.score * 100) / 100);
34 });
35 engagementTable.engagementInfo = response.info;
36 }); 153 });
154 };
37 155
38 };
39 updateEngagementTable(); 156 updateEngagementTable();
40 updateInterval = setInterval(updateEngagementTable, 5000); 157 updateInterval = setInterval(updateEngagementTable, 5000);
41 }; 158 };
42 }); 159 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698