From de2623f01b7baca0131f08f6fc5bc1ca6f29296a Mon Sep 17 00:00:00 2001 From: Kartikeya Kandula Date: Mon, 11 Dec 2023 14:55:00 -0500 Subject: [PATCH] Launched pilot --- .gitignore | 1 + data_collection_details.pdf | Bin 0 -> 63156 bytes index.html => followup/index.html | 101 ++++--- ineligible/index.html | 39 +++ initial/index.html | 203 ++++++++++++++ redirect-followup/index.html | 20 ++ {redirect => redirect-initial}/index.html | 6 +- redirect/resources/images/favicon.ico | Bin 1406 -> 0 bytes redirect/resources/js/index.js | 27 -- resources/css/style.css | 82 ++++++ resources/js/followup.js | 320 ++++++++++++++++++++++ resources/js/index.js | 160 ----------- resources/js/initial.js | 319 +++++++++++++++++++++ resources/js/redirect.js | 54 ++++ 14 files changed, 1102 insertions(+), 230 deletions(-) create mode 100644 data_collection_details.pdf rename index.html => followup/index.html (69%) create mode 100644 ineligible/index.html create mode 100644 initial/index.html create mode 100644 redirect-followup/index.html rename {redirect => redirect-initial}/index.html (58%) delete mode 100644 redirect/resources/images/favicon.ico delete mode 100644 redirect/resources/js/index.js create mode 100644 resources/js/followup.js delete mode 100644 resources/js/index.js create mode 100644 resources/js/initial.js create mode 100644 resources/js/redirect.js diff --git a/.gitignore b/.gitignore index 79b5594..0f66fae 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ **/.DS_Store +copy/ \ No newline at end of file diff --git a/data_collection_details.pdf b/data_collection_details.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9147f6e156798067a529f9dc7911b7e28ffdad8f GIT binary patch literal 63156 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 Fe*wsWih%$C literal 0 HcmV?d00001 diff --git a/index.html b/followup/index.html similarity index 69% rename from index.html rename to followup/index.html index 36527eb..a01a05f 100644 --- a/index.html +++ b/followup/index.html @@ -5,13 +5,15 @@ + + Princeton University - Search Engine Use Study - + - + @@ -20,7 +22,7 @@
- +
@@ -55,9 +57,13 @@

A detailed description of the types of data that we will collect from your web browser is - available here. If you would like to inspect + available + here. If you would like to inspect the source code - for this project, it is available here. You will have an opportunity + for this project, it is available + here. You will have an opportunity to preview the exact data that we will collect from your web browser before you submit it to us. @@ -78,7 +84,8 @@

- Please follow the steps below to provide web search and browsing information for this study. + Please follow the steps below to provide web search and browsing information for this + study.

@@ -86,17 +93,21 @@
  1. Install the Export + href="https://chrome.google.com/webstore/detail/export-chrome-history/dihloblpkeiddiaojbagoecedbfpifdj/" + target="_blank">Export Chrome History web browser extension. We ask you to install this - extension so that you can create a file with your web browser history data. Please note + extension so that you can create a file with your web browser history data. Please + note that this extension is compatible with both Google Chrome and Microsoft Edge.

  2. -
  3. Open the extension webpage to export information from your web browser. You can access +
  4. Open the extension webpage to export information from your web browser. You can + access this - webpage by opening a new browser window and copying and pasting the following special + webpage by opening a new browser window and copying and pasting the following + special URL into the address bar.

  5. In response to 'How far back?', select 'a month.'

  6. -
  7. Click 'Download as JSON.' Note where the file, named history.json, downloaded on +
  8. Click 'Download as JSON.' Note where the file, named history.json, downloaded + on your computer.

  9. -
  10. Below, click 'Choose File.' You will be prompted to select the history.json file - on - your - computer. Code built into this webpage will automatically check that you have selected +
  11. Below, click 'Choose File.' You will be prompted to select the + file you downloaded in the previous step from your computer. Code built into this + webpage will automatically check that you have + selected the - correct file and filter out information that is unnecessary for this study. If you would + correct file and filter out information that is unnecessary for this study. If you + would like to see the exact data that we will receive from your web browser, it will be available - in the text box below before you submit it to us.
  12. + in the text box at the bottom of this page before you submit it to us.
    -
  13. Please provide your Prolific ID. - -
  14. -
