96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
const messageHandler = event => {
|
|
var message = event.data.message;
|
|
var args = event.data.args;
|
|
|
|
switch (message) {
|
|
case commands.MG_GET_FAVORITES:
|
|
loadFavorites(args.favorites);
|
|
break;
|
|
default:
|
|
console.log(`Unexpected message: ${JSON.stringify(event.data)}`);
|
|
break;
|
|
}
|
|
};
|
|
|
|
function requestFavorites() {
|
|
let message = {
|
|
message: commands.MG_GET_FAVORITES,
|
|
args: {}
|
|
};
|
|
|
|
window.chrome.webview.postMessage(message);
|
|
}
|
|
|
|
function removeFavorite(uri) {
|
|
let message = {
|
|
message: commands.MG_REMOVE_FAVORITE,
|
|
args: {
|
|
uri: uri
|
|
}
|
|
};
|
|
|
|
window.chrome.webview.postMessage(message);
|
|
}
|
|
|
|
function loadFavorites(payload) {
|
|
let fragment = document.createDocumentFragment();
|
|
|
|
if (payload.length > 0) {
|
|
let container = document.getElementById('entries-container');
|
|
container.textContent = '';
|
|
}
|
|
|
|
payload.map(favorite => {
|
|
let favoriteContainer = document.createElement('div');
|
|
favoriteContainer.className = 'item-container';
|
|
let favoriteElement = document.createElement('div');
|
|
favoriteElement.className = 'item';
|
|
|
|
let faviconElement = document.createElement('div');
|
|
faviconElement.className = 'favicon';
|
|
let faviconImage = document.createElement('img');
|
|
faviconImage.src = favorite.favicon;
|
|
faviconElement.appendChild(faviconImage);
|
|
|
|
let labelElement = document.createElement('div');
|
|
labelElement.className = 'label-title';
|
|
let linkElement = document.createElement('a');
|
|
linkElement.textContent = favorite.title;
|
|
linkElement.href = favorite.uri;
|
|
linkElement.title = favorite.title;
|
|
labelElement.appendChild(linkElement);
|
|
|
|
let uriElement = document.createElement('div');
|
|
uriElement.className = 'label-uri';
|
|
let textElement = document.createElement('p');
|
|
textElement.textContent = favorite.uriToShow || favorite.uri;
|
|
textElement.title = favorite.uriToShow || favorite.uri;
|
|
uriElement.appendChild(textElement);
|
|
|
|
let buttonElement = document.createElement('div');
|
|
buttonElement.className = 'btn-close';
|
|
buttonElement.addEventListener('click', function(e) {
|
|
favoriteContainer.parentNode.removeChild(favoriteContainer);
|
|
removeFavorite(favorite.uri);
|
|
});
|
|
|
|
favoriteElement.appendChild(faviconElement);
|
|
favoriteElement.appendChild(labelElement);
|
|
favoriteElement.appendChild(uriElement);
|
|
favoriteElement.appendChild(buttonElement);
|
|
|
|
favoriteContainer.appendChild(favoriteElement);
|
|
fragment.appendChild(favoriteContainer);
|
|
});
|
|
|
|
let container = document.getElementById('entries-container');
|
|
container.appendChild(fragment);
|
|
}
|
|
|
|
function init() {
|
|
window.chrome.webview.addEventListener('message', messageHandler);
|
|
requestFavorites();
|
|
}
|
|
|
|
init();
|