Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

got to get this working #25

Merged
merged 5 commits into from
Feb 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/ChromeExtension/css/prism.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions src/ChromeExtension/js/can-load-saved-replies.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const canLoadSavedRepliesForURL = async (url) =>{

const configs = await getConfigsFromLocalStorage();

for(let config of configs){

const result = canLoadRepliesForUrl(config, url);

if(result){
return true;
}
}

return false;
}
24 changes: 24 additions & 0 deletions src/ChromeExtension/js/create-element.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const createElement = (tagName, { children, className, ...attributes } = {}) => {

const element = document.createElement(tagName);

if (children) {

element.append(...children);
}

if (className) {

element.className = className;
}

for (const [key, value] of Object.entries(attributes)) {

if (value) {

element.setAttribute([key], value)
}
}

return element;
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,3 @@
const createElement = (tagName, { children, className, ...attributes } = {}) => {

const element = document.createElement(tagName);

if (children) {

element.append(...children);
}

if (className) {

element.className = className;
}

for (const [key, value] of Object.entries(attributes)) {

if (value) {
element.setAttribute(key, value)
}
}

return element;
}

const createSavedRepliesUl = (savedReplies) => {

const repliesUl = createElement("ul", {
Expand Down
4 changes: 4 additions & 0 deletions src/ChromeExtension/js/events.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
const CAN_LOAD_SAVED_REPLIES_CHANGED = "CanLoadSavedRepliesChanged";

const createCanLoadSavedRepliesChangedEvent = (canLoadSavedReplies) =>
createEvent(CAN_LOAD_SAVED_REPLIES_CHANGED, {canLoadSavedReplies:canLoadSavedReplies});
3 changes: 3 additions & 0 deletions src/ChromeExtension/js/message-receivers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const SERVICE_WORKER = "service-worker";
const SIDE_PANEL = "side-panel";

37 changes: 37 additions & 0 deletions src/ChromeExtension/js/messaging.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@ const canHandleEvent = async (message, messageName) => {
if (isEvent(message)
&& message.messageName === messageName) {
console.log(`handling event`, message);

return true;
}

return false;
}

const createCommand = (messageName, target, data) => {
Expand Down Expand Up @@ -86,6 +90,21 @@ const send = async (command) => {
}
}

const sendNonAsync = (command) => {

if (isCommand(command)) {

console.log(`sent`, command);

chrome.runtime.sendMessage(command);

return true;
}
else {
throw new Error(`message: ${command.messageName} is not a command.`);
}
}

const createEvent = (messageName, data) => {

if (!messageName) {
Expand Down Expand Up @@ -117,4 +136,22 @@ const publish = async (event) => {

throw new Error(`message: ${event.messageName} is not a event.`);
}
}

const tryPublish = async (event) =>{
try{
await publish(event);
}
catch(error){
console.log(error.message);
}
}

const trySendMessageToContentScript = async (tabId, event) =>{
try{
chrome.tabs.sendMessage(tabId, event);
}
catch(error){
console.log("Failed to send to message to content script",error.message);
}
}
8 changes: 8 additions & 0 deletions src/ChromeExtension/js/modules/tabs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const getCurrentTab = async () => {
let queryOptions = { active: true, lastFocusedWindow: true };
// `tab` will either be a `tabs.Tab` instance or `undefined`.
let [tab] = await chrome.tabs.query(queryOptions);
return tab;
}

export {getCurrentTab}
8 changes: 8 additions & 0 deletions src/ChromeExtension/js/prism.js

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,5 +1,33 @@

const getMatchingSavedReplyConfigsFromLocalStorage = async () => {
const getConfigsFromLocalStorage = async () => {
const results = await chrome.storage.local.get();

const resultsArray = Object.entries(results);

let configExpression = new RegExp(".+-config");

let configs = [];

for(let result of resultsArray){

if (configExpression.test(result[0])) {
const config = result[1];

configs.push(config);
}
}

return configs;
}

const getMatchingSavedReplyConfigsFromLocalStorage = async (url) => {

console.log("getting matchingconfig from storage");
console.log("url",url);

if(url === null){
url = window.location.href;
}

const results = await chrome.storage.local.get();

Expand All @@ -11,11 +39,17 @@ const getMatchingSavedReplyConfigsFromLocalStorage = async () => {

for(let result of resultsArray)
{
console.log("results not empty ");

if (configExpression.test(result[0])) {

const config = result[1];

if (canLoadRepliesForUrl(config)) {
console.log("found matching config");

if (canLoadRepliesForUrl(config, url)) {

console.log("can load replies from url");

const configKey = `${config.name}-replies`;

Expand All @@ -24,6 +58,8 @@ const getMatchingSavedReplyConfigsFromLocalStorage = async () => {
let configReplies = repliesResult[configKey];

replies = replies.concat(configReplies)
}else{
console.log("can not load replies from url");
}
}
}
Expand All @@ -42,7 +78,15 @@ const getSavedRepliesLastUpdatedAt = async (name) => {
return lastUpdateAt;
}

const getSavedRepliesLastUpdatedAtFromLocalStorage = async () => {
const getSavedRepliesLastUpdatedAtFromLocalStorage = async (url) => {

console.log("getting matchingconfig from storage");

console.log("url",url);

if(url === null){
url = window.location.href;
}

const results = await chrome.storage.local.get();

Expand All @@ -54,15 +98,16 @@ const getSavedRepliesLastUpdatedAtFromLocalStorage = async () => {

for(let result of resultsArray)
{

if (configExpression.test(result[0])) {

let config = result[1];
if (canLoadRepliesForUrl(config)) {

if (canLoadRepliesForUrl(config, url)) {

let nextLastUpdatedAt = await getSavedRepliesLastUpdatedAt(config.name);

if (dateIsBefore(currentLastUpdatedAt, nextLastUpdatedAt)) {

currentLastUpdatedAt = nextLastUpdatedAt;
}
}
Expand Down
41 changes: 41 additions & 0 deletions src/ChromeExtension/js/sidepanel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
let replies = [];
let repliesExist = false;
let repliesUI = [];

const closeSavedRepliesPanelMessage = "CloseSharedSavedRepliesPanel";

const handleCloseSharedSavedRepliesPanel = (message, handleMessage) =>{

if (!canHandleCommand(message, SIDE_PANEL, closeSavedRepliesPanelMessage)) {
return;
}

handleMessage();
}

const closeSharedSavedRepliesPanel = () =>{

const closeSharedReplilesPanelCommand =
createCommand(closeSavedRepliesPanelMessage, SIDE_PANEL, {});

sendNonAsync(closeSharedReplilesPanelCommand);
}

const prepareRepliesUI = async(url) => {

const replies = await getMatchingSavedReplyConfigsFromLocalStorage(url);

console.log("replies", replies);

const repliesExist = arrayIsNotEmpty(replies);

if (repliesExist) {

const repliesUi = await createSavedRepliesSidePanelDiv(replies);

return repliesUi;
}

return [];
}

6 changes: 6 additions & 0 deletions src/ChromeExtension/js/tabs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const getCurrentTab = async () => {
let queryOptions = { active: true, lastFocusedWindow: true };
// `tab` will either be a `tabs.Tab` instance or `undefined`.
let [tab] = await chrome.tabs.query(queryOptions);
return tab;
}
Loading
Loading