Gildas 5 лет назад
Родитель
Сommit
7f10ad0abe
38 измененных файлов с 241 добавлено и 236 удалено
  1. 1 1
      cli/back-ends/jsdom.js
  2. 2 2
      cli/back-ends/playwright-chromium.js
  3. 2 2
      cli/back-ends/playwright-firefox.js
  4. 2 2
      cli/back-ends/puppeteer-firefox.js
  5. 2 2
      cli/back-ends/puppeteer.js
  6. 1 1
      cli/back-ends/webdriver-chromium.js
  7. 1 1
      cli/back-ends/webdriver-gecko.js
  8. 1 1
      common/index.js
  9. 1 1
      common/ui/content/content-infobar.js
  10. 22 22
      extension/core/bg/autosave.js
  11. 10 10
      extension/core/bg/bookmarks.js
  12. 23 23
      extension/core/bg/business.js
  13. 4 4
      extension/core/bg/companion.js
  14. 10 10
      extension/core/bg/config.js
  15. 3 3
      extension/core/bg/devtools.js
  16. 26 26
      extension/core/bg/downloads.js
  17. 6 6
      extension/core/bg/editor.js
  18. 15 15
      extension/core/bg/messages.js
  19. 2 2
      extension/core/bg/requests.js
  20. 4 4
      extension/core/bg/tabs-data.js
  21. 18 18
      extension/core/bg/tabs.js
  22. 8 7
      extension/core/content/content-bootstrap.js
  23. 3 3
      extension/core/content/content-download.js
  24. 12 10
      extension/core/content/content-main.js
  25. 1 1
      extension/core/index.js
  26. 3 3
      extension/index.js
  27. 2 2
      extension/lib/single-file/core/bg/scripts.js
  28. 3 3
      extension/lib/single-file/fetch/bg/fetch.js
  29. 1 1
      extension/lib/single-file/fetch/content/content-fetch.js
  30. 1 1
      extension/lib/single-file/index.js
  31. 7 7
      extension/ui/bg/ui-button.js
  32. 6 6
      extension/ui/bg/ui-commands.js
  33. 3 3
      extension/ui/bg/ui-editor.js
  34. 15 15
      extension/ui/bg/ui-main.js
  35. 14 14
      extension/ui/bg/ui-menus.js
  36. 4 2
      extension/ui/content/content-ui-editor-init-web.js
  37. 1 1
      extension/ui/content/content-ui-main.js
  38. 1 1
      extension/ui/index.js

+ 1 - 1
cli/back-ends/jsdom.js

@@ -80,7 +80,7 @@ async function getPageData(win, options) {
 	}
 	const pageData = await win.singlefile.lib.getPageData(options, { fetch: url => fetchResource(url, options) }, doc, win);
 	if (options.includeInfobar) {
-		await win.singlefile.common.ui.content.infobar.includeScript(pageData);
+		await win.common.ui.content.infobar.includeScript(pageData);
 	}
 	return pageData;
 

+ 2 - 2
cli/back-ends/playwright-chromium.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global singlefile, require, exports */
+/* global singlefile, common, require, exports */
 
 const playwright = require("playwright").chromium;
 const scripts = require("./common/scripts.js");
