From ce3d4924f8e0ae34bd262abaae50ce838a9b33c1 Mon Sep 17 00:00:00 2001 From: Toran Sharma Date: Tue, 19 May 2020 15:27:22 +0100 Subject: [PATCH 1/2] Fix numerous small issues and add Firefox support --- CHANGELOG.md | 28 +++++++++++++++++++++++++++- background.js | 17 ++++++++++++++--- manifest.json | 12 ++++++++++-- options.html | 2 +- script.js => xporcle.js | 40 +++++++++++++++++++++++++++++++--------- 5 files changed, 83 insertions(+), 16 deletions(-) rename script.js => xporcle.js (96%) diff --git a/CHANGELOG.md b/CHANGELOG.md index c696243..21bbd51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,31 @@ Changelog ------------ - +[v0.0.2] - 2020-05-19 +--------------------- +[GitHub Release Page](https://github.com/ToranSharma/Xporcle-Extension/releases/tag/v0.0.2) +### Added +- Gecko browser specific settings extension ID for future Firefox storage API + support. +- Sending of a connection closed message from the background script to the + content script. +- Corresponding connection close message handing in the content script. +- Handling of quiz finished message to update internal state of the background + script. + +### Fixed +- Handling of changing page while a quiz is being played. +- Resetting of internal state variables in background script. +- Missing declaration of interfaceContainer. +- Width of interfaceBox to account for differing scroll bar size in Firefox. +- Handling of start quiz messages when quiz is already running. This only really + affects the host of a room. +- Clipboard writing to support Firefox. + +### Changed +- Content script renamed from script.js to xporcle.js. + + [v0.0.1] - 2020-05-18 --------------------- [GitHub Release Page](https://github.com/ToranSharma/Xporcle-Extension/releases/tag/v0.0.1) @@ -20,4 +45,5 @@ Changelog - Options page popup placeholder. [Unreleased]: https://github.com/ToranSharma/Xporcle-Extension/compare/master...develop -[v0.0.1]: https://github.com/ToranSharma/Xporcle-Extension/releases/tag/v1.0.0 +[v0.0.2]: https://github.com/ToranSharma/Xporcle-Extension/compare/v0.0.1...v0.0.2 +[v0.0.1]: https://github.com/ToranSharma/Xporcle-Extension/releases/tag/v0.0.1 diff --git a/background.js b/background.js index ceeeeb4..b0bc064 100644 --- a/background.js +++ b/background.js @@ -84,7 +84,7 @@ chrome.runtime.onConnect.addListener( if (message.type === "live_scores_update") { - playing = message["playing"] + playing = !message["finished"] } } } @@ -97,6 +97,8 @@ chrome.runtime.onConnect.addListener( console.log("page disconnected"); messagePort = null; + console.log("playing: ", playing); + if (playing) { playing = false; @@ -130,6 +132,8 @@ function startConnection(initialMessage) ws.onclose = (event) => { console.log("connection closed"); + if (messagePort != null) + messagePort.postMessage({type: "connection_closed"}); reset(); }; ws.onopen = (event) => @@ -159,13 +163,16 @@ function forwardMessage(event) } else if (messageType === "scores_update") { - playing = false; - Object.assign(scores, message["scores"]); + scores = message["scores"]; } else if (messageType === "start_quiz") { playing = true; } + else if (messageType === "quiz_finished") + { + playing = false; + } else if (messageType === "url_update") { urls[message["username"]] = message["url"]; @@ -195,4 +202,8 @@ function reset() ws = null; username = null; roomCode = null; + host = null; + scores = {}; + urls = {}; + playing = null; } diff --git a/manifest.json b/manifest.json index 0a2d6e1..c78bea7 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name" : "Xporcle", "description" : "Adds real-time multiplayer abilities to Sporcle.com", - "version" : "0.0.1", + "version" : "0.0.2", "manifest_version" : 2, "icons" : { @@ -32,7 +32,7 @@ "content_scripts" : [ { "matches" : ["https://www.sporcle.com/*"], - "js" : ["script.js"] + "js" : ["xporcle.js"] } ], @@ -42,4 +42,12 @@ "page" : "options.html", "open_in_tab" : false } + , + "browser_specific_settings": + { + "gecko": + { + "id": "Xporcle@toransharma.com" + } + } } diff --git a/options.html b/options.html index d2b8acf..882fd7c 100644 --- a/options.html +++ b/options.html @@ -5,7 +5,7 @@ Xporcle Options -

Xporcle v0.0.1

+

Xporcle v0.0.2

Enable or Disable Features Here

diff --git a/script.js b/xporcle.js similarity index 96% rename from script.js rename to xporcle.js index 8a946f2..c19af37 100644 --- a/script.js +++ b/xporcle.js @@ -117,9 +117,10 @@ function addInterfaceBox() const gameHeader = document.querySelector(`.game-header`); const staffPicks = document.querySelector(`#staff-picks-wrapper`); - if (document.querySelector(`#interfaceContainer`) === null) + let interfaceContainer = document.querySelector(`#interfaceContainer`); + if (interfaceContainer === null) { - const interfaceContainer = document.createElement("div"); + interfaceContainer = document.createElement("div"); interfaceContainer.id = "interfaceContainer"; interfaceContainer.style = ` @@ -152,7 +153,7 @@ function addInterfaceBox() interfaceBox.id = "interfaceBox"; interfaceBox.style = ` - width: calc(((100vw - 960px) / 2 - 4px)); + width: calc(((100vw - 960px) / 2 - 10px)); padding: 0.5em; box-sizing: border-box; max-width: 400px; @@ -206,6 +207,10 @@ function processMessage(message) console.log("room closed"); resetInterface(); break; + case "connection_closed": + console.log("server connection closed"); + resetInterface(); + break; case "rooms_list": console.log(message["rooms"]); break; @@ -227,9 +232,12 @@ function processMessage(message) case "start_quiz": // Start the quiz! - // First remove the quiz start provention - toggleQuizStartProvention(false); - document.querySelector(`#button-play`).click(); + if (!quizRunning) + { + // First remove the quiz start provention + toggleQuizStartProvention(false); + document.querySelector(`#button-play`).click(); + } break; case "live_scores_update": updateLiveScores(message["live_scores"]); @@ -295,6 +303,16 @@ async function createRoom(event, form) console.log("connection established."); + try + { + await navigator.clipboard.writeText(roomCode); + } + catch (error) + { + console.error("Clipboard write failure: ", error); + } + + /* clipboard-write permissions query is only available in chrome await navigator.permissions.query({name: "clipboard-write"}).then( (result) => { @@ -305,6 +323,7 @@ async function createRoom(event, form) } } ); + */ interfaceBox.querySelectorAll(`form`).forEach( (form) => form.remove() @@ -547,9 +566,6 @@ function updateLeaderboardUrls() if (onQuizPage) { - const playButton = document.querySelector("#button-play"); - const playButtonContainer = playButton.parentNode.parentNode; - const allPlayersOnSamePage = ! Object.entries(urls).some(entry => entry[1] !== window.location.href); toggleQuizStartProvention(allPlayersOnSamePage === false) @@ -559,6 +575,12 @@ function updateLeaderboardUrls() function toggleQuizStartProvention(prevent) { const playPadding = document.querySelector(`#playPadding`); + if (document.querySelector(`#button-play`) === null) + { + // No play button so no need to stop it being clicked, we have probably finished a quiz now. + return false; + } + if (prevent) { playPadding.addEventListener("click", stopQuizStart, true); From b58601060ffd0fa298706be3dbfd0980f153569c Mon Sep 17 00:00:00 2001 From: Toran Sharma Date: Tue, 19 May 2020 15:35:26 +0100 Subject: [PATCH 2/2] Remove debugging messages --- CHANGELOG.md | 2 ++ background.js | 11 ----------- xporcle.js | 17 +---------------- 3 files changed, 3 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21bbd51..39383ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,8 @@ Changelog ### Changed - Content script renamed from script.js to xporcle.js. +### Removed +- Debugging console messages from content and background scripts. [v0.0.1] - 2020-05-18 --------------------- diff --git a/background.js b/background.js index b0bc064..3565bd2 100644 --- a/background.js +++ b/background.js @@ -39,18 +39,14 @@ let playing = null; chrome.runtime.onConnect.addListener( (port) => { - console.log("Page connecting"); if (port.name === "messageRelay") { messagePort = port; port.onMessage.addListener( (message) => { - console.log("Page sent a message"); - console.log(message); if (message.type === "connectionStatus") { - console.log("Page is asking about the connection status"); // Request to see if we are still connected to a room if (ws !== null) { @@ -94,11 +90,8 @@ chrome.runtime.onConnect.addListener( port.onDisconnect.addListener( () => { - console.log("page disconnected"); messagePort = null; - console.log("playing: ", playing); - if (playing) { playing = false; @@ -114,8 +107,6 @@ chrome.runtime.onConnect.addListener( function startConnection(initialMessage) { - console.log("Connecting to server"); - username = initialMessage.username; if (initialMessage["code"] !== undefined) @@ -131,7 +122,6 @@ function startConnection(initialMessage) }; ws.onclose = (event) => { - console.log("connection closed"); if (messagePort != null) messagePort.postMessage({type: "connection_closed"}); reset(); @@ -147,7 +137,6 @@ function startConnection(initialMessage) function forwardMessage(event) { const message = JSON.parse(event.data); - console.log(message); messageType = message["type"]; diff --git a/xporcle.js b/xporcle.js index c19af37..ae0586b 100644 --- a/xporcle.js +++ b/xporcle.js @@ -194,8 +194,6 @@ function resetInterface() function processMessage(message) { - console.log(message); - messageType = message["type"]; switch (messageType) @@ -204,22 +202,16 @@ function processMessage(message) updateLeaderboard(message["scores"]); break; case "room_closed": - console.log("room closed"); resetInterface(); break; case "connection_closed": - console.log("server connection closed"); resetInterface(); break; - case "rooms_list": - console.log(message["rooms"]); - break; case "error": console.error(message["error"]); break; case "removed_from_room": const removedUser = message["username"]; - console.log(`${removedUser} removed from room`); if (removedUser === username) { resetInterface(); @@ -301,8 +293,6 @@ async function createRoom(event, form) return; } - console.log("connection established."); - try { await navigator.clipboard.writeText(roomCode); @@ -311,7 +301,7 @@ async function createRoom(event, form) { console.error("Clipboard write failure: ", error); } - + /* clipboard-write permissions query is only available in chrome await navigator.permissions.query({name: "clipboard-write"}).then( (result) => @@ -345,8 +335,6 @@ async function joinRoom(event, form) button.disabled = true; button.value = "..."; - console.log(`Trying to join room ${roomCode}`); - const message = { type: "join_room", username: username, @@ -391,7 +379,6 @@ async function joinRoom(event, form) return; } - console.log("connection established"); onRoomConnect(); } @@ -820,7 +807,6 @@ function quizStarted(mutationList) { // Quiz started quizStartObserver.disconnect(); - console.log("Quiz started"); quizRunning = true; quizStartTime = new Date(); @@ -852,7 +838,6 @@ function quizFinished(mutationList) if (mutation.target.getAttribute("style") !== null) { // Quiz finished - console.log("Quiz finished"); quizFinishObserver.disconnect(); scoreObserver.disconnect();