Files
2025-07-07 09:39:03 +08:00

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();