initial commit

This commit is contained in:
Sean 2024-12-18 17:19:20 -05:00
commit 1d973f1be1
6 changed files with 174 additions and 0 deletions

94
background.js Normal file
View file

@ -0,0 +1,94 @@
async function Clicked() {
const { token, url } = await browser.storage.local.get(['token', 'url']);
console.log(`Token: ${token}, URL: ${url}`);
/*
let site_url = document.URL.endsWith('/') ?
document.URL.slice(0, -1) :
document.URL;
*/
// let mealie = "http://localhost:8080";
// Pull current site's URL
let [tab] = await browser.tabs.query({active: true, currentWindow: true});
let site_url = tab.url.endsWith('/') ?
tab.url.slice(0, -1) :
tab.url;
let mealie = url;
// let group_slug = "" // Change this to your group slug. You can obtain this from your URL after logging-in to Mealie
// let use_keywords= "&use_keywords=0" // Optional - use keywords from recipe - update to "" if you don't want that
// let edity = "&edit=0" // Optional - keep in edit mode - update to "" if you don't want that
if (mealie.slice(-1) === "/") {
mealie = mealie.slice(0, -1)
}
let dest = mealie + "/recipe/create/url?recipe_import_url=" + site_url;
// Send a message to the content script
browser.tabs.query({active: true, currentWindow: true}, (tabs) => {
console.log("Sending message to content script");
browser.tabs.sendMessage(tabs[0].id, `Token: ${token}, URL: ${url}`).then(() => {
console.log("Message sent to content script");
}).catch((error) => {
console.error("Error sending message to content script:", error);
});
});
/*
// Open a new tab with the destination URL
browser.tabs.create({ url: dest }).then(() => {
console.log(`New tab opened with URL: ${dest}`);
}).catch((error) => {
console.error("Error opening new tab:", error);
});
*/
// Submit POST request
const postUrl = `${mealie}/api/recipes/create/url`;
const requestBody = {
includeTags: true,
url: site_url
};
const response = await fetch(postUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${token}`
},
body: JSON.stringify(requestBody)
});
if (response.ok) {
const responseData = await response.json();
console.log("POST request successful:", responseData);
} else {
const errorText = await response.text();
console.error("POST request failed:", response.statusTextm, errorText);
}
}
// background.js
// Create a context menu item
browser.contextMenus.create({
id: "clickHere",
title: "Add to Mealie",
contexts: ["all"],
});
// Add a listener for the context menu item
browser.contextMenus.onClicked.addListener((info, tab) => {
console.log("click 1");
if (info.menuItemId === "clickHere") {
console.log("click 2");
Clicked();
}
});
// Add a listener for the keyboard shortcut
browser.commands.onCommand.addListener((command) => {
if (command === "activateClick") {
Clicked();
}
});

7
content.js Normal file
View file

@ -0,0 +1,7 @@
// content.js
console.log("Content.js is loaded");
browser.runtime.onMessage.addListener((message) => {
console.log(`Received message: ${message}`);
});

BIN
icons/48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

40
manifest.json Normal file
View file

@ -0,0 +1,40 @@
{
"manifest_version": 2,
"name": "Mealie",
"version": "1.0",
"description": "Connects with a local Mealie instance.",
"icons": {
"48": "icons/48.png"
},
"background": {
"scripts": ["background.js"]
},
"permissions": [
"webRequest",
"*://mealie.seans.pro/*",
"contextMenus",
"storage",
"activeTab"
],
"commands": {
"activateClick": {
"suggested_key": {
"default": "Ctrl+Alt+M"
},
"description": "Activates 'Clicked' function"
}
},
"options_ui": {
"page": "options.html",
"open_in_tab": true
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
}

17
options.html Normal file
View file

@ -0,0 +1,17 @@
<!-- options.html -->
<!DOCTYPE html>
<html>
<head>
<title>Mealie Extension Options</title>
</head>
<body>
<h1>Extension Options</h1>
<label for="token">Token:</label>
<input type="text" id="token" name="token"><br>
<label for="url">URL:</label>
<input type="text" id="url" name="url"><br>
<button id="save">Save</button>
<script src="options.js"></script>
</body>
</html>

16
options.js Normal file
View file

@ -0,0 +1,16 @@
// options.js
document.getElementById('save').addEventListener("click", async () => {
const token = document.getElementById('token').value;
const url = document.getElementById('url').value;
await browser.storage.local.set({ token, url });
alert('Options saved!');
});
// Load saved settings if they exist
(async () => {
const { token, url } = await browser.storage.local.get(['token', 'url']);
if (token) document.getElementById('token').value = token;
if (url) document.getElementById('url').value = url;
})();