You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

177 lines
4.9 KiB

1 month ago
function g() {
return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1);
}
function generateUUID() {
return g() + g() + "-" + g() + "-" + g() + "-" + g() + "-" + g() + g() + g();
}
localStorage.pollid = g() + g();
console.log("Initializing with localStorage = ", localStorage);
function getInboxObject() {
try {
return JSON.parse(localStorage.inbox || '{}');
} catch (e) {
console.error("Error parsing inbox from localStorage:", e);
return {};
}
}
function setInboxObject(inboxObj) {
localStorage.inbox = JSON.stringify(inboxObj);
}
function refreshWorkflowyData(callback) {
console.log("Refreshing WorkFlowy data...");
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://workflowy.com/get_initialization_data?client_version=15');
xhr.onload = function() {
try {
var obj = JSON.parse(this.responseText);
var globals = [];
for (var i in obj.globals) globals[obj.globals[i][0]] = obj.globals[i][1];
localStorage.userid = globals.USER_ID;
localStorage.joined = obj.projectTreeData.mainProjectTreeInfo.dateJoinedTimestampInSeconds;
localStorage.transid = obj.projectTreeData.mainProjectTreeInfo.initialMostRecentOperationTransactionId;
// Preserve existing inbox settings
var currentInbox = getInboxObject();
setInboxObject(currentInbox);
console.log("Successfully got initialization data:", localStorage);
callback(0);
} catch (e) {
localStorage.clear();
console.error("Error extracting initialization data", e);
callback(1);
}
};
xhr.send();
console.log("Sending XHR");
}
// Create context menu item
// chrome.contextMenus.create({
// id: "copyImageLink",
// title: "Copy Image Link",
// contexts: ["image"]
// });
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({
id: "saveToWorkFlowy",
title: "Save Text to WorkFlowy",
contexts: ["selection"]
});
});
// Add click event listener for the context menu item
chrome.contextMenus.onClicked.addListener((info, tab) => {
// if (info.menuItemId === "copyImageLink") {
// // Get the URL of the clicked image
// const imageUrl = info.srcUrl;
// // Send message to content script to copy image URL to clipboard
// chrome.tabs.executeScript(tab.id, {
// code: `
// navigator.clipboard.writeText("!" + '${imageUrl}')
// .then(() => {
// console.log("Image URL copied to clipboard:", '${imageUrl}');
// })
// .catch(error => {
// console.error("Error copying image URL:", error);
// });
// `
// });
// }
if (info.menuItemId === "saveToWorkFlowy") {
const selectedText = info.selectionText;
if (!localStorage.userid || !localStorage.inbox) {
alert("Extension not configured. Please configure it first.");
return;
}
const inboxObject = getInboxObject();
const contentType = "bookmark"; // You can change this to a more appropriate type if needed
if (!(contentType in inboxObject)) {
alert("Inbox not set for " + contentType);
return;
}
const inboxId = inboxObject[contentType];
const newuuid = generateUUID();
const timestamp = Math.floor((new Date()).getTime() / 1000) - localStorage.joined;
const request = [{
"most_recent_operation_transaction_id": localStorage.transid,
"operations": [
{
"type": "create",
"data": {
"projectid": newuuid,
"parentid": inboxId,
"priority": 9999
},
"client_timestamp": timestamp,
"undo_data": {}
},
{
"type": "edit",
"data": {
"projectid": newuuid,
"name": selectedText,
"description": ""
},
"client_timestamp": timestamp,
"undo_data": {
"previous_last_modified": timestamp,
"previous_name": "",
"previous_description": ""
}
}
]
}];
const data = new FormData();
data.append("client_id", "2015-11-17 19:25:15.397732");
data.append("client_version", 15);
data.append("push_poll_id", localStorage.pollid);
data.append("push_poll_data", JSON.stringify(request));
data.append("crosscheck_user_id", localStorage.userid);
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://workflowy.com/push_and_poll', true);
xhr.onload = function () {
const respObj = JSON.parse(this.responseText);
if (respObj.logged_out) {
alert("WorkFlowy thinks you're logged out! Make sure you're logged in, and if this message persists then try resynchronizing the extension.");
} else if (!respObj.results) {
alert("Unknown error!");
} else if (respObj.results[0].error_encountered_in_remote_operations) {
alert("Unknown error!");
} else {
const oldid = localStorage.transid;
localStorage.transid = respObj.results[0].new_most_recent_operation_transaction_id;
alert("Successfully clipped!");
}
};
xhr.send(data);
}
});
function getInboxObject() {
try {
return JSON.parse(localStorage.inbox || '{}');
} catch (e) {
console.error("Error parsing inbox from localStorage:", e);
return {};
}
}