blob: 33cf1846bd464019592aabe8ee3f946f5ed7fec1 [file] [log] [blame]
// Copyright 2018 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.
'use strict';
// Reference to the backend.
let pageHandler = null;
(function() {
/* Utility functions */
/**
* Clears children of the given domId.
* @param {string} domId Id of the DOM element to be cleared.
*/
function clearChildrenForId(domId) {
const parent = $(domId);
while (parent.firstChild) {
parent.removeChild(parent.firstChild);
}
}
/* Backend wrapper functions */
// Get the general properties.
function updatePageWithProperties() {
pageHandler.getProperties().then(response => {
response.properties.forEach(function(value, field) {
$(field).textContent = value;
});
});
}
// Get the cache of metric events, and add them to the page.
function updatePageWithCachedMetricEvents() {
pageHandler.getCachedMetricEvents().then(response => {
const metricContainerId = 'metric-events';
clearChildrenForId(metricContainerId);
addCachedMetricEventsToPage(response.metrics);
});
}
// Add the metric events to the page.
function addCachedMetricEventsToPage(metrics) {
const metricEventTemplate = document.querySelector('#metric-event-template');
metrics.forEach(metricEvent => {
const metricEventClone = metricEventTemplate.content.cloneNode(true);
metricEventClone.querySelector('#url').textContent = metricEvent.url;
metricEventClone.querySelector('#sheet-peeked').textContent =
metricEvent.sheetPeeked;
metricEventClone.querySelector('#button-shown').textContent =
metricEvent.buttonShown;
metricEventClone.querySelector('#sheet-opened').textContent =
metricEvent.sheetOpened;
metricEventClone.querySelector('#sheet-closed').textContent =
metricEvent.sheetClosed;
metricEventClone.querySelector('#any-suggestion-taken').textContent =
metricEvent.anySuggestionTaken;
metricEventClone.querySelector('#any-suggestion-downloaded').textContent =
metricEvent.anySuggestionDownloaded;
$('metric-events').appendChild(metricEventClone);
});
}
// Get the cached suggestion results, and add them to the page.
function updatePageWithCachedSuggestionResults() {
pageHandler.getCachedSuggestionResults().then(response => {
const suggestionContainerId = 'suggestion-results';
clearChildrenForId(suggestionContainerId);
addCachedSuggestionResultsToPage(response.results);
});
}
// Add the results to the page.
function addCachedSuggestionResultsToPage(results) {
const suggestionResultTemplate =
document.querySelector('#suggestion-result-template');
results.forEach(result => {
const resultClone = suggestionResultTemplate.content.cloneNode(true);
resultClone.querySelector('#suggestion-result-url').textContent =
result.url;
resultClone.querySelector('#peek-confidence').textContent =
result.peekConditions.confidence.toFixed(2);
resultClone.querySelector('#peek-page-scroll-percentage').textContent =
result.peekConditions.pageScrollPercentage.toFixed(2);
resultClone.querySelector('#peek-min-seconds-on-page').textContent =
result.peekConditions.minimumSecondsOnPage.toFixed(2);
resultClone.querySelector('#peek-max-peeks').textContent =
result.peekConditions.maximumNumberOfPeeks;
const suggestionTemplate = document.querySelector('#suggestion-template');
result.suggestions.forEach(suggestion => {
const suggestionClone = suggestionTemplate.content.cloneNode(true);
suggestionClone.querySelector('#suggestion-title').textContent =
suggestion.title;
suggestionClone.querySelector('#suggestion-url').textContent =
suggestion.url;
suggestionClone.querySelector('#suggestion-title').textContent =
suggestion.title + ' >>';
suggestionClone.querySelector('#suggestion-title').onclick = function(
event) {
const suggestion = event.currentTarget.parentElement.querySelector(
'#suggestion-details');
suggestion.hidden = !suggestion.hidden;
};
suggestionClone.querySelector('#suggestions-publisher-name').textContent =
suggestion.publisherName;
suggestionClone.querySelector('#suggestion-snippet').textContent =
suggestion.snippet;
suggestionClone.querySelector('#suggestion-url').textContent =
suggestion.url;
resultClone.querySelector('#cached-suggestions')
.appendChild(suggestionClone);
});
$('suggestion-results').appendChild(resultClone);
});
}
// Clear the cache of metric events.
function clearCachedMetricEvents() {
pageHandler.clearCachedMetricEvents().then(() => {
clearChildrenForId('metric-events');
});
}
// Clear the cached suggestion results from the server.
function clearCachedSuggestionResults() {
pageHandler.clearCachedSuggestionResults().then(() => {
clearChildrenForId('suggestion-results');
});
}
function setupEventListeners() {
$('clear-metrics').onclick = clearCachedMetricEvents;
$('clear-suggestion-results').onclick = clearCachedSuggestionResults;
}
document.addEventListener('DOMContentLoaded', function() {
// Setup backend mojo.
pageHandler = new eocInternals.mojom.PageHandlerPtr;
Mojo.bindInterface(
eocInternals.mojom.PageHandler.name,
mojo.makeRequest(pageHandler).handle);
updatePageWithProperties();
updatePageWithCachedMetricEvents();
updatePageWithCachedSuggestionResults();
setupEventListeners();
});
})();