summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjahoti <jahoti@tilde.team>2021-07-04 00:00:00 +0000
committerjahoti <jahoti@tilde.team>2021-07-04 00:00:00 +0000
commit2059fab6c01a0793e8a82f80d9518ed2bd6d1e29 (patch)
tree2785bcac60568bb6d9ff68b959c6735baf76ea81
parentd0ae39390fba3822aed4a498aafcdfa61289448b (diff)
downloadbrowser-extension-2059fab6c01a0793e8a82f80d9518ed2bd6d1e29.tar.gz
browser-extension-2059fab6c01a0793e8a82f80d9518ed2bd6d1e29.zip
Revamp default settings
Default settings are now provided in the same format as data exported from the extension, incorporating them into the main program as part of the build process. Also, modify their contents; the apparently non-functional FSF stuff is gone, replaced with fixes for BandCamp, WorldCat, and SumOfUs.
-rw-r--r--background/main.js132
-rwxr-xr-xbuild.sh12
-rw-r--r--default_settings.json47
3 files changed, 63 insertions, 128 deletions
diff --git a/background/main.js b/background/main.js
index aec25b6..2fcdda3 100644
--- a/background/main.js
+++ b/background/main.js
@@ -32,136 +32,14 @@ async function init_myext(install_details)
/*
* Below we add sample settings to the extension.
- * Those should be considered example values for viewing in the options
- * page. They won't make my.fsf.org work. The only scripts that does
- * something useful right now is the opencores one.
*/
- let components = [];
- for (let script_data of [
- {url: "http://127.0.0.1:8000/myfsf_define_CRM.js",
- hash:"bf0cc81c7e8d5f800877b4bc3f14639f946f5ac6d4dc120255ffac5eba5e48fe"},
- {url: "https://my.fsf.org/misc/jquery.js?v=1.4.4",
- hash:"261ae472fa0cbf27c80c9200a1599a60fde581a0e652eee4bf41def8cb61f2d0"},
- {url: "https://my.fsf.org/misc/jquery-extend-3.4.0.js?v=1.4.4",
- hash:"c54103ba57ee210ca55c052e70415402707548a4e6a68dd6efb3895019bee392"},
- {url: "https://my.fsf.org/misc/jquery-html-prefilter-3.5.0-backport.js?v=1.4.4",
- hash:"fad84efa145fb507e5df9b582fa01b1c4e6313de7f72ebdd55726d92fa4dbf06"},
- {url: "https://my.fsf.org/misc/jquery.once.js?v=1.2",
- hash:"1430f42c0d760ba8e05bb3762480502e541f654fec5739ee40625ab22dc38c4f"},
- {url: "https://my.fsf.org/misc/drupal.js?qmaukd",
- hash:"2e08dccbd4d8b728a6871562995a4636b89bfe0ed3b8fb0138191c922228b116"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/bower_components/jquery/dist/jquery.min.js?qmaukd",
- hash:"a6d01520d28d15dbe476de84eea90eb3ee2d058722efc062ec73cb5fad78a17b"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/bower_components/jquery-ui/jquery-ui.min.js?qmaukd",
- hash:"28ce75d953678c4942df47a11707a15e3c756021cf89090e3e6aa7ad6b6971c3"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/bower_components/lodash-compat/lodash.min.js?qmaukd",
- hash:"f2871cc80c52fe8c04c582c4a49797c9c8fd80391cf1452e47f7fe97835ed5cc"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/packages/jquery/plugins/jquery.mousewheel.min.js?qmaukd",
- hash:"f50233e84c2ac7ada37a094d3f7d3b3f7c97716d6b7b47bf69619d93ee4ac1ce"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/bower_components/select2/select2.min.js?qmaukd",
- hash:"ce61298fb9aa4ec49ccd4172d097e36a9e5db3af06a7b82796659368f15b7c1b"},
- {url: "https://my.fsf.org/sites/all/modules/civi crm/packages/jquery/plugins/jquery.form.min.js?qmaukd",
- hash:"c90f0e501d2948fbc2b61bffd654fa4ab64741fd48923782419eeb14d3816fb8"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/packages/jquery/plugins/jquery.timeentry.min.js?qmaukd",
- hash:"8e85df981e8ad7049d06dfb075277d038734d36a7097c7f021021b2bdccfe9bb"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/packages/jquery/plugins/jquery.blockUI.min.js?qmaukd",
- hash:"806aedff52ac822f2adc5797073e1e5c5cec32eb9f15f2319cb32a347dcd232b"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/bower_components/datatables/media/js/jquery.dataTables.min.js?qmaukd",
- hash:"b796504d9b1b422f0dc6ccc2d740ac78a8c9e5078cc3934836d39742b1121925"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/bower_components/jquery-validation/dist/jquery.validate.min.js?qmaukd",
- hash:"f0f5373ad203101ea91bf826c5a7ef8f7cd74887f06bad2cb9277a504503b9e2"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/packages/jquery/plugins/jquery.ui.datepicker.validation.min.js?qmaukd",
- hash:"c6e6f6bf7f8fff25cca338045774e267e8eaa2d48ac9100540f3d59a6d2b3c61"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/js/Common.js?qmaukd",
- hash:"17aa222a3af2e8958be16accb5e77ef39f67009cb3b500718d8fffd45b399148"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/js/crm.datepicker.js?qmaukd",
- hash:"9bd8d10208aa99c156325f7819da6f0dd62ba221ac4119c3ccd4834e2cf36535"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/js/crm.ajax.js?qmaukd",
- hash:"6401a4e257b7499ae4a00be2c200e4504a2c9b3d6b278a830c31a7b63374f0fe"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/js/wysiwyg/crm.wysiwyg.js?qmaukd",
- hash:"fa962356072a36672c3b4b25bdeb657f020995a067e20a29cd5bb84b05157762"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/js/noconflict.js?qmaukd",
- hash:"58d6d9f496a235d23cf891926d71f2104e4f2afe1d14bb4e2b5233f646c35e62"},
- {url: "https://my.fsf.org/sites/all/modules/matomo/matomo.js?qmaukd",
- hash:"7f39ccd085f348189cd2fb62ea4d4a658d96f6bba266265880b98605e777e2de"},
- {url: "https://my.fsf.org/sites/all/themes/fsf_venture/js/global.js?qmaukd",
- hash:"aa7983f6b902f9f4415cfc8346e0c3f194cc95b78f52f2ad09ec7effa1326b9c"},
- {url: "https://my.fsf.org/sites/all/themes/fsf_venture/js/jquery.superfish.min.js?qmaukd",
- hash:"5ef1f93bf3901227056bf9ed0ed93a148eec4dda30f419756b12bedd1098815e"},
- {url: "https://my.fsf.org/sites/all/themes/fsf_venture/js/jquery.sidr.min.js?qmaukd",
- hash:"c4914d415826676c6af2e61f16edb72c5388f8600ba6de9049892aee49d980a0"},
- {url: "https://my.fsf.org/sites/all/themes/fsf_venture/js/jquery.flexslider.min.js?qmaukd",
- hash:"cefaf715761b4494913851249b9d40dacb4a8cb61242b0efc859dc586d56e0d4"},
- {url: "http://127.0.0.1:8000/myfsf_crap.js",
- hash:"d91ccf21592d0f861ea0ba946bc257fc5d88269327cad0a91387da6cb8ff633e"},
- {url: "https://my.fsf.org/sites/all/modules/civicrm/templates/CRM/Core/BillingBlock.js?r=lp7Di",
- hash:"2f25d35e7a0c0060ab0a444a577f09dd3c9934ae898a7ee0eb20b6c986ab5a1c"},
- {url: "https://my.fsf.org/extensions/com.aghstrategies.giftmemberships/js/giftpricefield.js?r=lp7Di",
- hash:"f86080e6bd306fe46474039aeca2808235005bce5a2a29416d08210022039a45"},
- {url: "https://my.fsf.org/extensions/com.ginkgostreet.negativenegator/js/negativenegator.js?r=lp7Di",
- hash:"d0e87bac832856db70947d82a7ab4e0b7c8b1070d5f1a32335345e033ece3a14"}
- ]) {
- let name_regex = /\/([^/]+)\.js/;
- let name = name_regex.exec(script_data.url)[1];
- await storage.set(TYPE_PREFIX.SCRIPT, name, script_data);
- components.push([TYPE_PREFIX.SCRIPT, name]);
+ for (let setting of // The next line is replaced with the contents of /default_settings.json by the build script
+ `DEFAULT SETTINGS`
+ ) {
+ let [key, value] = Object.entries(setting)[0];
+ storage.set(key[0], key.substring(1), value);
}
-
- await storage.set(TYPE_PREFIX.BAG, "myfsf_join", components);
-
- await storage.set(TYPE_PREFIX.PAGE, "https://my.fsf.org/join", {
- components: [TYPE_PREFIX.BAG, "myfsf_join"]
- });
-
- let hello_script = {
- text: "console.log(\"hello, every1!\");\n"
- };
- await storage.set(TYPE_PREFIX.SCRIPT, "hello", hello_script);
- await storage.set(TYPE_PREFIX.BAG, "hello",
- [[TYPE_PREFIX.SCRIPT, "hello"]]);
- await storage.set(TYPE_PREFIX.PAGE, "https://my.fsf.org/", {
- components: [TYPE_PREFIX.BAG, "hello"],
- allow: true
- });
-
- let opencores_script = {
- text: `\
-let data = JSON.parse(document.getElementById("__NEXT_DATA__").textContent);
-let sections = {};
-for (let h1 of document.getElementsByClassName("cMJCrc")) {
- let ul = document.createElement("ul");
- if (h1.nextElementSibling !== null)
- h1.parentNode.insertBefore(ul, h1.nextElementSibling);
- else
- h1.parentNode.appendChild(ul);
-
- sections[h1.children[1].firstChild.textContent] = ul;
-}
-
-for (let prop of data.props.pageProps.list) {
- let ul = sections[prop.category];
- if (ul === undefined) {
- console.log(\`unknown category "\${prop.category}" for project "\${prop.title}"\`);
- continue;
- }
-
- let li = document.createElement("li");
- let a = document.createElement("a");
- a.setAttribute("href", "/projects/" + prop.slug);
- a.textContent = prop.title;
-
- li.appendChild(a);
- ul.appendChild(li);
-}
-`
- };
-
- await storage.set(TYPE_PREFIX.SCRIPT, "opencores", opencores_script);
- await storage.set(TYPE_PREFIX.PAGE, "https://opencores.org/projects", {
- components: [TYPE_PREFIX.SCRIPT, "opencores"],
- allow: false
- });
}
browser.runtime.onInstalled.addListener(init_myext);
diff --git a/build.sh b/build.sh
index 9fe81c3..f38b5e0 100755
--- a/build.sh
+++ b/build.sh
@@ -271,7 +271,17 @@ s^_CONTENTSCRIPTS_^$CONTENTSCRIPTS^" \
(() => {
$(map_get IMPORTCODES $FILEKEY)
-"; cat $FILE; echo "
+";
+
+# A hack to insert the contents of default_settings.json at the appropriate location in background/main.js
+if [ "$FILE" = "background/main.js" ]; then
+ # Uses an internal sed expression to escape and indent the JSON file for use in the external sed expression
+ sed 's/^ `DEFAULT SETTINGS`$/'"$(sed -E 's/([\\\&\/])/\\\1/g; s/^/ /; s/$/\\/' < default_settings.json) "/g < "$FILE"
+else
+ cat $FILE
+fi
+
+echo "
$(map_get EXPORTCODES $FILEKEY)
})();") > $BUILDDIR/$FILE
diff --git a/default_settings.json b/default_settings.json
new file mode 100644
index 0000000..8656381
--- /dev/null
+++ b/default_settings.json
@@ -0,0 +1,47 @@
+[
+ {
+ "sbandcamp": {
+ "text": "/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nvar div, player, playerBox = document.querySelector('.inline_player');\nplayerBox.innerHTML = '';\n\nfor (var track of JSON.parse(document.querySelector('[data-tralbum]').dataset.tralbum).trackinfo) {\n\tdiv = document.createElement('div');\n\tplayer = document.createElement('audio');\n\t\n\tdiv.innerText = track.title + ': ';\n\tplayer.src = track.file['mp3-128']; // Is this always available?\n\tdiv.append(player);\n\tplayerBox.append(div);\n}"
+ }
+ },
+ {
+ "sopencores": {
+ "text":"let data = JSON.parse(document.getElementById(\"__NEXT_DATA__\").textContent);\nlet sections = {};\nfor (let h1 of document.getElementsByClassName(\"cMJCrc\")) {\n let ul = document.createElement(\"ul\");\n if (h1.nextElementSibling !== null)\n\th1.parentNode.insertBefore(ul, h1.nextElementSibling);\n else\n\th1.parentNode.appendChild(ul);\n\n sections[h1.children[1].firstChild.textContent] = ul;\n}\n\nfor (let prop of data.props.pageProps.list) {\n let ul = sections[prop.category];\n if (ul === undefined) {\n\tconsole.log(`unknown category \"${prop.category}\" for project \"${prop.title}\"`);\n\tcontinue;\n }\n\n let li = document.createElement(\"li\");\n let a = document.createElement(\"a\");\n a.setAttribute(\"href\", \"/projects/\" + prop.slug);\n a.textContent = prop.title;\n\n li.appendChild(a);\n ul.appendChild(li);\n}\n"
+ }
+ },
+ {
+ "ssumofus (sign petition)": {
+ "text": "/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nfunction submitFormItem() {\n\tvar name, val, queryString = '', xhr = new content.XMLHttpRequest();\n\tfor (var formItem of this.querySelectorAll('select, input:not([type=\"radio\"]):not([type=\"checkbox\"])' +\n\t\t':not([type=\"submit\"]):not([type=\"reset\"])')) {\n\t\tqueryString += (queryString && '&') + formItem.name + '=' + encodeURIComponent(formItem.value);\n\t}\n\t\n\txhr.onreadystatechange = function () {\n\t\tif (this.readyState === 4) {\n\t\t\tif (this.status === 200) location.href = JSON.parse(this.responseText).follow_up_url;\n\t\t\telse if (this.status === 422) {\n\t\t\t\tvar failMessage = [], response = JSON.parse(this.responseText);\n\t\t\t\tfor (field in response.errors) for (error of response.errors[field]) {\n\t\t\t\t\tfailMessage.push('Field \"' + field + '\" ' + error);\n\t\t\t\t}\n\t\t\t\talert(failMessage.join('\\n'));\n\t\t\t}\n\t\t\telse alert('Submission failed: response code ' + this.status);\n\t\t}\n\t}\n\t\n\txhr.open('POST', this.action, true); // Manually add the domain, as it's not properly handled in extensions\n\txhr.setRequestHeader('X-CSRF-Token', csrf);\n\txhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\txhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\txhr.send(queryString);\n\treturn false;\n}\n\n// Apply CSS as necessary\nif (notice = document.querySelector('#petition-bar-main > span')) notice.style.display = 'none'; // Hide the totally mistaken (even without this extension) anti-anti-JS warning\ndocument.querySelector('.script-dependent').style.display = 'block';\ndocument.querySelector('.button-wrapper').style.position = 'static'; // Stop the \"submit\" button obscuring the form\n\n\n\ncsrf = document.querySelector('meta[name=\"csrf-token\"]').content\nfor (var button of document.querySelectorAll('button[type=\"submit\"].button.action-form__submit-button')) button.form.onsubmit = submitFormItem;"
+ }
+ },
+ {
+ "sworldcat (library holdings)": {
+ "text": "/*\n\tCopyright © 2021 jahoti (jahoti@tilde.team)\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t http://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n*/\n\nvar pathParts = location.pathname.split('/'), itemRef = pathParts[pathParts.length - 1];\n\n// Generate a function which, when invoked, loads the catalog holdings starting at i (one-indexed) focused on loc\nfunction generateGoTo(i, set_loc) {\n\treturn function () {\n\t\t; // If this is a new search, \"set_loc\" won't be set; set it\n\t\tvar xhr = new content.XMLHttpRequest(), loc = set_loc || encodeURIComponent(locInput.value);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (this.readyState === 4) {\n\t\t\t\tif (this.status === 200) {\n\t\t\t\t\tretrieved.innerHTML = this.responseText;\n\t\t\t\t\t\n\t\t\t\t\tvar i, node = document.getElementById('libslocator');\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t\tfor (node of retrieved.querySelectorAll('a[href^=\"javascript:findLibs(\\'\\', \"]')) {\n\t\t\t\t\t\ti = parseInt(node.href.split(',', 2)[1]);\n\t\t\t\t\t\tnode.onclick = generateGoTo(i, loc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse alert('Search failed: response code ' + this.status);\n\t\t\t}\n\t\t}\n\t\t\n\t\txhr.open('GET', 'https://www.worldcat.org/wcpa/servlet/org.oclc.lac.ui.ajax.ServiceServlet?wcoclcnum=' + itemRef + '&start_holding='\n\t\t\t\t+ i + '&serviceCommand=holdingsdata&loc=' + loc, true);\n\t\txhr.send();\n\t\treturn false; // Make sure the browser doesn't try to submit any holding form\n\t};\n}\n\n\nvar retriever = document.querySelector('.retrieving'), retrieved = document.getElementById('donelocator');\n\nvar locForm = document.createElement('form'), locLabel = document.createElement('label'), locInput = document.createElement('input'),\n\tlocSubmit = document.createElement('input');\n\nlocForm.appendChild(locLabel);\nlocForm.appendChild(locInput);\nlocForm.appendChild(locSubmit);\n\nlocInput.name = locLabel.htmlFor = 'cat_location';\nlocInput.type = 'text';\nlocInput.required = 'yes';\nlocLabel.innerText = 'Find copies closest to: ';\nlocSubmit.value = 'Go';\nlocSubmit.type = 'submit';\nlocForm.onsubmit = generateGoTo(1);\n\nretriever.parentNode.replaceChild(locForm, retriever);"
+ }
+ },
+ {
+ "phttps://*.bandcamp.com/track/*": {
+ "components": ["s", "bandcamp"]
+ }
+ },
+ {
+ "phttps://opencores.org/projects": {
+ "components": ["s", "opencores"]
+ }
+ },
+ {
+ "phttps://actions.sumofus.org/a/*": {
+ "components": ["s", "sumofus (sign petition)"],
+ }
+ },
+ {
+ "phttps://worldcat.org/title/**": {
+ "components": ["s", "worldcat (library holdings)"]
+ }
+ },
+ {
+ "phttps://www.worldcat.org/title/**": {
+ "components": ["s", "worldcat (library holdings)"]
+ }
+ }
+]