- -
-
- -
- +
+ +
+
  • Please provide your Prolific ID. * +
  • + + +
    +

    This displays the minimized web search and browsing information that will be collected + when you submit this form. +

    @@ -175,7 +194,7 @@ - + \ No newline at end of file diff --git a/ineligible/index.html b/ineligible/index.html new file mode 100644 index 0000000..2d17074 --- /dev/null +++ b/ineligible/index.html @@ -0,0 +1,39 @@ + + + + + + + + Princeton University - Search Engine Use Study + + + + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    + Thank you for your interest in this research. We have detected that you are not currently + using the Google Chrome or Microsoft Edge web browser on a desktop or laptop computer, and + we have recorded that you are not eligible for participation. Please close this webpage and + return the study on Prolific. +

    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/initial/index.html b/initial/index.html new file mode 100644 index 0000000..62bb814 --- /dev/null +++ b/initial/index.html @@ -0,0 +1,203 @@ + + + + + + + + + + Princeton University - Search Engine Use Study + + + + + + + + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    + Thank you for participating in this study. The final component involves providing + information + from your web browser about how you use various web search engines and how you use the web + overall. We will collect this information in a way where it cannot identify you, will not + reveal + the searches that you have made, and will not reveal any other websites or webpages that you + have visited. +
    +
    + The information that we will ask you to provide about web search consists of when and how + you + ran searches. The information that we will ask you to provide about overall web use consists + of + how many websites and webpages you visited. This information will go back up to 30 days and + will + be based on your web browser's history. +
    +
    + Your privacy and data security is of the utmost importance to us. We will + automatically + redact and aggregate information that is not necessary for this study, in your web browser, + before it is ever sent to us. In particular, we will never learn the search queries you run, + which webpages you visit, or which websites you visit (other than your use of popular search + engines). +
    +
    + A detailed description of the types of data that we will collect from your web browser is + available + here. If you would like to inspect + the source code + for this project, it is available + here. You will have an opportunity + to + preview the exact data that we will collect from your web browser before you submit it to + us. +
    +
    + Please continue for step-by-step directions on how to provide this information from your web + browser. +

    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    + + + + \ No newline at end of file diff --git a/redirect-followup/index.html b/redirect-followup/index.html new file mode 100644 index 0000000..8f68762 --- /dev/null +++ b/redirect-followup/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + Princeton University - Search Engine Use Study + + + + + + + + + + \ No newline at end of file diff --git a/redirect/index.html b/redirect-initial/index.html similarity index 58% rename from redirect/index.html rename to redirect-initial/index.html index c5f9c2f..ab54f2e 100644 --- a/redirect/index.html +++ b/redirect-initial/index.html @@ -5,11 +5,13 @@ + + Princeton University - Search Engine Use Study - + - + diff --git a/redirect/resources/images/favicon.ico b/redirect/resources/images/favicon.ico deleted file mode 100644 index 1244141dc28b5ad281dbed9b3e70859138156c21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmeHDv2Gec5PckYafk!t9G_ur_Q)o_5FF0RS|X04v85C)QczG(P*AwaH>3y_1;rI9 zQn*NwB1H-p`2Z?cS5Q#!1(cDC$V%k`LFND}mi!C6(d_KJnR&Y!AjX!>g3ncaTmc*a zC3dDzWRLiJh|L+xve4;tP;WFLy(*+s==FL~ohx|t0BPHXEq$Dv|AE)~29ZkR=;%HA z{Q*>P1^wX@l&L{$53VTlwjE`GuH4bPWhI}(mI7!HTf+-C`aAPCTGogxfF zc#Q!1^as*u8-u|BmL<^bcF}0Ipu9sUrQtXZY~`c&{V!7dkHeEXbo7VXXQRFd6#f%(-w5+W-V!v>)=Tq9E2RAxj$nEf?cduZm86=Tf$vj^|iIYte8`Fwus&CB>! zKL2Wu^If8i7q08ZHfDEvPGmpbPVcPPM5|o)iOQSXZ+AA!6xGNomU6p^L_+3DMT_$p y%EZ;Xcyyagrqkc!_GEf@eHNcg$L)V{jEn^U diff --git a/redirect/resources/js/index.js b/redirect/resources/js/index.js deleted file mode 100644 index fe62c8b..0000000 --- a/redirect/resources/js/index.js +++ /dev/null @@ -1,27 +0,0 @@ -getBrowserIsChromeOrEdge = () => { - const userAgent = navigator.userAgent; - - let browser = "unknown"; - - // Detect browser name - browser = (/ucbrowser/i).test(userAgent) ? 'UCBrowser' : browser; - browser = (/edg/i).test(userAgent) ? 'Edge' : browser; - browser = (/googlebot/i).test(userAgent) ? 'GoogleBot' : browser; - browser = (/chromium/i).test(userAgent) ? 'Chromium' : browser; - browser = (/firefox|fxios/i).test(userAgent) && !(/seamonkey/i).test(userAgent) ? 'Firefox' : browser; - browser = (/; msie|trident/i).test(userAgent) && !(/ucbrowser/i).test(userAgent) ? 'IE' : browser; - browser = (/chrome|crios/i).test(userAgent) && !(/opr|opera|chromium|edg|ucbrowser|googlebot/i).test(userAgent) ? 'Chrome' : browser;; - browser = (/safari/i).test(userAgent) && !(/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i).test(userAgent) ? 'Safari' : browser; - browser = (/opr|opera/i).test(userAgent) ? 'Opera' : browser; - - if(browser == "Edge" || browser == "Chrome") { - return true; - } else return false; -} - -if(getBrowserIsChromeOrEdge()) { - // Redirect to consent page -} else { - // Make post request with Prolific ID - // Redirect to sorry not available page -} diff --git a/resources/css/style.css b/resources/css/style.css index bacfac9..42d5b91 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -26,7 +26,89 @@ border-color: #555 transparent transparent transparent; } +.text-red { + color: #de2900; +} + #copyExtensionUrlButton:hover .tooltiptext { visibility: visible; opacity: 1; +} + + + + + + + + + + + +.input-assist-message { + font-size: 0.875rem; + line-height: 1.55rem; + padding: 0.3875rem 0.3875rem; + color: rgba(0, 0, 0, 0.75); + background-color: #f3edc7; + border: 1px solid #e4d154; + position: relative; + margin-top: 0.5rem; + display: none; +} + +.input-assist-message:before { + content: ""; + position: absolute; + left: 11px; + top: -16px; + width: 0; + height: 0; + pointer-events: none; + border: 8px solid transparent; + border-bottom-color: #e4d154; +} + +.input-assist-message:after { + content: ""; + position: absolute; + left: 11px; + top: -15px; + width: 0; + height: 0; + pointer-events: none; + border: 8px solid transparent; + border-bottom-color: #f3edc7; +} + +.input-assist-message.is-active { + display: inline-block !important; +} + +.error-message { + font-size: 0.875rem; + line-height: 1.55rem; + padding: 0.3875rem 0.3875rem; + color: rgba(0, 0, 0, 0.75); + background-color: #f3ded7; + border: 1px solid #e4a793; + position: relative; + margin-top: 0.5rem; +} + +.error-message.is-active, +.error-message.is-active:before, +.error-message.is-active:after { + display: block !important; + width: fit-content; +} + +.hidden { + display: none; +} + +#submit-error { + margin-left: auto; + margin-right: auto; + margin-bottom: 0.5rem; } \ No newline at end of file diff --git a/resources/js/followup.js b/resources/js/followup.js new file mode 100644 index 0000000..d8be163 --- /dev/null +++ b/resources/js/followup.js @@ -0,0 +1,320 @@ +const millisecondsPerDay = 1000 * 3600 * 24; + +let prolificIdEntered = false; +let historyDataEntered = false; + +let outputData = {}; + +const prolificIdInputField = document.getElementById("prolificIdInput"); + +function isValidProlificID(text) { + const matches = text.match(/[A-Za-z0-9]/g); + return matches ? matches.length == 24 : false; +} + +function getQueryVariable(url, parameter) { + const urlObject = new URL(url); + return urlObject.searchParams.get(parameter); +} + +function updateSubmitButton() { + if(prolificIdEntered && historyDataEntered) { + document.getElementById('submitButton').disabled = false; + } else { + document.getElementById('submitButton').disabled = true; + } +} + +document.getElementById('continueButton').onclick = () => { + document.getElementById('infoSection').style.display = 'none'; + document.getElementById('formSection').style.display = 'block'; +}; + +document.getElementById('submitButton').onclick = async (event) => { + event.target.classList.add("is-loading"); + const url = "https://q5mrwzyq1e.execute-api.us-east-2.amazonaws.com/deployed"; + + const postBodyJson = { + prolificId: document.getElementById("prolificIdInput").value.match(/[A-Za-z0-9]/g).join(""), + studyPhase: document.querySelector('meta[name="studyPhase"]').getAttribute('data-value'), + historyData: outputData, + } + + await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(postBodyJson) + }) + .then(response => { + if(response.ok) { + return response.json() + } else { + throw new Error(); + } + }) + .then(data => { + if(data.statusCode == 200) { + document.getElementById('formSection').style.display = 'none'; + document.getElementById('thankYouSection').style.display = 'block'; + + // Update with redirect completion for followup task in Prolific + window.open("TODO", '_blank'); + } else { + throw new Error(); + } + + }).catch(() => { + document.getElementById('submit-error').classList.add("error-message", "is-active"); + }); + + event.target.classList.remove("is-loading") +}; + +document.getElementById("copyExtensionUrlButton").onclick = () => { + navigator.clipboard.writeText(document.getElementById('extensionUrlTextField').value); + document.getElementById('tooltip').innerHTML = 'Copied!'; +}; + +document.getElementById("copyExtensionUrlButton").onmouseout = () => { + document.getElementById('tooltip').innerHTML = 'Copy to clipboard'; +}; + +prolificIdInput.onkeyup = (event) => { + prolificIdEntered = isValidProlificID(event.target.value); + updateSubmitButton(); +}; + +const searchEnginesMetadata = { + Google: { + getIsSerpPage: function (url) { + return url.match(/(?:^(?:https?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q", "query" ], + }, + DuckDuckGo: { + getIsSerpPage: function (url) { + if(url.match(/(?:^(?:https?):\/\/(?:www\.)?duckduckgo\.com)/i)) { + return !!getQueryVariable(url, "q"); + } + return false; + }, + searchQueryParameters: [ "q" ], + }, + Bing: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?bing\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q" ], + }, + Yahoo: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?search\.yahoo\.com(?::[0-9]+)?\/search(?:\/\?|\?|\/;_ylt|;_ylt))/i); + }, + searchQueryParameters: [ "p", "q", "query" ], + }, + Ecosia: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?ecosia\.org(?::[0-9]+)?\/search(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q" ], + }, + Ask: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?ask\.com(?::[0-9]+)?\/web(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q", "query" ], + }, + Baidu: { + getIsSerpPage: function (url) { + return url.match(/(?:^(?:https?):\/\/(?:www\.)?baidu\.com(?::[0-9]+)?\/s(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "wd", "word" ], + }, + Brave: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?search\.brave\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q" ], + }, +} + +function getSerpQuery(url, engine) { + try { + if(!url || !engine) { + return null; + } + + // Get the possible search query parameters for the engine. + const searchQueryParameters = searchEnginesMetadata[ engine ].searchQueryParameters; + + // If any of the search query parameters are in the URL, return the query. + for(const parameter of searchQueryParameters) { + const query = getQueryVariable(url, parameter); + if(query) { + return query; + } + } + + // For DuckDuckGo, the search parameter can be specified in the pathname. + // eg. https://duckduckgo.com/Example?ia=web + if(engine === "DuckDuckGo") { + const pathname = (new URL(url)).pathname + const pathnameSplit = pathname.split("/") + if(pathnameSplit.length === 2 && pathnameSplit[ 1 ]) { + const query = decodeURIComponent(pathnameSplit[ 1 ].replace(/_/g, " ")) + if(query) { + return query; + } + } + } + return ""; + } catch(error) { + return null; + } + +} + +document.getElementById('fileInput').addEventListener('change', event => { + const file = event.target.files[ 0 ]; + document.getElementById("fileName").innerHTML = file.name; + + const reader = new FileReader(); + reader.onload = function (event) { + try { + const historyJson = JSON.parse(event.target.result); + + const firstHistoryEntry = historyJson[ 0 ]; + if(!("url" in firstHistoryEntry && "visitTime" in firstHistoryEntry && "transition" in firstHistoryEntry)) { + historyDataEntered = false; + document.getElementById("file-error-message").classList.add("is-active"); + document.getElementById("fileInputDiv").classList.add("is-danger"); + } else { + document.getElementById("file-error-message").classList.remove("is-active"); + document.getElementById("fileInputDiv").classList.remove("is-danger"); + + const searchUseData = []; + + const queryToIdMap = new Map(); + let idCounter = 0; + + const filteredHistoryForPeriod = historyJson.filter((historyItem) => + (Date.now() - historyItem.visitTime) / millisecondsPerDay <= 30 + ); + for(let historyItem of filteredHistoryForPeriod) { + for(let searchEngine in searchEnginesMetadata) { + if(searchEnginesMetadata[ searchEngine ].getIsSerpPage(historyItem.url)) { + + let queryId = -1; + try { + const query = getSerpQuery(historyItem.url, searchEngine); + if(query == null) { + queryId = -1; + } else { + if(!queryToIdMap.has(query)) { + queryToIdMap.set(query, idCounter++); + } + queryId = queryToIdMap.get(query) + } + } catch(error) { + queryId = -1; + } + + searchUseData.push( + { + searchEngine: searchEngine, + timestamp: historyItem.visitTime, + transition: historyItem.transition, + queryId: queryId, + } + ); + } + } + } + + const browserUseData = []; + for(let daysBack = 0; daysBack < 30; daysBack++) { + const filteredHistoryForDay = historyJson.filter((historyItem) => + Math.floor((Date.now() - historyItem.visitTime) / millisecondsPerDay) == daysBack + ); + + browserUseData.push( + { + numDaysBack: daysBack, + numWebpages: filteredHistoryForDay.length, + numUniqueWebpagesWithoutFragmentIdentifiers: + [ ...new Set(filteredHistoryForDay.map(historyItem => historyItem.url.split("#")[ 0 ])) ].length, + numUniqueWebpagesWithoutQueryParameters: + [ ...new Set(filteredHistoryForDay.map(historyItem => historyItem.url.split("?")[ 0 ])) ].length, + numUniqueDomains: + [ ...new Set(filteredHistoryForDay.map(historyItem => (new URL(historyItem.url)).hostname.split('.').slice(-2).join('.'))) ].length, + numUniqueAbsoluteDomains: + [ ...new Set(filteredHistoryForDay.map(historyItem => (new URL(historyItem.url)).hostname)) ].length, + } + ); + } + + outputData = { + currentTime: Date.now(), + timezoneOffset: new Date().getTimezoneOffset(), + searchUseData: searchUseData, + browserUseData: browserUseData, + } + + document.getElementById('dataVisual').innerHTML = JSON.stringify(outputData, null, 2); + + historyDataEntered = true; + } + } catch(error) { + historyDataEntered = false; + document.getElementById("file-error-message").classList.add("is-active"); + document.getElementById("fileInputDiv").classList.add("is-danger"); + } + updateSubmitButton(); + } + reader.readAsText(file); +}); + +prolificIdInputField.addEventListener( + "input", + function (event) { + validateInFocus(event.target, event.target.nextElementSibling); + }, + true +); + +prolificIdInputField.addEventListener('blur', function (event) { + validateOutFocus(event.target, event.target.nextElementSibling); +}); + +function validateInFocus(element, sibling) { + element.classList.remove("is-danger"); + sibling.classList.remove("error-message"); + if(element.value == "" || element.value == null) { + sibling.classList.add("input-assist-message", "is-active"); + element.classList.add("is-warning"); + } else if(!isValidProlificID(element.value)) { + sibling.classList.add("input-assist-message", "is-active"); + element.classList.add("is-warning"); + } else { + sibling.classList.remove("is-active"); + element.classList.remove("is-warning"); + } +} + +function validateOutFocus(element, sibling) { + element.classList.remove("is-warning"); + if(element.value == "" || element.value == null) { + sibling.classList.remove("input-assist-message"); + sibling.classList.add("error-message", "is-active"); + element.classList.add("is-danger"); + } else if(!isValidProlificID(element.value)) { + sibling.classList.remove("input-assist-message"); + sibling.classList.add("error-message", "is-active"); + element.classList.add("is-danger"); + } else { + sibling.classList.remove("error-message", "is-active"); + element.classList.remove("is-danger"); + } +} diff --git a/resources/js/index.js b/resources/js/index.js deleted file mode 100644 index f4c08e4..0000000 --- a/resources/js/index.js +++ /dev/null @@ -1,160 +0,0 @@ -const millisecondsPerDay = 1000 * 3600 * 24; - -let prolificIdEntered = false; -let historyDataEntered = false; - -function getQueryVariable(url, parameter) { - const urlObject = new URL(url); - return urlObject.searchParams.get(parameter); -} - -function updateSubmitButton() { - if(prolificIdEntered && historyDataEntered) { - document.getElementById('submitButton').disabled = false; - } else { - document.getElementById('submitButton').disabled = true; - } -} - -document.getElementById('continueButton').onclick = () => { - document.getElementById('infoSection').style.display = 'none'; - document.getElementById('formSection').style.display = 'block'; -}; - -document.getElementById('submitButton').onclick = () => { - document.getElementById('formSection').style.display = 'none'; - document.getElementById('thankYouSection').style.display = 'block'; -}; - -document.getElementById("copyExtensionUrlButton").onclick = () => { - navigator.clipboard.writeText(document.getElementById('extensionUrlTextField').value); - document.getElementById('tooltip').innerHTML = 'Copied!'; -}; - -document.getElementById("copyExtensionUrlButton").onmouseout = () => { - document.getElementById('tooltip').innerHTML = 'Copy to clipboard'; -}; - -document.getElementById("prolificIdInput").onkeyup = (event) => { - prolificIdEntered = !!event.target.value; - updateSubmitButton(); -}; - -const searchEnginesMetadata = { - Google: function (url) { - return url.match(/(?:^(?:https?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); - }, - DuckDuckGo: function (url) { - if(url.match(/(?:^(?:https?):\/\/(?:www\.)?duckduckgo\.com)/i)) { - return !!getQueryVariable(url, "q"); - } - return false; - }, - Bing: function (url) { - return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?bing\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); - }, - Yahoo: function (url) { - return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?search\.yahoo\.com(?::[0-9]+)?\/search(?:\/\?|\?|\/;_ylt|;_ylt))/i); - }, - Ecosia: function (url) { - return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?ecosia\.org(?::[0-9]+)?\/search(?:\/\?|\?))/i); - }, - Ask: function (url) { - return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?ask\.com(?::[0-9]+)?\/web(?:\/\?|\?))/i); - }, - Baidu: function (url) { - return url.match(/(?:^(?:https?):\/\/(?:www\.)?baidu\.com(?::[0-9]+)?\/s(?:\/\?|\?))/i); - }, - Brave: function (url) { - return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?search\.brave\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); - }, -} - -function roundToNearestHour(timestamp) { - let date = new Date(timestamp); - - // Get the minutes - let minutes = date.getMinutes(); - - // Clear the minutes and seconds (and milliseconds) - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - - // Determine whether to round up or down - if(minutes > 30) { - date.setHours(date.getHours() + 1); - } - - return date.getTime(); -} - -if(window.FileList && window.File) { - document.getElementById('fileInput').addEventListener('change', event => { - const file = event.target.files[ 0 ]; - - document.getElementById("fileName").innerHTML = file.name; - - // Ensure file name is history.json? - // Might cause issues if they are downloading to same directory on second try - // if(file.name != 'history.json') { - - // } - - const reader = new FileReader(); - - reader.onload = function (event) { - const historyJson = JSON.parse(event.target.result); - - const searchUseData = []; - for(let historyItem of historyJson) { - for(let searchEngine in searchEnginesMetadata) { - if(searchEnginesMetadata[ searchEngine ](historyItem.url)) { - searchUseData.push( - { - searchEngine: searchEngine, - timestamp: roundToNearestHour(historyItem.visitTime), - transition: historyItem.transition, - } - ); - } - } - } - - const browserUseData = []; - for(let daysBack = 0; daysBack < 30; daysBack++) { - const filteredHistoryForDay = historyJson.filter((historyItem) => - Math.floor((Date.now() - historyItem.visitTime) / millisecondsPerDay) == daysBack - ); - - browserUseData.push( - { - numDaysBack: daysBack, - numWebpages: filteredHistoryForDay.length, - numUniqueWebpages: - [ ...new Set(filteredHistoryForDay.map(historyItem => historyItem.url.split("#")[ 0 ])) ].length, - numDomains: 0, - numUniqueDomains: - [ ...new Set(filteredHistoryForDay.map(historyItem => (new URL(historyItem.url)).hostname)) ].length, - } - ); - } - - const outputData = { - currentTime: roundToNearestHour(Date.now()), - timezoneOffset: new Date().getTimezoneOffset(), - searchUseData: searchUseData, - browserUseData: browserUseData, - } - - console.log(outputData) - - document.getElementById('dataVisual').innerHTML = JSON.stringify(outputData, null, 2); - - historyDataEntered = true; - updateSubmitButton(); - } - - reader.readAsText(file); - }); -} diff --git a/resources/js/initial.js b/resources/js/initial.js new file mode 100644 index 0000000..7cd62c8 --- /dev/null +++ b/resources/js/initial.js @@ -0,0 +1,319 @@ +const millisecondsPerDay = 1000 * 3600 * 24; + +let prolificIdEntered = false; +let historyDataEntered = false; + +let outputData = {}; + +const prolificIdInputField = document.getElementById("prolificIdInput"); + +function isValidProlificID(text) { + const matches = text.match(/[A-Za-z0-9]/g); + return matches ? matches.length == 24 : false; +} + +function getQueryVariable(url, parameter) { + const urlObject = new URL(url); + return urlObject.searchParams.get(parameter); +} + +function updateSubmitButton() { + if(prolificIdEntered && historyDataEntered) { + document.getElementById('submitButton').disabled = false; + } else { + document.getElementById('submitButton').disabled = true; + } +} + +document.getElementById('continueButton').onclick = () => { + document.getElementById('infoSection').style.display = 'none'; + document.getElementById('formSection').style.display = 'block'; +}; + +document.getElementById('submitButton').onclick = async (event) => { + event.target.classList.add("is-loading"); + const url = "https://q5mrwzyq1e.execute-api.us-east-2.amazonaws.com/deployed"; + + const postBodyJson = { + prolificId: document.getElementById("prolificIdInput").value.match(/[A-Za-z0-9]/g).join(""), + studyPhase: document.querySelector('meta[name="studyPhase"]').getAttribute('data-value'), + historyData: outputData, + } + + await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(postBodyJson) + }) + .then(response => { + if(response.ok) { + return response.json() + } else { + throw new Error(); + } + }) + .then(data => { + if(data.statusCode == 200) { + document.getElementById('formSection').style.display = 'none'; + document.getElementById('thankYouSection').style.display = 'block'; + + window.open("https://app.prolific.com/submissions/complete?cc=CYX953F7", '_blank'); + } else { + throw new Error(); + } + + }).catch(() => { + document.getElementById('submit-error').classList.add("error-message", "is-active"); + }); + + event.target.classList.remove("is-loading") +}; + +document.getElementById("copyExtensionUrlButton").onclick = () => { + navigator.clipboard.writeText(document.getElementById('extensionUrlTextField').value); + document.getElementById('tooltip').innerHTML = 'Copied!'; +}; + +document.getElementById("copyExtensionUrlButton").onmouseout = () => { + document.getElementById('tooltip').innerHTML = 'Copy to clipboard'; +}; + +prolificIdInput.onkeyup = (event) => { + prolificIdEntered = isValidProlificID(event.target.value); + updateSubmitButton(); +}; + +const searchEnginesMetadata = { + Google: { + getIsSerpPage: function (url) { + return url.match(/(?:^(?:https?):\/\/(?:www\.)?google\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q", "query" ], + }, + DuckDuckGo: { + getIsSerpPage: function (url) { + if(url.match(/(?:^(?:https?):\/\/(?:www\.)?duckduckgo\.com)/i)) { + return !!getQueryVariable(url, "q"); + } + return false; + }, + searchQueryParameters: [ "q" ], + }, + Bing: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?bing\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q" ], + }, + Yahoo: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?search\.yahoo\.com(?::[0-9]+)?\/search(?:\/\?|\?|\/;_ylt|;_ylt))/i); + }, + searchQueryParameters: [ "p", "q", "query" ], + }, + Ecosia: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?ecosia\.org(?::[0-9]+)?\/search(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q" ], + }, + Ask: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?ask\.com(?::[0-9]+)?\/web(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q", "query" ], + }, + Baidu: { + getIsSerpPage: function (url) { + return url.match(/(?:^(?:https?):\/\/(?:www\.)?baidu\.com(?::[0-9]+)?\/s(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "wd", "word" ], + }, + Brave: { + getIsSerpPage: function (url) { + return !!url.match(/(?:^(?:https?):\/\/(?:www\.)?search\.brave\.com(?::[0-9]+)?\/search(?:\/\?|\?))/i); + }, + searchQueryParameters: [ "q" ], + }, +} + +function getSerpQuery(url, engine) { + try { + if(!url || !engine) { + return null; + } + + // Get the possible search query parameters for the engine. + const searchQueryParameters = searchEnginesMetadata[ engine ].searchQueryParameters; + + // If any of the search query parameters are in the URL, return the query. + for(const parameter of searchQueryParameters) { + const query = getQueryVariable(url, parameter); + if(query) { + return query; + } + } + + // For DuckDuckGo, the search parameter can be specified in the pathname. + // eg. https://duckduckgo.com/Example?ia=web + if(engine === "DuckDuckGo") { + const pathname = (new URL(url)).pathname + const pathnameSplit = pathname.split("/") + if(pathnameSplit.length === 2 && pathnameSplit[ 1 ]) { + const query = decodeURIComponent(pathnameSplit[ 1 ].replace(/_/g, " ")) + if(query) { + return query; + } + } + } + return ""; + } catch(error) { + return null; + } + +} + +document.getElementById('fileInput').addEventListener('change', event => { + const file = event.target.files[ 0 ]; + document.getElementById("fileName").innerHTML = file.name; + + const reader = new FileReader(); + reader.onload = function (event) { + try { + const historyJson = JSON.parse(event.target.result); + + const firstHistoryEntry = historyJson[ 0 ]; + if(!("url" in firstHistoryEntry && "visitTime" in firstHistoryEntry && "transition" in firstHistoryEntry)) { + historyDataEntered = false; + document.getElementById("file-error-message").classList.add("is-active"); + document.getElementById("fileInputDiv").classList.add("is-danger"); + } else { + document.getElementById("file-error-message").classList.remove("is-active"); + document.getElementById("fileInputDiv").classList.remove("is-danger"); + + const searchUseData = []; + + const queryToIdMap = new Map(); + let idCounter = 0; + + const filteredHistoryForPeriod = historyJson.filter((historyItem) => + (Date.now() - historyItem.visitTime) / millisecondsPerDay <= 30 + ); + for(let historyItem of filteredHistoryForPeriod) { + for(let searchEngine in searchEnginesMetadata) { + if(searchEnginesMetadata[ searchEngine ].getIsSerpPage(historyItem.url)) { + + let queryId = -1; + try { + const query = getSerpQuery(historyItem.url, searchEngine); + if(query == null) { + queryId = -1; + } else { + if(!queryToIdMap.has(query)) { + queryToIdMap.set(query, idCounter++); + } + queryId = queryToIdMap.get(query) + } + } catch(error) { + queryId = -1; + } + + searchUseData.push( + { + searchEngine: searchEngine, + timestamp: historyItem.visitTime, + transition: historyItem.transition, + queryId: queryId, + } + ); + } + } + } + + const browserUseData = []; + for(let daysBack = 0; daysBack < 30; daysBack++) { + const filteredHistoryForDay = historyJson.filter((historyItem) => + Math.floor((Date.now() - historyItem.visitTime) / millisecondsPerDay) == daysBack + ); + + browserUseData.push( + { + numDaysBack: daysBack, + numWebpages: filteredHistoryForDay.length, + numUniqueWebpagesWithoutFragmentIdentifiers: + [ ...new Set(filteredHistoryForDay.map(historyItem => historyItem.url.split("#")[ 0 ])) ].length, + numUniqueWebpagesWithoutQueryParameters: + [ ...new Set(filteredHistoryForDay.map(historyItem => historyItem.url.split("?")[ 0 ])) ].length, + numUniqueDomains: + [ ...new Set(filteredHistoryForDay.map(historyItem => (new URL(historyItem.url)).hostname.split('.').slice(-2).join('.'))) ].length, + numUniqueAbsoluteDomains: + [ ...new Set(filteredHistoryForDay.map(historyItem => (new URL(historyItem.url)).hostname)) ].length, + } + ); + } + + outputData = { + currentTime: Date.now(), + timezoneOffset: new Date().getTimezoneOffset(), + searchUseData: searchUseData, + browserUseData: browserUseData, + } + + document.getElementById('dataVisual').innerHTML = JSON.stringify(outputData, null, 2); + + historyDataEntered = true; + } + } catch(error) { + historyDataEntered = false; + document.getElementById("file-error-message").classList.add("is-active"); + document.getElementById("fileInputDiv").classList.add("is-danger"); + } + updateSubmitButton(); + } + reader.readAsText(file); +}); + +prolificIdInputField.addEventListener( + "input", + function (event) { + validateInFocus(event.target, event.target.nextElementSibling); + }, + true +); + +prolificIdInputField.addEventListener('blur', function (event) { + validateOutFocus(event.target, event.target.nextElementSibling); +}); + +function validateInFocus(element, sibling) { + element.classList.remove("is-danger"); + sibling.classList.remove("error-message"); + if(element.value == "" || element.value == null) { + sibling.classList.add("input-assist-message", "is-active"); + element.classList.add("is-warning"); + } else if(!isValidProlificID(element.value)) { + sibling.classList.add("input-assist-message", "is-active"); + element.classList.add("is-warning"); + } else { + sibling.classList.remove("is-active"); + element.classList.remove("is-warning"); + } +} + +function validateOutFocus(element, sibling) { + element.classList.remove("is-warning"); + if(element.value == "" || element.value == null) { + sibling.classList.remove("input-assist-message"); + sibling.classList.add("error-message", "is-active"); + element.classList.add("is-danger"); + } else if(!isValidProlificID(element.value)) { + sibling.classList.remove("input-assist-message"); + sibling.classList.add("error-message", "is-active"); + element.classList.add("is-danger"); + } else { + sibling.classList.remove("error-message", "is-active"); + element.classList.remove("is-danger"); + } +} diff --git a/resources/js/redirect.js b/resources/js/redirect.js new file mode 100644 index 0000000..cf478f6 --- /dev/null +++ b/resources/js/redirect.js @@ -0,0 +1,54 @@ +getIsDesktop = () => { + let check = false; + (function (a) { if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera); + return !check; +}; + +getBrowserIsChromeOrEdge = () => { + const userAgent = navigator.userAgent; + + let browser = "unknown"; + + // Detect browser name + browser = (/ucbrowser/i).test(userAgent) ? 'UCBrowser' : browser; + browser = (/edg/i).test(userAgent) ? 'Edge' : browser; + browser = (/googlebot/i).test(userAgent) ? 'GoogleBot' : browser; + browser = (/chromium/i).test(userAgent) ? 'Chromium' : browser; + browser = (/firefox|fxios/i).test(userAgent) && !(/seamonkey/i).test(userAgent) ? 'Firefox' : browser; + browser = (/; msie|trident/i).test(userAgent) && !(/ucbrowser/i).test(userAgent) ? 'IE' : browser; + browser = (/chrome|crios/i).test(userAgent) && !(/opr|opera|chromium|edg|ucbrowser|googlebot/i).test(userAgent) ? 'Chrome' : browser;; + browser = (/safari/i).test(userAgent) && !(/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i).test(userAgent) ? 'Safari' : browser; + browser = (/opr|opera/i).test(userAgent) ? 'Opera' : browser; + + if(getIsDesktop() && (browser == "Edge" || browser == "Chrome")) { + return true; + } else return false; +} + +// 'initial' or 'followup' +const studyPhase = document.querySelector('meta[name="studyPhase"]').getAttribute('data-value'); + + +(async () => { + if(getBrowserIsChromeOrEdge()) { + if(studyPhase == "initial") { + window.location.href = "https://princetonsurvey.az1.qualtrics.com/jfe/form/SV_etdT5Iu2fuMKoyG"; + } else { + window.location.href = "https://princetonsurvey.az1.qualtrics.com/jfe/form/SV_2tVRzUgJ8w9msLA"; + } + } else { + const url = "https://n97rmes9xl.execute-api.us-east-2.amazonaws.com/deployed"; + await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + "studyPhase": studyPhase, + "prolificId": (new URLSearchParams(window.location.search)).get("PROLIFIC_PID") + }) + }); + + window.location.href = "http://search-engine-use.cs.princeton.edu/ineligible"; + } +})();