@@ -103,7 +103,7 @@ async function getPageData(page, options) {
 	return await page.evaluate(async options => {
 		const pageData = await singlefile.lib.getPageData(options);
 		if (options.includeInfobar) {
-			await singlefile.common.ui.content.infobar.includeScript(pageData);
+			await common.ui.content.infobar.includeScript(pageData);
 		}
 		return pageData;
 	}, options);

+ 2 - 2
cli/back-ends/playwright-firefox.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global singlefile, require, exports */
+/* global singlefile, common, require, exports */
 
 const playwright = require("playwright").firefox;
 const scripts = require("./common/scripts.js");
@@ -103,7 +103,7 @@ async function getPageData(page, options) {
 	return await page.evaluate(async options => {
 		const pageData = await singlefile.lib.getPageData(options);
 		if (options.includeInfobar) {
-			await singlefile.common.ui.content.infobar.includeScript(pageData);
+			await common.ui.content.infobar.includeScript(pageData);
 		}
 		return pageData;
 	}, options);

+ 2 - 2
cli/back-ends/puppeteer-firefox.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global singlefile, require, exports */
+/* global singlefile, common, require, exports */
 
 const puppeteer = require("puppeteer-core");
 const scripts = require("./common/scripts.js");
@@ -108,7 +108,7 @@ async function getPageData(browser, page, options) {
 		return await page.evaluate(async options => {
 			const pageData = await singlefile.lib.getPageData(options);
 			if (options.includeInfobar) {
-				await singlefile.common.ui.content.infobar.includeScript(pageData);
+				await common.ui.content.infobar.includeScript(pageData);
 			}
 			return pageData;
 		}, options);

+ 2 - 2
cli/back-ends/puppeteer.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global singlefile, require, exports */
+/* global singlefile, common, require, exports */
 
 const puppeteer = require("puppeteer-core");
 const scripts = require("./common/scripts.js");
@@ -132,7 +132,7 @@ async function getPageData(browser, page, options) {
 		return await page.evaluate(async options => {
 			const pageData = await singlefile.lib.getPageData(options);
 			if (options.includeInfobar) {
-				await singlefile.common.ui.content.infobar.includeScript(pageData);
+				await common.ui.content.infobar.includeScript(pageData);
 			}
 			return pageData;
 		}, options);

+ 1 - 1
cli/back-ends/webdriver-chromium.js

@@ -160,7 +160,7 @@ function getPageDataScript() {
 	async function getPageData() {
 		const pageData = await singlefile.lib.getPageData(options);
 		if (options.includeInfobar) {
-			await singlefile.common.ui.content.infobar.includeScript(pageData);
+			await common.ui.content.infobar.includeScript(pageData);
 		}
 		return pageData;
 	}

+ 1 - 1
cli/back-ends/webdriver-gecko.js

@@ -172,7 +172,7 @@ function getPageDataScript() {
 	async function getPageData() {
 		const pageData = await window.singlefile.lib.getPageData(options);
 		if (options.includeInfobar) {
-			await window.singlefile.common.ui.content.infobar.includeScript(pageData);
+			await window.common.ui.content.infobar.includeScript(pageData);
 		}
 		return pageData;
 	}

+ 1 - 1
common/index.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-this.singlefile.common = this.singlefile.common || {
+this.common = this.common || {
 	ui: {
 		content: {}
 	}

+ 1 - 1
common/ui/content/content-infobar.js

@@ -23,7 +23,7 @@
 
 /* global singlefile, fetch */
 
-this.singlefile.common.ui.content.infobar = this.singlefile.common.ui.content.infobar || (() => {
+this.common.ui.content.infobar = this.common.ui.content.infobar || (() => {
 
 	const SCRIPT_PATH = "/common/ui/content/content-infobar-web.js";
 

+ 22 - 22
extension/core/bg/autosave.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global singlefile, URL, Blob, XMLHttpRequest, woleet */
+/* global extension, common, URL, Blob, XMLHttpRequest, woleet */
 
-singlefile.extension.core.bg.autosave = (() => {
+extension.core.bg.autosave = (() => {
 
 	return {
 		onMessage,
@@ -34,14 +34,14 @@ singlefile.extension.core.bg.autosave = (() => {
 	};
 
 	async function onMessage(message, sender) {
-		const ui = singlefile.extension.ui.bg.main;
+		const ui = extension.ui.bg.main;
 		if (message.method.endsWith(".init")) {
-			const [options, autoSaveEnabled] = await Promise.all([singlefile.extension.core.bg.config.getOptions(sender.tab.url, true), isEnabled(sender.tab)]);
+			const [options, autoSaveEnabled] = await Promise.all([extension.core.bg.config.getOptions(sender.tab.url, true), isEnabled(sender.tab)]);
 			return { options, autoSaveEnabled };
 		}
 		if (message.method.endsWith(".save")) {
 			const tabId = sender.tab.id;
-			const options = await singlefile.extension.core.bg.config.getOptions(sender.tab.url, true);
+			const options = await extension.core.bg.config.getOptions(sender.tab.url, true);
 			if (options) {
 				ui.onStart(tabId, 1, true);
 				await saveContent(message, sender.tab);
@@ -53,10 +53,10 @@ singlefile.extension.core.bg.autosave = (() => {
 
 	async function onMessageExternal(message, currentTab) {
 		if (message.method == "enableAutoSave") {
-			const tabsData = await singlefile.extension.core.bg.tabsData.get(currentTab.id);
+			const tabsData = await extension.core.bg.tabsData.get(currentTab.id);
 			tabsData[currentTab.id].autoSave = message.enabled;
-			await singlefile.extension.core.bg.tabsData.set(tabsData);
-			singlefile.extension.ui.bg.main.refreshTab(currentTab);
+			await extension.core.bg.tabsData.set(tabsData);
+			extension.ui.bg.main.refreshTab(currentTab);
 		}
 		if (message.method == "isAutoSaveEnabled") {
 			return isEnabled(currentTab);
@@ -64,16 +64,16 @@ singlefile.extension.core.bg.autosave = (() => {
 	}
 
 	async function onInit(tab) {
-		const [options, autoSaveEnabled] = await Promise.all([singlefile.extension.core.bg.config.getOptions(tab.url, true), isEnabled(tab)]);
+		const [options, autoSaveEnabled] = await Promise.all([extension.core.bg.config.getOptions(tab.url, true), isEnabled(tab)]);
 		if (options && ((options.autoSaveLoad || options.autoSaveLoadOrUnload) && autoSaveEnabled)) {
-			singlefile.extension.core.bg.business.saveTabs([tab], { autoSave: true });
+			extension.core.bg.business.saveTabs([tab], { autoSave: true });
 		}
 	}
 
 	async function isEnabled(tab) {
-		const config = singlefile.extension.core.bg.config;
+		const config = extension.core.bg.config;
 		if (tab) {
-			const [tabsData, rule] = await Promise.all([singlefile.extension.core.bg.tabsData.get(), config.getRule(tab.url)]);
+			const [tabsData, rule] = await Promise.all([extension.core.bg.tabsData.get(), config.getRule(tab.url)]);
 			return Boolean(tabsData.autoSaveAll ||
 				(tabsData.autoSaveUnpinned && !tab.pinned) ||
 				(tabsData[tab.id] && tabsData[tab.id].autoSave)) &&
@@ -82,10 +82,10 @@ singlefile.extension.core.bg.autosave = (() => {
 	}
 
 	async function refreshTabs() {
-		const tabs = singlefile.extension.core.bg.tabs;
-		const allTabs = (await singlefile.extension.core.bg.tabs.get({}));
+		const tabs = extension.core.bg.tabs;
+		const allTabs = (await extension.core.bg.tabs.get({}));
 		return Promise.all(allTabs.map(async tab => {
-			const [options, autoSaveEnabled] = await Promise.all([singlefile.extension.core.bg.config.getOptions(tab.url, true), isEnabled(tab)]);
+			const [options, autoSaveEnabled] = await Promise.all([extension.core.bg.config.getOptions(tab.url, true), isEnabled(tab)]);
 			try {
 				await tabs.sendMessage(tab.id, { method: "content.init", autoSaveEnabled, options });
 			} catch (error) {
@@ -95,7 +95,7 @@ singlefile.extension.core.bg.autosave = (() => {
 	}
 
 	async function saveContent(message, tab) {
-		const options = await singlefile.extension.core.bg.config.getOptions(tab.url, true);
+		const options = await extension.core.bg.config.getOptions(tab.url, true);
 		const tabId = tab.id;
 		options.content = message.content;
 		options.url = message.url;
@@ -119,25 +119,25 @@ singlefile.extension.core.bg.autosave = (() => {
 		let pageData;
 		try {
 			if (options.autoSaveExternalSave) {
-				await singlefile.extension.core.bg.companion.save(options);
+				await extension.core.bg.companion.save(options);
 			} else {
-				pageData = await singlefile.extension.getPageData(options, null, null, { fetch });
+				pageData = await extension.getPageData(options, null, null, { fetch });
 				if (options.includeInfobar) {
-					await singlefile.common.ui.content.infobar.includeScript(pageData);
+					await common.ui.content.infobar.includeScript(pageData);
 				}
 				const blob = new Blob([pageData.content], { type: "text/html" });
 				if (options.saveToGDrive) {
-					await singlefile.extension.core.bg.downloads.uploadPage(message.taskId, pageData.filename, blob, options, {});
+					await extension.core.bg.downloads.uploadPage(message.taskId, pageData.filename, blob, options, {});
 				} else {
 					pageData.url = URL.createObjectURL(blob);
-					await singlefile.extension.core.bg.downloads.downloadPage(pageData, options);
+					await extension.core.bg.downloads.downloadPage(pageData, options);
 				}
 				if (pageData.hash) {
 					await woleet.anchor(pageData.hash);
 				}
 			}
 		} finally {
-			singlefile.extension.core.bg.business.onSaveEnd(message.taskId);
+			extension.core.bg.business.onSaveEnd(message.taskId);
 			if (pageData && pageData.url) {
 				URL.revokeObjectURL(pageData.url);
 			}

+ 10 - 10
extension/core/bg/bookmarks.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global singlefile, browser */
+/* global extension, browser */
 
-singlefile.extension.core.bg.bookmarks = (() => {
+extension.core.bg.bookmarks = (() => {
 
 	enable();
 	return {
@@ -51,7 +51,7 @@ singlefile.extension.core.bg.bookmarks = (() => {
 			// ignored
 		}
 		let enabled;
-		const profiles = await singlefile.extension.core.bg.config.getProfiles();
+		const profiles = await extension.core.bg.config.getProfiles();
 		Object.keys(profiles).forEach(profileName => {
 			if (profiles[profileName].saveCreatedBookmarks) {
 				enabled = true;
@@ -64,7 +64,7 @@ singlefile.extension.core.bg.bookmarks = (() => {
 
 	async function disable() {
 		let disabled;
-		const profiles = await singlefile.extension.core.bg.config.getProfiles();
+		const profiles = await extension.core.bg.config.getProfiles();
 		Object.keys(profiles).forEach(profileName => disabled = disabled || !profiles[profileName].saveCreatedBookmarks);
 		if (disabled) {
 			browser.bookmarks.onCreated.removeListener(onCreated);
@@ -80,20 +80,20 @@ singlefile.extension.core.bg.bookmarks = (() => {
 	}
 
 	async function onCreated(bookmarkId, bookmarkInfo) {
-		const tabs = await singlefile.extension.core.bg.tabs.get({ lastFocusedWindow: true, active: true });
-		const options = await singlefile.extension.core.bg.config.getOptions(bookmarkInfo.url);
+		const tabs = await extension.core.bg.tabs.get({ lastFocusedWindow: true, active: true });
+		const options = await extension.core.bg.config.getOptions(bookmarkInfo.url);
 		if (options.saveCreatedBookmarks) {
 			const bookmarkFolders = await getParentFolders(bookmarkInfo.parentId);
 			const ignoredBookmark = bookmarkFolders.find(folder => options.ignoredBookmarkFolders.includes(folder));
 			if (!ignoredBookmark) {
 				if (tabs.length && tabs[0].url == bookmarkInfo.url) {
-					singlefile.extension.core.bg.business.saveTabs(tabs, { bookmarkId, bookmarkFolders });
+					extension.core.bg.business.saveTabs(tabs, { bookmarkId, bookmarkFolders });
 				} else {
-					const tabs = await singlefile.extension.core.bg.tabs.get({});
+					const tabs = await extension.core.bg.tabs.get({});
 					if (tabs.length) {
 						const tab = tabs.find(tab => tab.url == bookmarkInfo.url);
 						if (tab) {
-							singlefile.extension.core.bg.business.saveTabs([tab], { bookmarkId, bookmarkFolders });
+							extension.core.bg.business.saveTabs([tab], { bookmarkId, bookmarkFolders });
 						} else {
 							if (bookmarkInfo.url) {
 								if (bookmarkInfo.url == "about:blank") {
@@ -127,7 +127,7 @@ singlefile.extension.core.bg.bookmarks = (() => {
 		}
 
 		function saveUrl(url) {
-			singlefile.extension.core.bg.business.saveUrls([url], { bookmarkId });
+			extension.core.bg.business.saveUrls([url], { bookmarkId });
 		}
 	}
 

+ 23 - 23
extension/core/bg/business.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global singlefile */
+/* global extension */
 
-singlefile.extension.core.bg.business = (() => {
+extension.core.bg.business = (() => {
 
 	const ERROR_CONNECTION_ERROR_CHROMIUM = "Could not establish connection. Receiving end does not exist.";
 	const ERROR_CONNECTION_LOST_CHROMIUM = "The message port closed before a response was received.";
@@ -67,28 +67,28 @@ singlefile.extension.core.bg.business = (() => {
 	};
 
 	async function saveSelectedLinks(tab) {
-		const tabs = singlefile.extension.core.bg.tabs;
+		const tabs = extension.core.bg.tabs;
 		const tabOptions = { extensionScriptFiles, tabId: tab.id, tabIndex: tab.index };
-		const scriptsInjected = await singlefile.extension.injectScript(tab.id, tabOptions);
+		const scriptsInjected = await extension.injectScript(tab.id, tabOptions);
 		if (scriptsInjected) {
 			const response = await tabs.sendMessage(tab.id, { method: "content.getSelectedLinks" });
 			if (response.urls && response.urls.length) {
 				await saveUrls(response.urls);
 			}
 		} else {
-			singlefile.extension.ui.bg.main.onForbiddenDomain(tab);
+			extension.ui.bg.main.onForbiddenDomain(tab);
 		}
 	}
 
 	async function saveUrls(urls, options = {}) {
 		await initMaxParallelWorkers();
 		await Promise.all(urls.map(async url => {
-			const tabOptions = await singlefile.extension.core.bg.config.getOptions(url);
+			const tabOptions = await extension.core.bg.config.getOptions(url);
 			Object.keys(options).forEach(key => tabOptions[key] = options[key]);
 			tabOptions.autoClose = true;
 			tabOptions.extensionScriptFiles = extensionScriptFiles;
 			if (tabOptions.passReferrerOnError) {
-				await singlefile.extension.core.bg.requests.enableReferrerOnError();
+				await extension.core.bg.requests.enableReferrerOnError();
 			}
 			addTask({
 				tab: { url },
@@ -101,9 +101,9 @@ singlefile.extension.core.bg.business = (() => {
 	}
 
 	async function saveTabs(tabs, options = {}) {
-		const config = singlefile.extension.core.bg.config;
-		const autosave = singlefile.extension.core.bg.autosave;
-		const ui = singlefile.extension.ui.bg.main;
+		const config = extension.core.bg.config;
+		const autosave = extension.core.bg.autosave;
+		const ui = extension.ui.bg.main;
 		await initMaxParallelWorkers();
 		await Promise.all(tabs.map(async tab => {
 			const tabId = tab.id;
@@ -113,7 +113,7 @@ singlefile.extension.core.bg.business = (() => {
 			tabOptions.tabIndex = tab.index;
 			tabOptions.extensionScriptFiles = extensionScriptFiles;
 			if (tabOptions.passReferrerOnError) {
-				await singlefile.extension.core.bg.requests.enableReferrerOnError();
+				await extension.core.bg.requests.enableReferrerOnError();
 			}
 			if (options.autoSave) {
 				if (autosave.isEnabled(tab)) {
@@ -127,8 +127,8 @@ singlefile.extension.core.bg.business = (() => {
 				}
 			} else {
 				ui.onStart(tabId, INJECT_SCRIPTS_STEP);
-				const scriptsInjected = await singlefile.extension.injectScript(tabId, tabOptions);
-				if (scriptsInjected || singlefile.extension.core.bg.editor.isEditor(tab)) {
+				const scriptsInjected = await extension.injectScript(tabId, tabOptions);
+				if (scriptsInjected || extension.core.bg.editor.isEditor(tab)) {
 					ui.onStart(tabId, EXECUTE_SCRIPTS_STEP);
 					addTask({
 						status: TASK_PENDING_STATE,
@@ -162,12 +162,12 @@ singlefile.extension.core.bg.business = (() => {
 	}
 
 	function openEditor(tab) {
-		singlefile.extension.core.bg.tabs.sendMessage(tab.id, { method: "content.openEditor" });
+		extension.core.bg.tabs.sendMessage(tab.id, { method: "content.openEditor" });
 	}
 
 	async function initMaxParallelWorkers() {
 		if (!maxParallelWorkers) {
-			maxParallelWorkers = (await singlefile.extension.core.bg.config.get()).maxParallelWorkers;
+			maxParallelWorkers = (await extension.core.bg.config.get()).maxParallelWorkers;
 		}
 	}
 
@@ -182,8 +182,8 @@ singlefile.extension.core.bg.business = (() => {
 	}
 
 	async function runTask(taskInfo) {
-		const ui = singlefile.extension.ui.bg.main;
-		const tabs = singlefile.extension.core.bg.tabs;
+		const ui = extension.ui.bg.main;
+		const tabs = extension.core.bg.tabs;
 		const taskId = taskInfo.id;
 		taskInfo.status = TASK_PROCESSING_STATE;
 		if (!taskInfo.tab.id) {
@@ -193,7 +193,7 @@ singlefile.extension.core.bg.business = (() => {
 				taskInfo.tab.id = taskInfo.options.tabId = tab.id;
 				taskInfo.tab.index = taskInfo.options.tabIndex = tab.index;
 				ui.onStart(taskInfo.tab.id, INJECT_SCRIPTS_STEP);
-				scriptsInjected = await singlefile.extension.injectScript(taskInfo.tab.id, taskInfo.options);
+				scriptsInjected = await extension.injectScript(taskInfo.tab.id, taskInfo.options);
 			} catch (tabId) {
 				taskInfo.tab.id = tabId;
 			}
@@ -220,7 +220,7 @@ singlefile.extension.core.bg.business = (() => {
 		return error.message == ERROR_CONNECTION_LOST_CHROMIUM ||
 			error.message == ERROR_CONNECTION_ERROR_CHROMIUM ||
 			error.message == ERROR_CONNECTION_LOST_GECKO ||
-			error.message.startsWith(ERROR_EDITOR_PAGE_CHROMIUM + JSON.stringify(singlefile.extension.core.bg.editor.EDITOR_URL));
+			error.message.startsWith(ERROR_EDITOR_PAGE_CHROMIUM + JSON.stringify(extension.core.bg.editor.EDITOR_URL));
 	}
 
 	function isSavingTab(tab) {
@@ -235,7 +235,7 @@ singlefile.extension.core.bg.business = (() => {
 		const taskInfo = tasks.find(taskInfo => taskInfo.id == taskId);
 		if (taskInfo) {
 			if (taskInfo.options.autoClose && !taskInfo.cancelled) {
-				singlefile.extension.core.bg.tabs.remove(taskInfo.tab.id);
+				extension.core.bg.tabs.remove(taskInfo.tab.id);
 			}
 			taskInfo.done();
 		}
@@ -271,7 +271,7 @@ singlefile.extension.core.bg.business = (() => {
 	function cancel(taskInfo) {
 		const tabId = taskInfo.tab.id;
 		taskInfo.cancelled = true;
-		singlefile.extension.core.bg.tabs.sendMessage(tabId, {
+		extension.core.bg.tabs.sendMessage(tabId, {
 			method: "content.cancelSave",
 			options: {
 				loadDeferredImages: taskInfo.options.loadDeferredImages,
@@ -282,9 +282,9 @@ singlefile.extension.core.bg.business = (() => {
 			taskInfo.cancel();
 		}
 		if (taskInfo.method == "content.autosave") {
-			singlefile.extension.ui.bg.main.onEnd(tabId, true);
+			extension.ui.bg.main.onEnd(tabId, true);
 		}
-		singlefile.extension.ui.bg.main.onCancelled(taskInfo.tab);
+		extension.ui.bg.main.onCancelled(taskInfo.tab);
 		taskInfo.done();
 	}
 

+ 4 - 4
extension/core/bg/companion.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global singlefile, browser */
+/* global extension, browser */
 
-singlefile.extension.core.bg.companion = {
+extension.core.bg.companion = {
 	enabled: true,
 	async onMessage(message) {
 		if (message.method.endsWith(".state")) {
@@ -44,10 +44,10 @@ singlefile.extension.core.bg.companion = {
 					}
 				});
 			});
-			singlefile.extension.ui.bg.main.onEnd(options.tabId, options.autoSave);
+			extension.ui.bg.main.onEnd(options.tabId, options.autoSave);
 		} catch (error) {
 			console.error(error); // eslint-disable-line no-console			
-			singlefile.extension.ui.bg.main.onError(options.tabId);
+			extension.ui.bg.main.onError(options.tabId);
 		}
 	}
 };

+ 10 - 10
extension/core/bg/config.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile, navigator, URL, Blob */
+/* global browser, extension, navigator, URL, Blob */
 
-singlefile.extension.core.bg.config = (() => {
+extension.core.bg.config = (() => {
 
 	const CURRENT_PROFILE_NAME = "-";
 	const DEFAULT_PROFILE_NAME = "__Default_Settings__";
@@ -278,7 +278,7 @@ singlefile.extension.core.bg.config = (() => {
 	}
 
 	async function getOptions(url, autoSave) {
-		const [config, rule, tabsData] = await Promise.all([getConfig(), getRule(url), singlefile.extension.core.bg.tabsData.get()]);
+		const [config, rule, tabsData] = await Promise.all([getConfig(), getRule(url), extension.core.bg.tabsData.get()]);
 		const tabProfileName = tabsData.profileName || DEFAULT_PROFILE_NAME;
 		let selectedProfileName;
 		if (rule) {
@@ -300,7 +300,7 @@ singlefile.extension.core.bg.config = (() => {
 	}
 
 	async function renameProfile(oldProfileName, profileName) {
-		const [config, tabsData] = await Promise.all([getConfig(), singlefile.extension.core.bg.tabsData.get()]);
+		const [config, tabsData] = await Promise.all([getConfig(), extension.core.bg.tabsData.get()]);
 		if (!Object.keys(config.profiles).includes(oldProfileName)) {
 			throw new Error("Profile not found");
 		}
@@ -312,7 +312,7 @@ singlefile.extension.core.bg.config = (() => {
 		}
 		if (tabsData.profileName == oldProfileName) {
 			tabsData.profileName = profileName;
-			await singlefile.extension.core.bg.tabsData.set(tabsData);
+			await extension.core.bg.tabsData.set(tabsData);
 		}
 		config.profiles[profileName] = config.profiles[oldProfileName];
 		config.rules.forEach(rule => {
@@ -328,7 +328,7 @@ singlefile.extension.core.bg.config = (() => {
 	}
 
 	async function deleteProfile(profileName) {
-		const [config, tabsData] = await Promise.all([getConfig(), singlefile.extension.core.bg.tabsData.get()]);
+		const [config, tabsData] = await Promise.all([getConfig(), extension.core.bg.tabsData.get()]);
 		if (!Object.keys(config.profiles).includes(profileName)) {
 			throw new Error("Profile not found");
 		}
@@ -337,7 +337,7 @@ singlefile.extension.core.bg.config = (() => {
 		}
 		if (tabsData.profileName == profileName) {
 			delete tabsData.profileName;
-			await singlefile.extension.core.bg.tabsData.set(tabsData);
+			await extension.core.bg.tabsData.set(tabsData);
 		}
 		config.rules.forEach(rule => {
 			if (rule.profile == profileName) {
@@ -424,9 +424,9 @@ singlefile.extension.core.bg.config = (() => {
 
 	async function resetProfiles() {
 		await pendingUpgradePromise;
-		const tabsData = await singlefile.extension.core.bg.tabsData.get();
+		const tabsData = await extension.core.bg.tabsData.get();
 		delete tabsData.profileName;
-		await singlefile.extension.core.bg.tabsData.set(tabsData);
+		await extension.core.bg.tabsData.set(tabsData);
 		await configStorage.remove(["profiles", "rules", "maxParallelWorkers"]);
 		await browser.storage.local.set({ sync: false });
 		configStorage = browser.storage.local;
@@ -451,7 +451,7 @@ singlefile.extension.core.bg.config = (() => {
 			saveAs: true
 		};
 		try {
-			await singlefile.extension.core.bg.downloads.download(downloadInfo, "_");
+			await extension.core.bg.downloads.download(downloadInfo, "_");
 		} finally {
 			URL.revokeObjectURL(url);
 		}

+ 3 - 3
extension/core/bg/devtools.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global singlefile */
+/* global extension */
 
-singlefile.extension.core.bg.devtools = (() => {
+extension.core.bg.devtools = (() => {
 
 	return {
 		onMessage
@@ -32,7 +32,7 @@ singlefile.extension.core.bg.devtools = (() => {
 	async function onMessage(message) {
 		if (message.method.endsWith(".resourceCommitted")) {
 			if (message.tabId && message.url && (message.type == "stylesheet" || message.type == "script")) {
-				await singlefile.extension.core.bg.tabs.sendMessage(message.tabId, message);
+				await extension.core.bg.tabs.sendMessage(message.tabId, message);
 			}
 		}
 	}

+ 26 - 26
extension/core/bg/downloads.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile, Blob, URL, document, GDrive, woleet */
+/* global extension, browser, Blob, URL, document, GDrive, woleet */
 
-singlefile.extension.core.bg.downloads = (() => {
+extension.core.bg.downloads = (() => {
 
 	const partialContents = new Map();
 	const MIMETYPE_HTML = "text/html";
@@ -57,8 +57,8 @@ singlefile.extension.core.bg.downloads = (() => {
 			return downloadTabPage(message, sender.tab);
 		}
 		if (message.method.endsWith(".disableGDrive")) {
-			const authInfo = await singlefile.extension.core.bg.config.getAuthInfo();
-			singlefile.extension.core.bg.config.removeAuthInfo();
+			const authInfo = await extension.core.bg.config.getAuthInfo();
+			extension.core.bg.config.removeAuthInfo();
 			await gDrive.revokeAuthToken(authInfo && (authInfo.accessToken || authInfo.revokableAccessToken));
 			return {};
 		}
@@ -66,22 +66,22 @@ singlefile.extension.core.bg.downloads = (() => {
 			if (message.hash) {
 				await woleet.anchor(message.hash);
 			}
-			singlefile.extension.core.bg.business.onSaveEnd(message.taskId);
+			extension.core.bg.business.onSaveEnd(message.taskId);
 			return {};
 		}
 		if (message.method.endsWith(".getInfo")) {
-			return singlefile.extension.core.bg.business.getTasksInfo();
+			return extension.core.bg.business.getTasksInfo();
 		}
 		if (message.method.endsWith(".cancel")) {
-			singlefile.extension.core.bg.business.cancelTask(message.taskId);
+			extension.core.bg.business.cancelTask(message.taskId);
 			return {};
 		}
 		if (message.method.endsWith(".cancelAll")) {
-			singlefile.extension.core.bg.business.cancelAllTasks();
+			extension.core.bg.business.cancelAllTasks();
 			return {};
 		}
 		if (message.method.endsWith(".saveUrls")) {
-			singlefile.extension.core.bg.business.saveUrls(message.urls);
+			extension.core.bg.business.saveUrls(message.urls);
 			return {};
 		}
 	}
@@ -103,8 +103,8 @@ singlefile.extension.core.bg.downloads = (() => {
 		}
 		if (!message.truncated || message.finished) {
 			if (message.openEditor) {
-				singlefile.extension.ui.bg.main.onEdit(tab.id);
-				await singlefile.extension.core.bg.editor.open({ tabIndex: tab.index + 1, filename: message.filename, content: contents.join("") }, {
+				extension.ui.bg.main.onEdit(tab.id);
+				await extension.core.bg.editor.open({ tabIndex: tab.index + 1, filename: message.filename, content: contents.join("") }, {
 					backgroundSave: message.backgroundSave,
 					saveToClipboard: message.saveToClipboard,
 					saveToGDrive: message.saveToGDrive,
@@ -124,7 +124,7 @@ singlefile.extension.core.bg.downloads = (() => {
 				if (message.saveToClipboard) {
 					message.content = contents.join("");
 					saveToClipboard(message);
-					singlefile.extension.ui.bg.main.onEnd(tab.id);
+					extension.ui.bg.main.onEnd(tab.id);
 				} else {
 					await downloadBlob(new Blob([contents], { type: MIMETYPE_HTML }), tab.id, tab.incognito, message);
 				}
@@ -140,7 +140,7 @@ singlefile.extension.core.bg.downloads = (() => {
 					forceWebAuthFlow: message.forceWebAuthFlow,
 					extractAuthCode: message.extractAuthCode
 				}, {
-					onProgress: (offset, size) => singlefile.extension.ui.bg.main.onUploadProgress(tabId, offset, size)
+					onProgress: (offset, size) => extension.ui.bg.main.onUploadProgress(tabId, offset, size)
 				});
 			} else {
 				message.url = URL.createObjectURL(blob);
@@ -152,11 +152,11 @@ singlefile.extension.core.bg.downloads = (() => {
 					includeInfobar: message.includeInfobar
 				});
 			}
-			singlefile.extension.ui.bg.main.onEnd(tabId);
+			extension.ui.bg.main.onEnd(tabId);
 		} catch (error) {
 			if (!error.message || error.message != "upload_cancelled") {
 				console.error(error); // eslint-disable-line no-console
-				singlefile.extension.ui.bg.main.onError(tabId);
+				extension.ui.bg.main.onError(tabId);
 			}
 		} finally {
 			if (message.url) {
@@ -170,23 +170,23 @@ singlefile.extension.core.bg.downloads = (() => {
 	}
 
 	async function getAuthInfo(authOptions, force) {
-		let authInfo = await singlefile.extension.core.bg.config.getAuthInfo();
+		let authInfo = await extension.core.bg.config.getAuthInfo();
 		const options = {
 			interactive: true,
 			auto: authOptions.extractAuthCode,
 			forceWebAuthFlow: authOptions.forceWebAuthFlow,
 			requestPermissionIdentity,
-			launchWebAuthFlow: options => singlefile.extension.core.bg.tabs.launchWebAuthFlow(options),
-			extractAuthCode: authURL => singlefile.extension.core.bg.tabs.extractAuthCode(authURL),
-			promptAuthCode: () => singlefile.extension.core.bg.tabs.promptValue("Please enter the access code for Google Drive")
+			launchWebAuthFlow: options => extension.core.bg.tabs.launchWebAuthFlow(options),
+			extractAuthCode: authURL => extension.core.bg.tabs.extractAuthCode(authURL),
+			promptAuthCode: () => extension.core.bg.tabs.promptValue("Please enter the access code for Google Drive")
 		};
 		gDrive.setAuthInfo(authInfo, options);
 		if (!authInfo || !authInfo.accessToken || force) {
 			authInfo = await gDrive.auth(options);
 			if (authInfo) {
-				await singlefile.extension.core.bg.config.setAuthInfo(authInfo);
+				await extension.core.bg.config.setAuthInfo(authInfo);
 			} else {
-				await singlefile.extension.core.bg.config.removeAuthInfo();
+				await extension.core.bg.config.removeAuthInfo();
 			}
 		}
 		return authInfo;
@@ -195,10 +195,10 @@ singlefile.extension.core.bg.downloads = (() => {
 	async function uploadPage(taskId, filename, blob, authOptions, uploadOptions) {
 		try {
 			await getAuthInfo(authOptions);
-			const taskInfo = singlefile.extension.core.bg.business.getTaskInfo(taskId);
+			const taskInfo = extension.core.bg.business.getTaskInfo(taskId);
 			if (taskInfo && !taskInfo.cancelled) {
 				const uploadInfo = await gDrive.upload(filename, blob, uploadOptions);
-				singlefile.extension.core.bg.business.setCancelCallback(taskId, uploadInfo.cancelUpload);
+				extension.core.bg.business.setCancelCallback(taskId, uploadInfo.cancelUpload);
 				return await uploadInfo.uploadPromise;
 			}
 		}
@@ -215,9 +215,9 @@ singlefile.extension.core.bg.downloads = (() => {
 					}
 				}
 				if (authInfo) {
-					await singlefile.extension.core.bg.config.setAuthInfo(authInfo);
+					await extension.core.bg.config.setAuthInfo(authInfo);
 				} else {
-					await singlefile.extension.core.bg.config.removeAuthInfo();
+					await extension.core.bg.config.removeAuthInfo();
 				}
 				await uploadPage(taskId, filename, blob, authOptions, uploadOptions);
 			} else {
@@ -258,7 +258,7 @@ singlefile.extension.core.bg.downloads = (() => {
 					}
 					downloadData.filename = "file:///" + downloadData.filename;
 				}
-				await singlefile.extension.core.bg.bookmarks.update(pageData.bookmarkId, { url: downloadData.filename });
+				await extension.core.bg.bookmarks.update(pageData.bookmarkId, { url: downloadData.filename });
 			}
 		}
 	}

+ 6 - 6
extension/core/bg/editor.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile */
+/* global extension, browser */
 
-singlefile.extension.core.bg.editor = (() => {
+extension.core.bg.editor = (() => {
 
 	const MAX_CONTENT_SIZE = 32 * (1024 * 1024);
 	const EDITOR_PAGE_URL = "/extension/ui/pages/editor.html";
@@ -44,7 +44,7 @@ singlefile.extension.core.bg.editor = (() => {
 		if (tabIndex != null) {
 			createTabProperties.index = tabIndex;
 		}
-		const tab = await singlefile.extension.core.bg.tabs.create(createTabProperties);
+		const tab = await extension.core.bg.tabs.create(createTabProperties);
 		tabsData.set(tab.id, { content, filename, options });
 	}
 
@@ -73,7 +73,7 @@ singlefile.extension.core.bg.editor = (() => {
 					} else {
 						message.content = content;
 					}
-					await singlefile.extension.core.bg.tabs.sendMessage(tab.id, message);
+					await extension.core.bg.tabs.sendMessage(tab.id, message);
 				}
 			}
 		}
@@ -94,9 +94,9 @@ singlefile.extension.core.bg.editor = (() => {
 				contents = [message.content];
 			}
 			if (!message.truncated || message.finished) {
-				const options = await singlefile.extension.core.bg.config.getOptions(tab && tab.url);
+				const options = await extension.core.bg.config.getOptions(tab && tab.url);
 				const updateTabProperties = { url: EDITOR_PAGE_URL };
-				await singlefile.extension.core.bg.tabs.update(tab.id, updateTabProperties);
+				await extension.core.bg.tabs.update(tab.id, updateTabProperties);
 				tabsData.set(tab.id, { content: contents.join(""), filename: message.filename, options });
 			}
 		}

+ 15 - 15
extension/core/bg/messages.js

@@ -21,51 +21,51 @@
  *   Source.
  */
 
-/* global browser, singlefile, */
+/* global extension, browser */
 
-singlefile.extension.core.bg.messages = (() => {
+extension.core.bg.messages = (() => {
 
 	browser.runtime.onMessage.addListener((message, sender) => {
 		if (message.method.startsWith("tabs.")) {
-			return singlefile.extension.core.bg.tabs.onMessage(message, sender);
+			return extension.core.bg.tabs.onMessage(message, sender);
 		}
 		if (message.method.startsWith("downloads.")) {
-			return singlefile.extension.core.bg.downloads.onMessage(message, sender);
+			return extension.core.bg.downloads.onMessage(message, sender);
 		}
 		if (message.method.startsWith("autosave.")) {
-			return singlefile.extension.core.bg.autosave.onMessage(message, sender);
+			return extension.core.bg.autosave.onMessage(message, sender);
 		}
 		if (message.method.startsWith("ui.")) {
-			return singlefile.extension.ui.bg.main.onMessage(message, sender);
+			return extension.ui.bg.main.onMessage(message, sender);
 		}
 		if (message.method.startsWith("config.")) {
-			return singlefile.extension.core.bg.config.onMessage(message, sender);
+			return extension.core.bg.config.onMessage(message, sender);
 		}
 		if (message.method.startsWith("tabsData.")) {
-			return singlefile.extension.core.bg.tabsData.onMessage(message, sender);
+			return extension.core.bg.tabsData.onMessage(message, sender);
 		}
 		if (message.method.startsWith("devtools.")) {
-			return singlefile.extension.core.bg.devtools.onMessage(message, sender);
+			return extension.core.bg.devtools.onMessage(message, sender);
 		}
 		if (message.method.startsWith("editor.")) {
-			return singlefile.extension.core.bg.editor.onMessage(message, sender);
+			return extension.core.bg.editor.onMessage(message, sender);
 		}
 		if (message.method.startsWith("bookmarks.")) {
-			return singlefile.extension.core.bg.bookmarks.onMessage(message, sender);
+			return extension.core.bg.bookmarks.onMessage(message, sender);
 		}
 		if (message.method.startsWith("companion.")) {
-			return singlefile.extension.core.bg.companion.onMessage(message, sender);
+			return extension.core.bg.companion.onMessage(message, sender);
 		}
 		if (message.method.startsWith("requests.")) {
-			return singlefile.extension.core.bg.requests.onMessage(message, sender);
+			return extension.core.bg.requests.onMessage(message, sender);
 		}
 	});
 	if (browser.runtime.onMessageExternal) {
 		browser.runtime.onMessageExternal.addListener(async (message, sender) => {
-			const allTabs = await singlefile.extension.core.bg.tabs.get({ currentWindow: true, active: true });
+			const allTabs = await extension.core.bg.tabs.get({ currentWindow: true, active: true });
 			const currentTab = allTabs[0];
 			if (currentTab) {
-				return singlefile.extension.core.bg.autosave.onMessageExternal(message, currentTab, sender);
+				return extension.core.bg.autosave.onMessageExternal(message, currentTab, sender);
 			} else {
 				return false;
 			}

+ 2 - 2
extension/core/bg/requests.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile, */
+/* global extension, browser */
 
-singlefile.extension.core.bg.requests = (() => {
+extension.core.bg.requests = (() => {
 
 	const REQUEST_ID_HEADER_NAME = "x-single-file-request-id";
 	const referrers = new Map();

+ 4 - 4
extension/core/bg/tabs-data.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile, setTimeout */
+/* global extension, browser, setTimeout */
 
-singlefile.extension.core.bg.tabsData = (() => {
+extension.core.bg.tabsData = (() => {
 
 	let persistentData, temporaryData, cleanedUp;
 	setTimeout(() => getPersistent().then(tabsData => persistentData = tabsData), 0);
@@ -84,9 +84,9 @@ singlefile.extension.core.bg.tabsData = (() => {
 	}
 
 	async function cleanup() {
-		if (!cleanedUp && singlefile.extension.core.bg.tabs) {
+		if (!cleanedUp && extension.core.bg.tabs) {
 			cleanedUp = true;
-			const allTabs = await singlefile.extension.core.bg.tabs.get({ currentWindow: true, highlighted: true });
+			const allTabs = await extension.core.bg.tabs.get({ currentWindow: true, highlighted: true });
 			Object.keys(persistentData).filter(key => {
 				if (key != "autoSaveAll" && key != "autoSaveUnpinned" && key != "profileName") {
 					return !allTabs.find(tab => tab.id == key);

+ 18 - 18
extension/core/bg/tabs.js

@@ -20,9 +20,9 @@
  *   notice and a URL through which recipients can access the Corresponding 
  *   Source.
  */
-/* global browser, singlefile, setTimeout */
+/* global extension, browser, setTimeout */
 
-singlefile.extension.core.bg.tabs = (() => {
+extension.core.bg.tabs = (() => {
 
 	const DELAY_MAYBE_INIT = 1500;
 	const pendingPrompts = new Map();
@@ -47,9 +47,9 @@ singlefile.extension.core.bg.tabs = (() => {
 	async function onMessage(message, sender) {
 		if (message.method.endsWith(".init")) {
 			await onInit(sender.tab, message);
-			singlefile.extension.ui.bg.main.onInit(sender.tab);
-			singlefile.extension.core.bg.business.onInit(sender.tab);
-			singlefile.extension.core.bg.autosave.onInit(sender.tab);
+			extension.ui.bg.main.onInit(sender.tab);
+			extension.core.bg.business.onInit(sender.tab);
+			extension.core.bg.autosave.onInit(sender.tab);
 		}
 		if (message.method.endsWith(".promptValueResponse")) {
 			const promptPromise = pendingPrompts.get(sender.tab.id);
@@ -59,7 +59,7 @@ singlefile.extension.core.bg.tabs = (() => {
 			}
 		}
 		if (message.method.endsWith(".getOptions")) {
-			return singlefile.extension.core.bg.config.getOptions(message.url);
+			return extension.core.bg.config.getOptions(message.url);
 		}
 		if (message.method.endsWith(".activate")) {
 			await browser.tabs.update(message.tabId, { active: true });
@@ -167,10 +167,10 @@ singlefile.extension.core.bg.tabs = (() => {
 	}
 
 	async function onInit(tab, options) {
-		await singlefile.extension.core.bg.tabsData.remove(tab.id);
-		const tabsData = await singlefile.extension.core.bg.tabsData.get(tab.id);
+		await extension.core.bg.tabsData.remove(tab.id);
+		const tabsData = await extension.core.bg.tabsData.get(tab.id);
 		tabsData[tab.id].savedPageDetected = options.savedPageDetected;
-		await singlefile.extension.core.bg.tabsData.set(tabsData);
+		await extension.core.bg.tabsData.set(tabsData);
 	}
 
 	async function onTabUpdated(tabId, changeInfo) {
@@ -184,28 +184,28 @@ singlefile.extension.core.bg.tabs = (() => {
 				}
 			}, DELAY_MAYBE_INIT);
 			const tab = await browser.tabs.get(tabId);
-			if (singlefile.extension.core.bg.editor.isEditor(tab)) {
-				const tabsData = await singlefile.extension.core.bg.tabsData.get(tab.id);
+			if (extension.core.bg.editor.isEditor(tab)) {
+				const tabsData = await extension.core.bg.tabsData.get(tab.id);
 				tabsData[tab.id].editorDetected = true;
-				await singlefile.extension.core.bg.tabsData.set(tabsData);
-				singlefile.extension.ui.bg.main.onTabActivated(tab);
+				await extension.core.bg.tabsData.set(tabsData);
+				extension.ui.bg.main.onTabActivated(tab);
 			}
 		}
 	}
 
 	function onTabCreated(tab) {
-		singlefile.extension.ui.bg.main.onTabCreated(tab);
+		extension.ui.bg.main.onTabCreated(tab);
 	}
 
 	async function onTabActivated(activeInfo) {
 		const tab = await browser.tabs.get(activeInfo.tabId);
-		singlefile.extension.ui.bg.main.onTabActivated(tab);
+		extension.ui.bg.main.onTabActivated(tab);
 	}
 
 	function onTabRemoved(tabId) {
-		singlefile.extension.core.bg.tabsData.remove(tabId);
-		singlefile.extension.core.bg.editor.onTabRemoved(tabId);
-		singlefile.extension.core.bg.business.onTabRemoved(tabId);
+		extension.core.bg.tabsData.remove(tabId);
+		extension.core.bg.editor.onTabRemoved(tabId);
+		extension.core.bg.business.onTabRemoved(tabId);
 	}
 
 })();

+ 8 - 7
extension/core/content/content-bootstrap.js

@@ -23,15 +23,16 @@
 
 /* global browser, window, addEventListener, removeEventListener, document, location, setTimeout, prompt, Node */
 
-this.singlefile.extension.core.content.bootstrap = this.singlefile.extension.core.content.bootstrap || (() => {
+this.extension.core.content.bootstrap = this.extension.core.content.bootstrap || (() => {
 
 	const singlefile = this.singlefile;
+	const extension = this.extension;
 
 	const MAX_CONTENT_SIZE = 32 * (1024 * 1024);
 
 	let unloadListenerAdded, options, autoSaveEnabled, autoSaveTimeout, autoSavingPage, pageAutoSaved, previousLocationHref;
-	singlefile.extension.core.content.updatedResources = {};
-	singlefile.extension.core.content.visitDate = new Date();
+	extension.core.content.updatedResources = {};
+	extension.core.content.visitDate = new Date();
 	browser.runtime.sendMessage({ method: "autosave.init" }).then(message => {
 		options = message.options;
 		autoSaveEnabled = message.autoSaveEnabled;
@@ -82,7 +83,7 @@ this.singlefile.extension.core.content.bootstrap = this.singlefile.extension.cor
 			return {};
 		}
 		if (message.method == "devtools.resourceCommitted") {
-			singlefile.extension.core.content.updatedResources[message.url] = { content: message.content, type: message.type, encoding: message.encoding };
+			extension.core.content.updatedResources[message.url] = { content: message.content, type: message.type, encoding: message.encoding };
 			return {};
 		}
 		if (message.method == "common.promptValueRequest") {
@@ -92,7 +93,7 @@ this.singlefile.extension.core.content.bootstrap = this.singlefile.extension.cor
 	}
 
 	function init() {
-		if (previousLocationHref != location.href && !singlefile.extension.core.processing) {
+		if (previousLocationHref != location.href && !extension.core.processing) {
 			pageAutoSaved = false;
 			previousLocationHref = location.href;
 			browser.runtime.sendMessage({ method: "tabs.init", savedPageDetected: detectSavedPage(document) });
@@ -179,8 +180,8 @@ this.singlefile.extension.core.content.bootstrap = this.singlefile.extension.cor
 
 	function savePage(docData, frames) {
 		const helper = singlefile.lib.helper;
-		const updatedResources = singlefile.extension.core.content.updatedResources;
-		const visitDate = singlefile.extension.core.content.visitDate.getTime();
+		const updatedResources = extension.core.content.updatedResources;
+		const visitDate = extension.core.content.visitDate.getTime();
 		Object.keys(updatedResources).forEach(url => updatedResources[url].retrieved = false);
 		browser.runtime.sendMessage({
 			method: "autosave.save",

+ 3 - 3
extension/core/content/content-download.js

@@ -23,9 +23,9 @@
 
 /* global browser, document, URL, Blob, MouseEvent, setTimeout */
 
-this.singlefile.extension.core.content.download = this.singlefile.extension.core.content.download || (() => {
+this.extension.core.content.download = this.extension.core.content.download || (() => {
 
-	const singlefile = this.singlefile;
+	const common = this.common;
 
 	const MAX_CONTENT_SIZE = 32 * (1024 * 1024);
 
@@ -33,7 +33,7 @@ this.singlefile.extension.core.content.download = this.singlefile.extension.core
 
 	async function downloadPage(pageData, options) {
 		if (options.includeInfobar) {
-			await singlefile.common.ui.content.infobar.includeScript(pageData);
+			await common.ui.content.infobar.includeScript(pageData);
 		}
 		if (options.includeBOM) {
 			pageData.content = "\ufeff" + pageData.content;

+ 12 - 10
extension/core/content/content-main.js

@@ -23,16 +23,18 @@
 
 /* global browser, document, window, location, setTimeout */
 
-this.singlefile.extension.core.content.main = this.singlefile.extension.core.content.main || (() => {
+this.extension.core.content.main = this.extension.core.content.main || (() => {
 
 	const singlefile = this.singlefile;
+	const extension = this.extension;
+	
 	const MOZ_EXTENSION_PROTOCOL = "moz-extension:";
 
 	let ui, processor;
 
 	singlefile.lib.main.init({
-		fetch: singlefile.extension.lib.fetch.content.resources.fetch,
-		frameFetch: singlefile.extension.lib.fetch.content.resources.frameFetch
+		fetch: extension.lib.fetch.content.resources.fetch,
+		frameFetch: extension.lib.fetch.content.resources.frameFetch
 	});
 	browser.runtime.onMessage.addListener(message => {
 		if (message.method == "content.save" || message.method == "content.cancelSave" || message.method == "content.getSelectedLinks") {
@@ -43,7 +45,7 @@ this.singlefile.extension.core.content.main = this.singlefile.extension.core.con
 
 	async function onMessage(message) {
 		if (!ui) {
-			ui = singlefile.extension.ui.content.main;
+			ui = extension.ui.content.main;
 		}
 		if (!location.href.startsWith(MOZ_EXTENSION_PROTOCOL)) {
 			if (message.method == "content.save") {
@@ -71,9 +73,9 @@ this.singlefile.extension.core.content.main = this.singlefile.extension.core.con
 
 	async function savePage(message) {
 		const options = message.options;
-		if (!singlefile.extension.core.processing) {
-			options.updatedResources = singlefile.extension.core.content.updatedResources || {};
-			options.visitDate = singlefile.extension.core.content.visitDate; 
+		if (!extension.core.processing) {
+			options.updatedResources = extension.core.content.updatedResources || {};
+			options.visitDate = extension.core.content.visitDate; 
 			Object.keys(options.updatedResources).forEach(url => options.updatedResources[url].retrieved = false);
 			let selectionFound;
 			if (options.selected || options.optionallySelected) {
@@ -83,14 +85,14 @@ this.singlefile.extension.core.content.main = this.singlefile.extension.core.con
 				options.selected = true;
 			}
 			if (!options.selected || selectionFound) {
-				singlefile.extension.core.processing = true;
+				extension.core.processing = true;
 				try {
 					const pageData = await processPage(options);
 					if (pageData) {
 						if (((!options.backgroundSave && !options.saveToClipboard) || options.saveToGDrive) && options.confirmFilename) {
 							pageData.filename = ui.prompt("Save as", pageData.filename) || pageData.filename;
 						}
-						await singlefile.extension.core.content.download.downloadPage(pageData, options);
+						await extension.core.content.download.downloadPage(pageData, options);
 					}
 				} catch (error) {
 					if (!processor.cancelled) {
@@ -101,7 +103,7 @@ this.singlefile.extension.core.content.main = this.singlefile.extension.core.con
 			} else {
 				browser.runtime.sendMessage({ method: "ui.processCancelled" });
 			}
-			singlefile.extension.core.processing = false;
+			extension.core.processing = false;
 		}
 	}
 

+ 1 - 1
extension/core/index.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-this.singlefile.extension.core = this.singlefile.extension.core || {
+this.extension.core = this.extension.core || {
 	bg: {},
 	content: {}
 };

+ 3 - 3
extension/index.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-this.singlefile.extension = this.singlefile.extension || {
-	injectScript: (tabId, options) => this.singlefile.extension.lib.core.bg.scripts.inject(tabId, options),
-	getPageData: (options, doc, win, initOptions = { fetch: this.singlefile.extension.lib.fetch.content.resources.fetch }) => this.singlefile.lib.getPageData(options, initOptions, doc, win)
+this.extension = this.extension || {
+	injectScript: (tabId, options) => this.extension.lib.core.bg.scripts.inject(tabId, options),
+	getPageData: (options, doc, win, initOptions = { fetch: this.extension.lib.fetch.content.resources.fetch }) => this.singlefile.lib.getPageData(options, initOptions, doc, win)
 };

+ 2 - 2
extension/lib/single-file/core/bg/scripts.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile, fetch, TextDecoder */
+/* global extension, browser, fetch, TextDecoder */
 
-singlefile.extension.lib.core.bg.scripts = (() => {
+extension.lib.core.bg.scripts = (() => {
 
 	let contentScript, frameScript;
 

+ 3 - 3
extension/lib/single-file/fetch/bg/fetch.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global singlefile, browser, XMLHttpRequest */
+/* global extension, browser, XMLHttpRequest */
 
 (() => {
 
@@ -71,8 +71,8 @@
 			xhrRequest.open("GET", url, true);
 			if (includeRequestId) {
 				const randomId = String(Math.random()).substring(2);
-				singlefile.extension.core.bg.requests.setReferrer(randomId, options.referrer);
-				xhrRequest.setRequestHeader(singlefile.extension.core.bg.requests.REQUEST_ID_HEADER_NAME, randomId);
+				extension.core.bg.requests.setReferrer(randomId, options.referrer);
+				xhrRequest.setRequestHeader(extension.core.bg.requests.REQUEST_ID_HEADER_NAME, randomId);
 			}
 			xhrRequest.send();
 		});

+ 1 - 1
extension/lib/single-file/fetch/content/content-fetch.js

@@ -23,7 +23,7 @@
 
 /* global browser, window, CustomEvent, setTimeout */
 
-this.singlefile.extension.lib.fetch.content.resources = this.singlefile.extension.lib.fetch.content.resources || (() => {
+this.extension.lib.fetch.content.resources = this.extension.lib.fetch.content.resources || (() => {
 
 	const FETCH_REQUEST_EVENT = "single-file-request-fetch";
 	const FETCH_RESPONSE_EVENT = "single-file-response-fetch";

+ 1 - 1
extension/lib/single-file/index.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-this.singlefile.extension.lib = this.singlefile.extension.lib || {
+this.extension.lib = this.extension.lib || {
 	core: {
 		bg: {}
 	},

+ 7 - 7
extension/ui/bg/ui-button.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile */
+/* global extension, browser */
 
-singlefile.extension.ui.bg.button = (() => {
+extension.ui.bg.button = (() => {
 
 	const DEFAULT_ICON_PATH = "/extension/ui/resources/icon_128.png";
 	const WAIT_ICON_PATH_PREFIX = "/extension/ui/resources/icon_128_wait";
@@ -108,8 +108,8 @@ singlefile.extension.ui.bg.button = (() => {
 	};
 
 	browser.browserAction.onClicked.addListener(async tab => {
-		const business = singlefile.extension.core.bg.business;
-		const allTabs = await singlefile.extension.core.bg.tabs.get({ currentWindow: true, highlighted: true });
+		const business = extension.core.bg.business;
+		const allTabs = await extension.core.bg.tabs.get({ currentWindow: true, highlighted: true });
 		if (allTabs.length <= 1) {
 			toggleSaveTab(tab);
 		} else {
@@ -139,7 +139,7 @@ singlefile.extension.ui.bg.button = (() => {
 
 	function onMessage(message, sender) {
 		if (message.method.endsWith(".processInit")) {
-			const tabsData = singlefile.extension.core.bg.tabsData.getTemporary(sender.tab.id);
+			const tabsData = extension.core.bg.tabsData.getTemporary(sender.tab.id);
 			delete tabsData[sender.tab.id].button;
 			refreshTab(sender.tab);
 		}
@@ -214,13 +214,13 @@ singlefile.extension.ui.bg.button = (() => {
 	}
 
 	async function refreshTab(tab) {
-		const autoSave = await singlefile.extension.core.bg.autosave.isEnabled(tab);
+		const autoSave = await extension.core.bg.autosave.isEnabled(tab);
 		const state = getButtonState("default", autoSave);
 		await refresh(tab.id, state);
 	}
 
 	async function refresh(tabId, state) {
-		const tabsData = singlefile.extension.core.bg.tabsData.getTemporary(tabId);
+		const tabsData = extension.core.bg.tabsData.getTemporary(tabId);
 		if (state) {
 			if (!tabsData[tabId].button) {
 				tabsData[tabId].button = { lastState: null };

+ 6 - 6
extension/ui/bg/ui-commands.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile */
+/* global extension, browser */
 
-singlefile.extension.ui.bg.commands = (() => {
+extension.ui.bg.commands = (() => {
 
 	const commands = browser.commands;
 	const BROWSER_COMMANDS_API_SUPPORTED = commands && commands.onCommand && commands.onCommand.addListener;
@@ -31,12 +31,12 @@ singlefile.extension.ui.bg.commands = (() => {
 	if (BROWSER_COMMANDS_API_SUPPORTED) {
 		commands.onCommand.addListener(async command => {
 			if (command == "save-selected-tabs") {
-				const allTabs = await singlefile.extension.core.bg.tabs.get({ currentWindow: true, highlighted: true });
-				singlefile.extension.core.bg.business.saveTabs(allTabs, { optionallySelected: true });
+				const allTabs = await extension.core.bg.tabs.get({ currentWindow: true, highlighted: true });
+				extension.core.bg.business.saveTabs(allTabs, { optionallySelected: true });
 			}
 			if (command == "save-all-tabs") {
-				const allTabs = await singlefile.extension.core.bg.tabs.get({ currentWindow: true });
-				singlefile.extension.core.bg.business.saveTabs(allTabs);
+				const allTabs = await extension.core.bg.tabs.get({ currentWindow: true });
+				extension.core.bg.business.saveTabs(allTabs);
 			}
 		});
 	}

+ 3 - 3
extension/ui/bg/ui-editor.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile, window, document, prompt, matchMedia */
+/* global extension, browser, window, document, prompt, matchMedia */
 
-singlefile.extension.ui.bg.editor = (() => {
+extension.ui.bg.editor = (() => {
 
 	const editorElement = document.querySelector(".editor");
 	const toolbarElement = document.querySelector(".toolbar");
@@ -259,7 +259,7 @@ singlefile.extension.ui.bg.editor = (() => {
 				filename: tabData.filename
 			};
 			tabData.options.openEditor = false;
-			singlefile.extension.core.content.download.downloadPage(pageData, tabData.options);
+			extension.core.content.download.downloadPage(pageData, tabData.options);
 		}
 		if (message.method == "onUpdate") {
 			tabData.docSaved = message.saved;

+ 15 - 15
extension/ui/bg/ui-main.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global singlefile */
+/* global extension */
 
-singlefile.extension.ui.bg.main = (() => {
+extension.ui.bg.main = (() => {
 
 	return {
 		onMessage,
@@ -42,54 +42,54 @@ singlefile.extension.ui.bg.main = (() => {
 
 	function onMessage(message, sender) {
 		if (message.method.endsWith(".refreshMenu")) {
-			return singlefile.extension.ui.bg.menus.onMessage(message, sender);
+			return extension.ui.bg.menus.onMessage(message, sender);
 		} else {
-			return singlefile.extension.ui.bg.button.onMessage(message, sender);
+			return extension.ui.bg.button.onMessage(message, sender);
 		}
 	}
 
 	async function refreshTab(tab) {
-		return Promise.all([singlefile.extension.ui.bg.menus.refreshTab(tab), singlefile.extension.ui.bg.button.refreshTab(tab)]);
+		return Promise.all([extension.ui.bg.menus.refreshTab(tab), extension.ui.bg.button.refreshTab(tab)]);
 	}
 
 	function onForbiddenDomain(tab) {
-		singlefile.extension.ui.bg.button.onForbiddenDomain(tab);
+		extension.ui.bg.button.onForbiddenDomain(tab);
 	}
 
 	function onStart(tabId, step, autoSave) {
-		singlefile.extension.ui.bg.button.onStart(tabId, step, autoSave);
+		extension.ui.bg.button.onStart(tabId, step, autoSave);
 	}
 
 	function onError(tabId) {
-		singlefile.extension.ui.bg.button.onError(tabId);
+		extension.ui.bg.button.onError(tabId);
 	}
 
 	function onEdit(tabId) {
-		singlefile.extension.ui.bg.button.onEdit(tabId);
+		extension.ui.bg.button.onEdit(tabId);
 	}
 
 	function onEnd(tabId, autoSave) {
-		singlefile.extension.ui.bg.button.onEnd(tabId, autoSave);
+		extension.ui.bg.button.onEnd(tabId, autoSave);
 	}
 
 	function onCancelled(tabId) {
-		singlefile.extension.ui.bg.button.onCancelled(tabId);
+		extension.ui.bg.button.onCancelled(tabId);
 	}
 
 	function onUploadProgress(tabId, index, maxIndex) {
-		singlefile.extension.ui.bg.button.onUploadProgress(tabId, index, maxIndex);
+		extension.ui.bg.button.onUploadProgress(tabId, index, maxIndex);
 	}
 
 	function onTabCreated(tab) {
-		singlefile.extension.ui.bg.menus.onTabCreated(tab);
+		extension.ui.bg.menus.onTabCreated(tab);
 	}
 
 	function onTabActivated(tab) {
-		singlefile.extension.ui.bg.menus.onTabActivated(tab);
+		extension.ui.bg.menus.onTabActivated(tab);
 	}
 
 	function onInit(tab) {
-		singlefile.extension.ui.bg.menus.onInit(tab);
+		extension.ui.bg.menus.onInit(tab);
 	}
 
 })();

+ 14 - 14
extension/ui/bg/ui-menus.js

@@ -21,9 +21,9 @@
  *   Source.
  */
 
-/* global browser, singlefile, URL */
+/* global extension, browser, URL */
 
-singlefile.extension.ui.bg.menus = (() => {
+extension.ui.bg.menus = (() => {
 
 	const menus = browser.menus || browser.contextMenus;
 	const BROWSER_MENUS_API_SUPPORTED = menus && menus.onClicked && menus.create && menus.update && menus.removeAll;
@@ -107,8 +107,8 @@ singlefile.extension.ui.bg.menus = (() => {
 	}
 
 	async function createMenus(tab) {
-		const config = singlefile.extension.core.bg.config;
-		const [profiles, tabsData] = await Promise.all([config.getProfiles(), singlefile.extension.core.bg.tabsData.get()]);
+		const config = extension.core.bg.config;
+		const [profiles, tabsData] = await Promise.all([config.getProfiles(), extension.core.bg.tabsData.get()]);
 		const options = await config.getOptions(tab && tab.url);
 		if (BROWSER_MENUS_API_SUPPORTED && options) {
 			const pageContextsEnabled = ["page", "frame", "image", "link", "video", "audio", "selection"];
@@ -371,15 +371,15 @@ singlefile.extension.ui.bg.menus = (() => {
 		menusCreated = true;
 		if (pendingRefresh) {
 			pendingRefresh = false;
-			(await singlefile.extension.core.bg.tabs.get({})).forEach(async tab => await refreshTab(tab));
+			(await extension.core.bg.tabs.get({})).forEach(async tab => await refreshTab(tab));
 		}
 	}
 
 	async function initialize() {
-		const business = singlefile.extension.core.bg.business;
-		const tabs = singlefile.extension.core.bg.tabs;
-		const tabsData = singlefile.extension.core.bg.tabsData;
-		const config = singlefile.extension.core.bg.config;
+		const business = extension.core.bg.business;
+		const tabs = extension.core.bg.tabs;
+		const tabsData = extension.core.bg.tabsData;
+		const config = extension.core.bg.config;
 		if (BROWSER_MENUS_API_SUPPORTED) {
 			createMenus();
 			menus.onClicked.addListener(async (event, tab) => {
@@ -505,9 +505,9 @@ singlefile.extension.ui.bg.menus = (() => {
 	}
 
 	async function refreshExternalComponents(tab) {
-		const tabsData = await singlefile.extension.core.bg.tabsData.get(tab.id);
-		await singlefile.extension.core.bg.autosave.refreshTabs();
-		await singlefile.extension.ui.bg.button.refreshTab(tab);
+		const tabsData = await extension.core.bg.tabsData.get(tab.id);
+		await extension.core.bg.autosave.refreshTabs();
+		await extension.ui.bg.button.refreshTab(tab);
 		try {
 			await browser.runtime.sendMessage({ method: "options.refresh", profileName: tabsData.profileName });
 		} catch (error) {
@@ -516,10 +516,10 @@ singlefile.extension.ui.bg.menus = (() => {
 	}
 
 	async function refreshTab(tab) {
-		const config = singlefile.extension.core.bg.config;
+		const config = extension.core.bg.config;
 		if (BROWSER_MENUS_API_SUPPORTED && menusCreated) {
 			const promises = [];
-			const tabsData = await singlefile.extension.core.bg.tabsData.get(tab.id);
+			const tabsData = await extension.core.bg.tabsData.get(tab.id);
 			if (tabsData[tab.id].editorDetected) {
 				updateAllVisibleValues(false);
 			} else {

+ 4 - 2
extension/ui/content/content-ui-editor-init-web.js

@@ -1,6 +1,7 @@
 /* global document */
 
 (() => {
+
 	document.currentScript.remove();
 	processNode(document);
 
@@ -22,6 +23,7 @@
 					processNode(shadowRoot);
 				}
 			}
-		})
+		});
 	}
-})()
+
+})();

+ 1 - 1
extension/ui/content/content-ui-main.js

@@ -23,7 +23,7 @@
 
 /* global browser, document, prompt, getComputedStyle, addEventListener, removeEventListener, requestAnimationFrame, setTimeout, getSelection, Node */
 
-this.singlefile.extension.ui.content.main = this.singlefile.extension.ui.content.main || (() => {
+this.extension.ui.content.main = this.extension.ui.content.main || (() => {
 
 	const SELECTED_CONTENT_ATTRIBUTE_NAME = this.singlefile.lib.helper.SELECTED_CONTENT_ATTRIBUTE_NAME;
 

+ 1 - 1
extension/ui/index.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-this.singlefile.extension.ui = this.singlefile.extension.ui || {
+this.extension.ui = this.extension.ui || {
 	bg: {},
 	content: {}
 };