no empty iframes test page

This commit is contained in:
overdodactyl 2018-11-25 15:54:48 -07:00
parent 4c25c4f1a1
commit 9a7d5f079b
53 changed files with 52920 additions and 3 deletions

View File

BIN
website/dist/GcP71BP-min.62448586.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
website/dist/Lato-Light.3c97fe76.eot vendored Normal file

Binary file not shown.

BIN
website/dist/Lato-Light.9e982457.ttf vendored Normal file

Binary file not shown.

BIN
website/dist/Lato-Light.c9c59e8e.woff vendored Normal file

Binary file not shown.

BIN
website/dist/Lato-Light.cb0c9583.woff2 vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="resources/favicons/mstile-150x150.png"/>
<TileColor>#9440c1</TileColor>
</tile>
</msapplication>
</browserconfig>

BIN
website/dist/favicon-16x16.d914d78a.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 B

BIN
website/dist/favicon-32x32.de92ca75.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
website/dist/favicon.3c2d3cb3.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

343
website/dist/index.js vendored Normal file
View File

@ -0,0 +1,343 @@
// modules are defined as an array
// [ module function, map of requires ]
//
// map of requires is short require name -> numeric require
//
// anything defined in a previous bundle is accessed via the
// orig method which is the require for previous bundles
// eslint-disable-next-line no-global-assign
parcelRequire = (function (modules, cache, entry, globalName) {
// Save the require from previous bundle to this closure if any
var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
var nodeRequire = typeof require === 'function' && require;
function newRequire(name, jumped) {
if (!cache[name]) {
if (!modules[name]) {
// if we cannot find the module within our internal map or
// cache jump to the current global require ie. the last bundle
// that was added to the page.
var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
if (!jumped && currentRequire) {
return currentRequire(name, true);
}
// If there are other bundles on this page the require from the
// previous one is saved to 'previousRequire'. Repeat this as
// many times as there are bundles until the module is found or
// we exhaust the require chain.
if (previousRequire) {
return previousRequire(name, true);
}
// Try the node require function if it exists.
if (nodeRequire && typeof name === 'string') {
return nodeRequire(name);
}
var err = new Error('Cannot find module \'' + name + '\'');
err.code = 'MODULE_NOT_FOUND';
throw err;
}
localRequire.resolve = resolve;
localRequire.cache = {};
var module = cache[name] = new newRequire.Module(name);
modules[name][0].call(module.exports, localRequire, module, module.exports, this);
}
return cache[name].exports;
function localRequire(x){
return newRequire(localRequire.resolve(x));
}
function resolve(x){
return modules[name][1][x] || x;
}
}
function Module(moduleName) {
this.id = moduleName;
this.bundle = newRequire;
this.exports = {};
}
newRequire.isParcelRequire = true;
newRequire.Module = Module;
newRequire.modules = modules;
newRequire.cache = cache;
newRequire.parent = previousRequire;
newRequire.register = function (id, exports) {
modules[id] = [function (require, module) {
module.exports = exports;
}, {}];
};
for (var i = 0; i < entry.length; i++) {
newRequire(entry[i]);
}
if (entry.length) {
// Expose entry point to Node, AMD or browser globals
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
var mainExports = newRequire(entry[entry.length - 1]);
// CommonJS
if (typeof exports === "object" && typeof module !== "undefined") {
module.exports = mainExports;
// RequireJS
} else if (typeof define === "function" && define.amd) {
define(function () {
return mainExports;
});
// <script>
} else if (globalName) {
this[globalName] = mainExports;
}
}
// Override the current require with this new one
return newRequire;
})({"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/bundle-url.js":[function(require,module,exports) {
var bundleURL = null;
function getBundleURLCached() {
if (!bundleURL) {
bundleURL = getBundleURL();
}
return bundleURL;
}
function getBundleURL() {
// Attempt to find the URL of the current script and use that as the base URL
try {
throw new Error();
} catch (err) {
var matches = ('' + err.stack).match(/(https?|file|ftp):\/\/[^)\n]+/g);
if (matches) {
return getBaseURL(matches[0]);
}
}
return '/';
}
function getBaseURL(url) {
return ('' + url).replace(/^((?:https?|file|ftp):\/\/.+)\/[^/]+$/, '$1') + '/';
}
exports.getBundleURL = getBundleURLCached;
exports.getBaseURL = getBaseURL;
},{}],"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js":[function(require,module,exports) {
var bundle = require('./bundle-url');
function updateLink(link) {
var newLink = link.cloneNode();
newLink.onload = function () {
link.remove();
};
newLink.href = link.href.split('?')[0] + '?' + Date.now();
link.parentNode.insertBefore(newLink, link.nextSibling);
}
var cssTimeout = null;
function reloadCSS() {
if (cssTimeout) {
return;
}
cssTimeout = setTimeout(function () {
var links = document.querySelectorAll('link[rel="stylesheet"]');
for (var i = 0; i < links.length; i++) {
if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {
updateLink(links[i]);
}
}
cssTimeout = null;
}, 50);
}
module.exports = reloadCSS;
},{"./bundle-url":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/bundle-url.js"}],"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/hmr-runtime.js":[function(require,module,exports) {
var global = arguments[3];
var OVERLAY_ID = '__parcel__error__overlay__';
var OldModule = module.bundle.Module;
function Module(moduleName) {
OldModule.call(this, moduleName);
this.hot = {
data: module.bundle.hotData,
_acceptCallbacks: [],
_disposeCallbacks: [],
accept: function (fn) {
this._acceptCallbacks.push(fn || function () {});
},
dispose: function (fn) {
this._disposeCallbacks.push(fn);
}
};
module.bundle.hotData = null;
}
module.bundle.Module = Module;
var parent = module.bundle.parent;
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
var hostname = "" || location.hostname;
var protocol = location.protocol === 'https:' ? 'wss' : 'ws';
var ws = new WebSocket(protocol + '://' + hostname + ':' + "53439" + '/');
ws.onmessage = function (event) {
var data = JSON.parse(event.data);
if (data.type === 'update') {
console.clear();
data.assets.forEach(function (asset) {
hmrApply(global.parcelRequire, asset);
});
data.assets.forEach(function (asset) {
if (!asset.isNew) {
hmrAccept(global.parcelRequire, asset.id);
}
});
}
if (data.type === 'reload') {
ws.close();
ws.onclose = function () {
location.reload();
};
}
if (data.type === 'error-resolved') {
console.log('[parcel] ✨ Error resolved');
removeErrorOverlay();
}
if (data.type === 'error') {
console.error('[parcel] 🚨 ' + data.error.message + '\n' + data.error.stack);
removeErrorOverlay();
var overlay = createErrorOverlay(data);
document.body.appendChild(overlay);
}
};
}
function removeErrorOverlay() {
var overlay = document.getElementById(OVERLAY_ID);
if (overlay) {
overlay.remove();
}
}
function createErrorOverlay(data) {
var overlay = document.createElement('div');
overlay.id = OVERLAY_ID; // html encode message and stack trace
var message = document.createElement('div');
var stackTrace = document.createElement('pre');
message.innerText = data.error.message;
stackTrace.innerText = data.error.stack;
overlay.innerHTML = '<div style="background: black; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; opacity: 0.85; font-family: Menlo, Consolas, monospace; z-index: 9999;">' + '<span style="background: red; padding: 2px 4px; border-radius: 2px;">ERROR</span>' + '<span style="top: 2px; margin-left: 5px; position: relative;">🚨</span>' + '<div style="font-size: 18px; font-weight: bold; margin-top: 20px;">' + message.innerHTML + '</div>' + '<pre>' + stackTrace.innerHTML + '</pre>' + '</div>';
return overlay;
}
function getParents(bundle, id) {
var modules = bundle.modules;
if (!modules) {
return [];
}
var parents = [];
var k, d, dep;
for (k in modules) {
for (d in modules[k][1]) {
dep = modules[k][1][d];
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {
parents.push(k);
}
}
}
if (bundle.parent) {
parents = parents.concat(getParents(bundle.parent, id));
}
return parents;
}
function hmrApply(bundle, asset) {
var modules = bundle.modules;
if (!modules) {
return;
}
if (modules[asset.id] || !bundle.parent) {
var fn = new Function('require', 'module', 'exports', asset.generated.js);
asset.isNew = !modules[asset.id];
modules[asset.id] = [fn, asset.deps];
} else if (bundle.parent) {
hmrApply(bundle.parent, asset);
}
}
function hmrAccept(bundle, id) {
var modules = bundle.modules;
if (!modules) {
return;
}
if (!modules[id] && bundle.parent) {
return hmrAccept(bundle.parent, id);
}
var cached = bundle.cache[id];
bundle.hotData = {};
if (cached) {
cached.hot.data = bundle.hotData;
}
if (cached && cached.hot && cached.hot._disposeCallbacks.length) {
cached.hot._disposeCallbacks.forEach(function (cb) {
cb(bundle.hotData);
});
}
delete bundle.cache[id];
bundle(id);
cached = bundle.cache[id];
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
cached.hot._acceptCallbacks.forEach(function (cb) {
cb();
});
return true;
}
return getParents(global.parcelRequire, id).some(function (id) {
return hmrAccept(global.parcelRequire, id);
});
}
},{}]},{},["../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/hmr-runtime.js"], null)

1
website/dist/index.map vendored Normal file
View File

@ -0,0 +1 @@
{"version":3,"sources":["../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/bundle-url.js","../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"],"names":["bundleURL","getBundleURLCached","getBundleURL","Error","err","matches","stack","match","getBaseURL","url","replace","exports","bundle","require","updateLink","link","newLink","cloneNode","onload","remove","href","split","Date","now","parentNode","insertBefore","nextSibling","cssTimeout","reloadCSS","setTimeout","links","document","querySelectorAll","i","length","module"],"mappings":"AAAA,ACAA,IDAIA,ACAAY,MAAM,GDAG,ACAAC,GDAG,IAAhB,ACAoB,CAAC,cAAD,CAApB;;ADCA,ACCA,SDDSZ,ACCAa,UAAT,CAAoBC,IAApB,EAA0B,CDD1B,GAA8B;AAC5B,ACCA,MDDI,ACCAC,CDDChB,MCCM,GDDX,ACCce,EDDE,ECCE,CAACE,SAAL,EAAd;ADAEjB,IAAAA,SAAS,GAAGE,YAAY,EAAxB;AACD,ACADc,EAAAA,OAAO,CAACE,MAAR,GAAiB,YAAY;AAC3BH,IAAAA,IAAI,CAACI,MAAL;ADCF,ACAC,GAFD,MDEOnB,SAAP;AACD;ACACgB,EAAAA,OAAO,CAACI,IAAR,GAAeL,IAAI,CAACK,IAAL,CAAUC,KAAV,CAAgB,GAAhB,EAAqB,CAArB,IAA0B,GAA1B,GAAgCC,IAAI,CAACC,GAAL,EAA/C;ADEF,ACDER,EAAAA,IAAI,CAACS,EDCEtB,QCDP,CAAgBuB,GDClB,GAAwB,MCDtB,CAA6BT,OAA7B,EAAsCD,IAAI,CAACW,WAA3C;ADEA,ACDD;ADEC,MAAI;AACF,ACDJ,IAAIC,MDCM,IAAIxB,ACDA,GAAG,EDCP,EAAN,ACDJ;ADEG,GAFD,CAEE,OAAOC,GAAP,EAAY;AACZ,ACFJ,QDEQC,CCFCuB,MDEM,GAAG,ACFlB,CDEmB,ECFE,GDEGxB,GAAG,CAACE,KAAV,EAAiBC,KAAjB,CAAuB,gCAAvB,CAAd;ACDF,MAAIoB,UAAJ,EAAgB;ADEd,ACDA,QDCItB,OAAJ,EAAa;AACX,ACDH,aDCUG,UAAU,CAACH,OAAO,CAAC,CAAD,CAAR,CAAjB;AACD;AACF,ACDDsB,EAAAA,UAAU,GAAGE,UAAU,CAAC,YAAY;AAClC,QAAIC,KAAK,GAAGC,QAAQ,CAACC,gBAAT,CAA0B,wBAA1B,CAAZ;ADEF,SAAO,GAAP;AACD,ACFG,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,KAAK,CAACI,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;AACrC,UAAIrB,MAAM,CAACJ,UAAP,CAAkBsB,KAAK,CAACG,CAAD,CAAL,CAASb,IAA3B,MAAqCR,MAAM,CAACV,YAAP,EAAzC,EAAgE;ADGtE,ACFQY,QAAAA,CDECN,SCFS,CDElB,ACFmBsB,CDECrB,GAApB,CCFwB,CDEC,ACFAwB,CAAD,CAAN,CAAV;ADGN,ACFK,SDEE,CAAC,KAAKxB,GAAN,EAAWC,OAAX,CAAmB,uCAAnB,EAA4D,IAA5D,IAAoE,GAA3E;AACD,ACFI;;ADILC,ACFIgB,IAAAA,GDEG,CAACzB,MCFM,GAAG,GDEjB,CCFI,EDEmBD,kBAAvB;AACAU,ACFG,GATsB,EASpB,EDEE,ACXkB,CDWjBH,ACXN,UDWF,GAAqBA,UAArB;ACDC;;AAED2B,MAAM,CAACxB,OAAP,GAAiBiB,SAAjB","file":"index.map","sourceRoot":"..","sourcesContent":["var bundleURL = null;\nfunction getBundleURLCached() {\n if (!bundleURL) {\n bundleURL = getBundleURL();\n }\n\n return bundleURL;\n}\n\nfunction getBundleURL() {\n // Attempt to find the URL of the current script and use that as the base URL\n try {\n throw new Error;\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp):\\/\\/[^)\\n]+/g);\n if (matches) {\n return getBaseURL(matches[0]);\n }\n }\n\n return '/';\n}\n\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp):\\/\\/.+)\\/[^/]+$/, '$1') + '/';\n}\n\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\n","var bundle = require('./bundle-url');\n\nfunction updateLink(link) {\n var newLink = link.cloneNode();\n newLink.onload = function () {\n link.remove();\n };\n newLink.href = link.href.split('?')[0] + '?' + Date.now();\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\n\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout) {\n return;\n }\n\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {\n updateLink(links[i]);\n }\n }\n\n cssTimeout = null;\n }, 50);\n}\n\nmodule.exports = reloadCSS;\n"]}

BIN
website/dist/ionicons.044e0f8b.ttf vendored Normal file

Binary file not shown.

2230
website/dist/ionicons.a54256ce.svg vendored Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 326 KiB

BIN
website/dist/ionicons.c628c025.eot vendored Normal file

Binary file not shown.

BIN
website/dist/ionicons.e9956e69.woff vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,14 @@
<!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8"> <meta name="description" content="ShadowFox is a universal dark theme for Firefox."> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="website.5f572aa7.css"> <title>ShadowFox</title> <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.e29f8037.png"> <link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.39fc885a.png"> <link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.a999429a.png"> <link rel="manifest" href="site.e2f57597.webmanifest"> <link rel="mask-icon" href="safari-pinned-tab.87a4d9cf.svg" color="#9440c1"> <link rel="shortcut icon" href="favicon.95bad960.ico"> <meta name="msapplication-TileColor" content="#9440c1"> <meta name="msapplication-config" content="browserconfig.115cb9dc.xml"> <meta name="theme-color" content="#ffffff"> </head> <style>iframe{background-color:#5e7651;border:none}.ion-ios-home{padding:10px 0 0 10px;font-size:250%}section{padding:0 0 80px}.CodeMirror{max-width:70%;margin-left:15%}</style> <body> <div class="row"> <a href="."><i class="ion-ios-home icon-big"></i></a> </div> <section> <div class="row"> <h2>No Empty iframes</h2><br> <p class="long-copy"> ShadowFox styles <code>about:blank</code> in order to maintain a universal dark theme. An unfortunate consequence of this is that empty iframes on webpages are unintentionally styled (see <a href="https://github.com/overdodactyl/ShadowFox/issues/222">here</a>). No Empty iframes is a simple extension available on <a href="https://addons.mozilla.org/en-US/firefox/addon/no-empty-iframes/">AMO</a> that solves this problem by adding a content-less <code>div</code> to the body of any empty <code>iframe</code>.<br><br> Below is a simple test for No Empty iframes. The first iframe has no content, and the second does. Both iframes should have a green background, but with just ShadowFox installed, you will notice the first is grey.<br><br> <b>With No Empty iframes installed (or ShadowFox uninstalled), both boxes should be green.</b> <br><br><br> </p> <center> <iframe id="iframe_empty" src="about:blank"></iframe> <iframe id="iframe_content" src="about:blank"></iframe> </center> </div> </section> <section> <div class="row"> <h2>Alternatives</h2> <p class="long-copy"> No Empty iframes is very simple extension, and the following code could be easily be applied via an extension like <a href="https://addons.mozilla.org/en-US/firefox/addon/violentmonkey/">Violentmonkey</a>.<br><br><br> </p> <textarea class="codemirror-textarea" id="iframes_test">// ==UserScript==
// @name No Empty iframes
// @grant none
// ==/UserScript==
window.onload = function () {
var frames = document.getElementsByTagName("iframe");
for (var i = 0; i < frames.length; i++) {
var doc = frames[i].contentWindow.document;
var elemDiv = document.createElement('div');
doc.body.appendChild(elemDiv);
}
}
</textarea> </div> </section> <footer> <div class="row"> <div class="col span-1-of-2"> <ul class="footer-nav"> <li><a href="https://addons.mozilla.org/en-US/firefox/addon/no-empty-iframes/">Download No Empty iframes</a></li> </ul> </div> <div class="col span-1-of-2"> <ul class="social-links"> <li><a href="https://github.com/overdodactyl/ShadowFox/"><i class="ion-social-github"></i></a></li> <li><a href="https://www.reddit.com/r/ShadowFoxCSS/"><i class="ion-social-reddit"></i></a></li> <li><a href="https://join.slack.com/t/shadowfox-workspace/shared_invite/enQtMzI5Nzk5OTk1MjcxLThkMDgwOGE5ZDY1MDUyNjIwNWQ2MTlmMjEwZTJiZmZjYTUxODM4ZTRkNzhiNGRhZTFhMjdjMTFjMTQ3YjZjYzU"><i class="ion-pound"></i></a></li> </ul> </div> </div> <div class="row"> <p> Copyright Pat Johnson &copy; 2018 (MIT). All rights reserved.<br> Firefox is a registered trademark of the Mozilla Foundation.<br> </p> </div> </footer> <script src="testpage.f493533c.js"></script> </body> </html>

View File

@ -0,0 +1,58 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M496 6283 c6 -143 16 -343 19 -368 2 -16 7 -73 10 -125 4 -52 8 -97
10 -100 2 -3 6 -34 10 -70 3 -36 8 -72 10 -80 2 -8 7 -35 10 -60 6 -45 21
-133 30 -180 3 -14 8 -38 11 -55 9 -52 42 -198 58 -255 8 -30 24 -90 36 -134
64 -240 177 -528 308 -788 l74 -146 -20 -29 c-11 -15 -84 -131 -162 -258 -78
-126 -153 -246 -165 -265 -87 -133 -136 -223 -128 -231 9 -9 195 59 356 130
26 11 47 16 47 12 0 -5 -21 -67 -46 -137 -25 -71 -55 -153 -65 -183 l-19 -53
153 6 c83 4 171 8 195 10 l43 2 -5 -50 c-9 -75 -15 -128 -21 -156 -2 -14 -7
-54 -10 -90 -4 -36 -9 -73 -11 -82 -7 -23 -10 -23 132 6 66 13 135 27 154 30
19 3 52 10 73 15 20 5 39 6 41 2 3 -4 -2 -42 -9 -86 -8 -44 -16 -100 -20 -125
-7 -56 -15 -99 -22 -124 -6 -21 -14 -22 122 9 39 9 77 18 85 20 8 2 31 8 51
13 l36 9 -8 -46 c-4 -25 -10 -66 -13 -91 -3 -25 -10 -68 -14 -95 -10 -61 -6
-75 18 -75 27 0 214 -67 297 -106 174 -83 361 -235 456 -373 67 -95 88 -142
116 -256 44 -175 70 -226 160 -315 56 -55 89 -76 211 -136 80 -40 172 -82 205
-94 33 -12 71 -27 85 -33 46 -19 241 -18 307 2 104 33 164 61 195 91 31 32 25
36 -32 20 -57 -16 -142 -20 -184 -9 -35 10 -96 59 -96 79 0 4 22 6 48 5 74 -3
150 24 182 65 35 43 46 79 28 84 -78 23 -107 39 -115 64 -4 15 -8 34 -7 42 1
8 2 25 3 38 2 34 34 59 98 78 78 23 93 33 113 78 38 83 1 209 -82 280 -55 47
-80 54 -268 71 -63 6 -119 13 -171 21 l-37 5 3 62 c25 500 25 935 0 1089 -2
13 -6 43 -9 68 -40 317 -176 700 -322 906 -80 114 -175 196 -292 253 -113 56
-221 77 -423 84 l-66 2 23 108 c13 59 34 140 49 180 55 156 40 224 -94 407
-213 293 -548 610 -960 910 -79 58 -158 117 -175 132 l-31 27 41 1 c51 0 362
-104 484 -162 46 -23 135 -70 197 -107 63 -36 121 -71 131 -76 76 -45 183
-110 482 -295 190 -118 370 -224 400 -236 69 -29 74 -29 410 -49 36 -2 84 -6
106 -9 23 -3 70 -8 105 -11 356 -31 653 -123 1169 -363 126 -58 107 -61 192
26 61 63 143 141 282 267 14 13 167 139 231 191 82 67 262 204 577 439 78 58
118 83 122 77 2 -4 3 -70 1 -147 -3 -169 -25 -280 -89 -457 -47 -130 -70 -183
-177 -404 -94 -196 -149 -325 -136 -317 21 12 160 126 206 168 89 82 191 189
247 260 21 28 42 52 45 55 7 7 91 129 105 155 6 11 30 52 52 91 75 131 147
317 190 489 43 170 78 452 57 449 -6 -1 -53 -5 -105 -8 -391 -27 -804 -151
-1275 -382 -214 -105 -331 -171 -571 -325 -166 -106 -178 -111 -248 -112 -66
-1 -94 2 -381 37 -163 21 -224 24 -430 21 -132 -2 -265 -6 -295 -9 -280 -27
-360 -27 -415 -1 -22 11 -85 53 -140 94 -202 151 -532 374 -648 440 -18 10
-77 44 -132 76 -239 139 -566 287 -835 379 -107 36 -486 136 -518 136 -4 0 -6
-17 -6 -37z m2014 -2762 c83 -31 80 -22 57 -131 -12 -54 -12 -73 -1 -108 21
-73 105 -125 160 -100 24 11 94 93 94 110 0 27 20 -9 30 -54 6 -29 18 -75 27
-101 8 -27 12 -51 9 -54 -3 -3 -56 -7 -118 -9 -92 -2 -124 1 -173 18 -85 28
-140 72 -172 138 -24 47 -28 68 -29 145 -1 101 11 175 29 174 7 0 46 -13 87
-28z"/>
<path d="M4307 3640 c-102 -32 -178 -104 -237 -225 -21 -44 -43 -104 -48 -134
-10 -52 -8 -235 2 -278 2 -12 7 -46 10 -75 4 -29 8 -64 10 -78 3 -14 10 -68
16 -120 6 -52 13 -111 16 -130 3 -19 7 -57 10 -85 2 -27 6 -59 8 -70 3 -11 5
-27 6 -35 3 -39 91 172 106 255 3 17 10 53 14 80 5 28 7 146 5 264 -3 117 -2
217 0 222 3 4 25 1 48 -7 89 -31 126 -36 163 -18 80 38 100 127 59 264 -3 10
7 20 28 29 17 8 64 28 102 46 39 17 96 42 129 56 l58 24 -33 7 c-44 10 -133
16 -289 22 -103 4 -135 1 -183 -14z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1 @@
{"name":"","short_name":"","icons":[{"src":"android-chrome-192x192.14995f0c.png","sizes":"192x192","type":"image/png"},{"src":"android-chrome-512x512.311b8d04.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

21432
website/dist/testpage.d17cee69.js vendored Normal file

File diff suppressed because it is too large Load Diff

1
website/dist/testpage.d17cee69.map vendored Normal file

File diff suppressed because one or more lines are too long

19
website/dist/testpage.f493533c.js vendored Normal file

File diff suppressed because one or more lines are too long

1
website/dist/testpage.f493533c.map vendored Normal file

File diff suppressed because one or more lines are too long

14
website/dist/testpage.html vendored Normal file
View File

@ -0,0 +1,14 @@
<!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8"> <meta name="description" content="ShadowFox is a universal dark theme for Firefox."> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="website.5f572aa7.css"> <title>ShadowFox</title> <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.e29f8037.png"> <link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.39fc885a.png"> <link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.a999429a.png"> <link rel="manifest" href="site.e2f57597.webmanifest"> <link rel="mask-icon" href="safari-pinned-tab.87a4d9cf.svg" color="#9440c1"> <link rel="shortcut icon" href="favicon.95bad960.ico"> <meta name="msapplication-TileColor" content="#9440c1"> <meta name="msapplication-config" content="browserconfig.115cb9dc.xml"> <meta name="theme-color" content="#ffffff"> </head> <style>iframe{background-color:#5e7651;border:none}.ion-ios-home{padding:10px 0 0 10px;font-size:250%}section{padding:0 0 80px}.CodeMirror{max-width:70%;margin-left:15%}</style> <body> <div class="row"> <a href="."><i class="ion-ios-home icon-big"></i></a> </div> <section> <div class="row"> <h2>No Empty iframes</h2><br> <p class="long-copy"> ShadowFox styles <code>about:blank</code> in order to maintain a universal dark theme. An unfortunate consequence of this is that empty iframes on webpages are unintentionally styled (see <a href="https://github.com/overdodactyl/ShadowFox/issues/222">here</a>). No Empty iframes is a simple extension available on <a href="https://addons.mozilla.org/en-US/firefox/addon/no-empty-iframes/">AMO</a> that solves this problem by adding a content-less <code>div</code> to the body of any empty <code>iframe</code>.<br><br> Below is a simple test for No Empty iframes. The first iframe has no content, and the second does. Both iframes should have a green background, but with just ShadowFox installed, you will notice the first is grey.<br><br> <b>With No Empty iframes installed (or ShadowFox uninstalled), both boxes should be green.</b> <br><br><br> </p> <center> <iframe id="iframe_empty" src="about:blank"></iframe> <iframe id="iframe_content" src="about:blank"></iframe> </center> </div> </section> <section> <div class="row"> <h2>Alternatives</h2> <p class="long-copy"> No Empty iframes is very simple extension, and the following code could be easily be applied via an extension like <a href="https://addons.mozilla.org/en-US/firefox/addon/violentmonkey/">Violentmonkey</a>.<br><br><br> </p> <textarea class="codemirror-textarea" id="iframes_test">// ==UserScript==
// @name No Empty iframes
// @grant none
// ==/UserScript==
window.onload = function () {
var frames = document.getElementsByTagName("iframe");
for (var i = 0; i < frames.length; i++) {
var doc = frames[i].contentWindow.document;
var elemDiv = document.createElement('div');
doc.body.appendChild(elemDiv);
}
}
</textarea> </div> </section> <footer> <div class="row"> <div class="col span-1-of-2"> <ul class="footer-nav"> <li><a href="https://addons.mozilla.org/en-US/firefox/addon/no-empty-iframes/">Download No Empty iframes</a></li> </ul> </div> <div class="col span-1-of-2"> <ul class="social-links"> <li><a href="https://github.com/overdodactyl/ShadowFox/"><i class="ion-social-github"></i></a></li> <li><a href="https://www.reddit.com/r/ShadowFoxCSS/"><i class="ion-social-reddit"></i></a></li> <li><a href="https://join.slack.com/t/shadowfox-workspace/shared_invite/enQtMzI5Nzk5OTk1MjcxLThkMDgwOGE5ZDY1MDUyNjIwNWQ2MTlmMjEwZTJiZmZjYTUxODM4ZTRkNzhiNGRhZTFhMjdjMTFjMTQ3YjZjYzU"><i class="ion-pound"></i></a></li> </ul> </div> </div> <div class="row"> <p> Copyright Pat Johnson &copy; 2018 (MIT). All rights reserved.<br> Firefox is a registered trademark of the Mozilla Foundation.<br> </p> </div> </footer> <script src="testpage.f493533c.js"></script> </body> </html>

1
website/dist/website.121ad5a8.map vendored Normal file
View File

@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","file":"website.121ad5a8.map","sourceRoot":".."}

82
website/dist/website.5f572aa7.css vendored Normal file

File diff suppressed because one or more lines are too long

2895
website/dist/website.9ad09f98.css vendored Normal file

File diff suppressed because one or more lines are too long

472
website/dist/website.9ad09f98.js vendored Normal file
View File

@ -0,0 +1,472 @@
// modules are defined as an array
// [ module function, map of requires ]
//
// map of requires is short require name -> numeric require
//
// anything defined in a previous bundle is accessed via the
// orig method which is the require for previous bundles
// eslint-disable-next-line no-global-assign
parcelRequire = (function (modules, cache, entry, globalName) {
// Save the require from previous bundle to this closure if any
var previousRequire = typeof parcelRequire === 'function' && parcelRequire;
var nodeRequire = typeof require === 'function' && require;
function newRequire(name, jumped) {
if (!cache[name]) {
if (!modules[name]) {
// if we cannot find the module within our internal map or
// cache jump to the current global require ie. the last bundle
// that was added to the page.
var currentRequire = typeof parcelRequire === 'function' && parcelRequire;
if (!jumped && currentRequire) {
return currentRequire(name, true);
}
// If there are other bundles on this page the require from the
// previous one is saved to 'previousRequire'. Repeat this as
// many times as there are bundles until the module is found or
// we exhaust the require chain.
if (previousRequire) {
return previousRequire(name, true);
}
// Try the node require function if it exists.
if (nodeRequire && typeof name === 'string') {
return nodeRequire(name);
}
var err = new Error('Cannot find module \'' + name + '\'');
err.code = 'MODULE_NOT_FOUND';
throw err;
}
localRequire.resolve = resolve;
localRequire.cache = {};
var module = cache[name] = new newRequire.Module(name);
modules[name][0].call(module.exports, localRequire, module, module.exports, this);
}
return cache[name].exports;
function localRequire(x){
return newRequire(localRequire.resolve(x));
}
function resolve(x){
return modules[name][1][x] || x;
}
}
function Module(moduleName) {
this.id = moduleName;
this.bundle = newRequire;
this.exports = {};
}
newRequire.isParcelRequire = true;
newRequire.Module = Module;
newRequire.modules = modules;
newRequire.cache = cache;
newRequire.parent = previousRequire;
newRequire.register = function (id, exports) {
modules[id] = [function (require, module) {
module.exports = exports;
}, {}];
};
for (var i = 0; i < entry.length; i++) {
newRequire(entry[i]);
}
if (entry.length) {
// Expose entry point to Node, AMD or browser globals
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
var mainExports = newRequire(entry[entry.length - 1]);
// CommonJS
if (typeof exports === "object" && typeof module !== "undefined") {
module.exports = mainExports;
// RequireJS
} else if (typeof define === "function" && define.amd) {
define(function () {
return mainExports;
});
// <script>
} else if (globalName) {
this[globalName] = mainExports;
}
}
// Override the current require with this new one
return newRequire;
})({"vendors/css/animate.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"vendors/css/codemirror.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"vendors/css/combined.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"./../fonts/ionicons.eot":[["ionicons.c628c025.eot","vendors/fonts/ionicons.eot"],"vendors/fonts/ionicons.eot"],"./../fonts/ionicons.woff":[["ionicons.e9956e69.woff","vendors/fonts/ionicons.woff"],"vendors/fonts/ionicons.woff"],"./../fonts/ionicons.ttf":[["ionicons.044e0f8b.ttf","vendors/fonts/ionicons.ttf"],"vendors/fonts/ionicons.ttf"],"./../fonts/ionicons.svg":[["ionicons.a54256ce.svg","vendors/fonts/ionicons.svg"],"vendors/fonts/ionicons.svg"],"./../fonts/Lato-Light.eot":[["Lato-Light.3c97fe76.eot","vendors/fonts/Lato-Light.eot"],"vendors/fonts/Lato-Light.eot"],"./../fonts/Lato-Light.woff2":[["Lato-Light.cb0c9583.woff2","vendors/fonts/Lato-Light.woff2"],"vendors/fonts/Lato-Light.woff2"],"./../fonts/Lato-Light.woff":[["Lato-Light.c9c59e8e.woff","vendors/fonts/Lato-Light.woff"],"vendors/fonts/Lato-Light.woff"],"./../fonts/Lato-Light.ttf":[["Lato-Light.9e982457.ttf","vendors/fonts/Lato-Light.ttf"],"vendors/fonts/Lato-Light.ttf"],"./../fonts/Lato-LightItalic.eot":[["Lato-LightItalic.184bf78e.eot","vendors/fonts/Lato-LightItalic.eot"],"vendors/fonts/Lato-LightItalic.eot"],"./../fonts/Lato-LightItalic.woff2":[["Lato-LightItalic.69b9e097.woff2","vendors/fonts/Lato-LightItalic.woff2"],"vendors/fonts/Lato-LightItalic.woff2"],"./../fonts/Lato-LightItalic.woff":[["Lato-LightItalic.7d9facd5.woff","vendors/fonts/Lato-LightItalic.woff"],"vendors/fonts/Lato-LightItalic.woff"],"./../fonts/Lato-LightItalic.ttf":[["Lato-LightItalic.82a482bf.ttf","vendors/fonts/Lato-LightItalic.ttf"],"vendors/fonts/Lato-LightItalic.ttf"],"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"vendors/css/grid.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"vendors/css/ionicons.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"./../fonts/ionicons.eot":[["ionicons.c628c025.eot","vendors/fonts/ionicons.eot"],"vendors/fonts/ionicons.eot"],"./../fonts/ionicons.woff":[["ionicons.e9956e69.woff","vendors/fonts/ionicons.woff"],"vendors/fonts/ionicons.woff"],"./../fonts/ionicons.ttf":[["ionicons.044e0f8b.ttf","vendors/fonts/ionicons.ttf"],"vendors/fonts/ionicons.ttf"],"./../fonts/ionicons.svg":[["ionicons.a54256ce.svg","vendors/fonts/ionicons.svg"],"vendors/fonts/ionicons.svg"],"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"vendors/css/latofonts.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"./../fonts/Lato-Light.eot":[["Lato-Light.3c97fe76.eot","vendors/fonts/Lato-Light.eot"],"vendors/fonts/Lato-Light.eot"],"./../fonts/Lato-Light.woff2":[["Lato-Light.cb0c9583.woff2","vendors/fonts/Lato-Light.woff2"],"vendors/fonts/Lato-Light.woff2"],"./../fonts/Lato-Light.woff":[["Lato-Light.c9c59e8e.woff","vendors/fonts/Lato-Light.woff"],"vendors/fonts/Lato-Light.woff"],"./../fonts/Lato-Light.ttf":[["Lato-Light.9e982457.ttf","vendors/fonts/Lato-Light.ttf"],"vendors/fonts/Lato-Light.ttf"],"./../fonts/Lato-LightItalic.eot":[["Lato-LightItalic.184bf78e.eot","vendors/fonts/Lato-LightItalic.eot"],"vendors/fonts/Lato-LightItalic.eot"],"./../fonts/Lato-LightItalic.woff2":[["Lato-LightItalic.69b9e097.woff2","vendors/fonts/Lato-LightItalic.woff2"],"vendors/fonts/Lato-LightItalic.woff2"],"./../fonts/Lato-LightItalic.woff":[["Lato-LightItalic.7d9facd5.woff","vendors/fonts/Lato-LightItalic.woff"],"vendors/fonts/Lato-LightItalic.woff"],"./../fonts/Lato-LightItalic.ttf":[["Lato-LightItalic.82a482bf.ttf","vendors/fonts/Lato-LightItalic.ttf"],"vendors/fonts/Lato-LightItalic.ttf"],"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"vendors/css/magnific-popup.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"vendors/css/normalize.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"vendors/css/shadowfox.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"resources/css/style.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"../../vendors/css/combined.css":"vendors/css/combined.css","./img/GcP71BP-min.png":[["GcP71BP-min.62448586.png","resources/css/img/GcP71BP-min.png"],"resources/css/img/GcP71BP-min.png"],"./img/testimonials_bg.jpg":[["testimonials_bg.d164d092.jpg","resources/css/img/testimonials_bg.jpg"],"resources/css/img/testimonials_bg.jpg"],"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"resources/css/queries.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"index.css":[function(require,module,exports) {
var reloadCSS = require('_css_loader');
module.hot.dispose(reloadCSS);
module.hot.accept(reloadCSS);
},{"./vendors/css/animate.css":"vendors/css/animate.css","./vendors/css/codemirror.css":"vendors/css/codemirror.css","./vendors/css/combined.css":"vendors/css/combined.css","./vendors/css/grid.css":"vendors/css/grid.css","./vendors/css/ionicons.css":"vendors/css/ionicons.css","./vendors/css/latofonts.css":"vendors/css/latofonts.css","./vendors/css/magnific-popup.css":"vendors/css/magnific-popup.css","./vendors/css/normalize.css":"vendors/css/normalize.css","./vendors/css/shadowfox.css":"vendors/css/shadowfox.css","./resources/css/style":"resources/css/style.css","./resources/css/queries":"resources/css/queries.css","_css_loader":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"}],"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/hmr-runtime.js":[function(require,module,exports) {
var global = arguments[3];
var OVERLAY_ID = '__parcel__error__overlay__';
var OldModule = module.bundle.Module;
function Module(moduleName) {
OldModule.call(this, moduleName);
this.hot = {
data: module.bundle.hotData,
_acceptCallbacks: [],
_disposeCallbacks: [],
accept: function (fn) {
this._acceptCallbacks.push(fn || function () {});
},
dispose: function (fn) {
this._disposeCallbacks.push(fn);
}
};
module.bundle.hotData = null;
}
module.bundle.Module = Module;
var parent = module.bundle.parent;
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
var hostname = "" || location.hostname;
var protocol = location.protocol === 'https:' ? 'wss' : 'ws';
var ws = new WebSocket(protocol + '://' + hostname + ':' + "53439" + '/');
ws.onmessage = function (event) {
var data = JSON.parse(event.data);
if (data.type === 'update') {
console.clear();
data.assets.forEach(function (asset) {
hmrApply(global.parcelRequire, asset);
});
data.assets.forEach(function (asset) {
if (!asset.isNew) {
hmrAccept(global.parcelRequire, asset.id);
}
});
}
if (data.type === 'reload') {
ws.close();
ws.onclose = function () {
location.reload();
};
}
if (data.type === 'error-resolved') {
console.log('[parcel] ✨ Error resolved');
removeErrorOverlay();
}
if (data.type === 'error') {
console.error('[parcel] 🚨 ' + data.error.message + '\n' + data.error.stack);
removeErrorOverlay();
var overlay = createErrorOverlay(data);
document.body.appendChild(overlay);
}
};
}
function removeErrorOverlay() {
var overlay = document.getElementById(OVERLAY_ID);
if (overlay) {
overlay.remove();
}
}
function createErrorOverlay(data) {
var overlay = document.createElement('div');
overlay.id = OVERLAY_ID; // html encode message and stack trace
var message = document.createElement('div');
var stackTrace = document.createElement('pre');
message.innerText = data.error.message;
stackTrace.innerText = data.error.stack;
overlay.innerHTML = '<div style="background: black; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; opacity: 0.85; font-family: Menlo, Consolas, monospace; z-index: 9999;">' + '<span style="background: red; padding: 2px 4px; border-radius: 2px;">ERROR</span>' + '<span style="top: 2px; margin-left: 5px; position: relative;">🚨</span>' + '<div style="font-size: 18px; font-weight: bold; margin-top: 20px;">' + message.innerHTML + '</div>' + '<pre>' + stackTrace.innerHTML + '</pre>' + '</div>';
return overlay;
}
function getParents(bundle, id) {
var modules = bundle.modules;
if (!modules) {
return [];
}
var parents = [];
var k, d, dep;
for (k in modules) {
for (d in modules[k][1]) {
dep = modules[k][1][d];
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {
parents.push(k);
}
}
}
if (bundle.parent) {
parents = parents.concat(getParents(bundle.parent, id));
}
return parents;
}
function hmrApply(bundle, asset) {
var modules = bundle.modules;
if (!modules) {
return;
}
if (modules[asset.id] || !bundle.parent) {
var fn = new Function('require', 'module', 'exports', asset.generated.js);
asset.isNew = !modules[asset.id];
modules[asset.id] = [fn, asset.deps];
} else if (bundle.parent) {
hmrApply(bundle.parent, asset);
}
}
function hmrAccept(bundle, id) {
var modules = bundle.modules;
if (!modules) {
return;
}
if (!modules[id] && bundle.parent) {
return hmrAccept(bundle.parent, id);
}
var cached = bundle.cache[id];
bundle.hotData = {};
if (cached) {
cached.hot.data = bundle.hotData;
}
if (cached && cached.hot && cached.hot._disposeCallbacks.length) {
cached.hot._disposeCallbacks.forEach(function (cb) {
cb(bundle.hotData);
});
}
delete bundle.cache[id];
bundle(id);
cached = bundle.cache[id];
if (cached && cached.hot && cached.hot._acceptCallbacks.length) {
cached.hot._acceptCallbacks.forEach(function (cb) {
cb();
});
return true;
}
return getParents(global.parcelRequire, id).some(function (id) {
return hmrAccept(global.parcelRequire, id);
});
}
},{}],"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/bundle-url.js":[function(require,module,exports) {
var bundleURL = null;
function getBundleURLCached() {
if (!bundleURL) {
bundleURL = getBundleURL();
}
return bundleURL;
}
function getBundleURL() {
// Attempt to find the URL of the current script and use that as the base URL
try {
throw new Error();
} catch (err) {
var matches = ('' + err.stack).match(/(https?|file|ftp):\/\/[^)\n]+/g);
if (matches) {
return getBaseURL(matches[0]);
}
}
return '/';
}
function getBaseURL(url) {
return ('' + url).replace(/^((?:https?|file|ftp):\/\/.+)\/[^/]+$/, '$1') + '/';
}
exports.getBundleURL = getBundleURLCached;
exports.getBaseURL = getBaseURL;
},{}],"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/bundle-loader.js":[function(require,module,exports) {
var getBundleURL = require('./bundle-url').getBundleURL;
function loadBundlesLazy(bundles) {
if (!Array.isArray(bundles)) {
bundles = [bundles];
}
var id = bundles[bundles.length - 1];
try {
return Promise.resolve(require(id));
} catch (err) {
if (err.code === 'MODULE_NOT_FOUND') {
return new LazyPromise(function (resolve, reject) {
loadBundles(bundles.slice(0, -1)).then(function () {
return require(id);
}).then(resolve, reject);
});
}
throw err;
}
}
function loadBundles(bundles) {
return Promise.all(bundles.map(loadBundle));
}
var bundleLoaders = {};
function registerBundleLoader(type, loader) {
bundleLoaders[type] = loader;
}
module.exports = exports = loadBundlesLazy;
exports.load = loadBundles;
exports.register = registerBundleLoader;
var bundles = {};
function loadBundle(bundle) {
var id;
if (Array.isArray(bundle)) {
id = bundle[1];
bundle = bundle[0];
}
if (bundles[bundle]) {
return bundles[bundle];
}
var type = (bundle.substring(bundle.lastIndexOf('.') + 1, bundle.length) || bundle).toLowerCase();
var bundleLoader = bundleLoaders[type];
if (bundleLoader) {
return bundles[bundle] = bundleLoader(getBundleURL() + bundle).then(function (resolved) {
if (resolved) {
module.bundle.register(id, resolved);
}
return resolved;
});
}
}
function LazyPromise(executor) {
this.executor = executor;
this.promise = null;
}
LazyPromise.prototype.then = function (onSuccess, onError) {
if (this.promise === null) this.promise = new Promise(this.executor);
return this.promise.then(onSuccess, onError);
};
LazyPromise.prototype.catch = function (onError) {
if (this.promise === null) this.promise = new Promise(this.executor);
return this.promise.catch(onError);
};
},{"./bundle-url":"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/bundle-url.js"}],"../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/loaders/browser/js-loader.js":[function(require,module,exports) {
module.exports = function loadJSBundle(bundle) {
return new Promise(function (resolve, reject) {
var script = document.createElement('script');
script.async = true;
script.type = 'text/javascript';
script.charset = 'utf-8';
script.src = bundle;
script.onerror = function (e) {
script.onerror = script.onload = null;
reject(e);
};
script.onload = function () {
script.onerror = script.onload = null;
resolve();
};
document.getElementsByTagName('head')[0].appendChild(script);
});
};
},{}],0:[function(require,module,exports) {
var b=require("../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/bundle-loader.js");b.register("js",require("../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/loaders/browser/js-loader.js"));b.load([]);
},{}]},{},["../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/hmr-runtime.js",0], null)

1
website/dist/website.9ad09f98.map vendored Normal file
View File

@ -0,0 +1 @@
{"version":3,"sources":["../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/bundle-url.js","../../../../../../../../../../usr/local/lib/node_modules/parcel-bundler/src/builtins/css-loader.js"],"names":["bundleURL","getBundleURLCached","getBundleURL","Error","err","matches","stack","match","getBaseURL","url","replace","exports","bundle","require","updateLink","link","newLink","cloneNode","onload","remove","href","split","Date","now","parentNode","insertBefore","nextSibling","cssTimeout","reloadCSS","setTimeout","links","document","querySelectorAll","i","length","module"],"mappings":"AAAA,ACAA,IDAIA,ACAAY,MAAM,GDAG,ACAAC,GDAG,IAAhB,ACAoB,CAAC,cAAD,CAApB;;ADCA,ACCA,SDDSZ,ACCAa,UAAT,CAAoBC,IAApB,EAA0B,CDD1B,GAA8B;AAC5B,ACCA,MDDI,ACCAC,CDDChB,MCCM,GDDX,ACCce,EDDE,ECCE,CAACE,SAAL,EAAd;ADAEjB,IAAAA,SAAS,GAAGE,YAAY,EAAxB;AACD,ACADc,EAAAA,OAAO,CAACE,MAAR,GAAiB,YAAY;AAC3BH,IAAAA,IAAI,CAACI,MAAL;ADCF,ACAC,GAFD,MDEOnB,SAAP;AACD;ACACgB,EAAAA,OAAO,CAACI,IAAR,GAAeL,IAAI,CAACK,IAAL,CAAUC,KAAV,CAAgB,GAAhB,EAAqB,CAArB,IAA0B,GAA1B,GAAgCC,IAAI,CAACC,GAAL,EAA/C;ADEF,ACDER,EAAAA,IAAI,CAACS,EDCEtB,QCDP,CAAgBuB,GDClB,GAAwB,MCDtB,CAA6BT,OAA7B,EAAsCD,IAAI,CAACW,WAA3C;ADEA,ACDD;ADEC,MAAI;AACF,ACDJ,IAAIC,MDCM,IAAIxB,ACDA,GAAG,EDCP,EAAN,ACDJ;ADEG,GAFD,CAEE,OAAOC,GAAP,EAAY;AACZ,ACFJ,QDEQC,CCFCuB,MDEM,GAAG,ACFlB,CDEmB,ECFE,GDEGxB,GAAG,CAACE,KAAV,EAAiBC,KAAjB,CAAuB,gCAAvB,CAAd;ACDF,MAAIoB,UAAJ,EAAgB;ADEd,ACDA,QDCItB,OAAJ,EAAa;AACX,ACDH,aDCUG,UAAU,CAACH,OAAO,CAAC,CAAD,CAAR,CAAjB;AACD;AACF,ACDDsB,EAAAA,UAAU,GAAGE,UAAU,CAAC,YAAY;AAClC,QAAIC,KAAK,GAAGC,QAAQ,CAACC,gBAAT,CAA0B,wBAA1B,CAAZ;ADEF,SAAO,GAAP;AACD,ACFG,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,KAAK,CAACI,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;AACrC,UAAIrB,MAAM,CAACJ,UAAP,CAAkBsB,KAAK,CAACG,CAAD,CAAL,CAASb,IAA3B,MAAqCR,MAAM,CAACV,YAAP,EAAzC,EAAgE;ADGtE,ACFQY,QAAAA,CDECN,SCFS,CDElB,ACFmBsB,CDECrB,GAApB,CCFwB,CDEC,ACFAwB,CAAD,CAAN,CAAV;ADGN,ACFK,SDEE,CAAC,KAAKxB,GAAN,EAAWC,OAAX,CAAmB,uCAAnB,EAA4D,IAA5D,IAAoE,GAA3E;AACD,ACFI;;ADILC,ACFIgB,IAAAA,GDEG,CAACzB,MCFM,GAAG,GDEjB,CCFI,EDEmBD,kBAAvB;AACAU,ACFG,GATsB,EASpB,EDEE,ACXkB,CDWjBH,ACXN,UDWF,GAAqBA,UAArB;ACDC;;AAED2B,MAAM,CAACxB,OAAP,GAAiBiB,SAAjB","file":"website.9ad09f98.map","sourceRoot":"..","sourcesContent":["var bundleURL = null;\nfunction getBundleURLCached() {\n if (!bundleURL) {\n bundleURL = getBundleURL();\n }\n\n return bundleURL;\n}\n\nfunction getBundleURL() {\n // Attempt to find the URL of the current script and use that as the base URL\n try {\n throw new Error;\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp):\\/\\/[^)\\n]+/g);\n if (matches) {\n return getBaseURL(matches[0]);\n }\n }\n\n return '/';\n}\n\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp):\\/\\/.+)\\/[^/]+$/, '$1') + '/';\n}\n\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\n","var bundle = require('./bundle-url');\n\nfunction updateLink(link) {\n var newLink = link.cloneNode();\n newLink.onload = function () {\n link.remove();\n };\n newLink.href = link.href.split('?')[0] + '?' + Date.now();\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\n\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout) {\n return;\n }\n\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n if (bundle.getBaseURL(links[i].href) === bundle.getBundleURL()) {\n updateLink(links[i]);\n }\n }\n\n cssTimeout = null;\n }, 50);\n}\n\nmodule.exports = reloadCSS;\n"]}

28
website/dist/website.ac9fcc82.js vendored Normal file

File diff suppressed because one or more lines are too long

1
website/dist/website.ac9fcc82.map vendored Normal file

File diff suppressed because one or more lines are too long

25172
website/dist/website.e31bb0bc.js vendored Normal file

File diff suppressed because it is too large Load Diff

1
website/dist/website.e31bb0bc.map vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -352,7 +352,7 @@
<div class="row">
<p>
Copyright Pat Johnson &copy; 2018 (MIT). All rights reserved.<br /> Firefox is a registered trademark of the Mozilla Foundation.<br /> CodeMirror Text Editor, ShadowFox Theme Copyright &copy; 2017 (MIT).
</p>
</p><a href="no_empty_iframes_testpage.html"></a>
</div>
</footer>
<script src="index.js"></script>

Binary file not shown.

View File

@ -0,0 +1,13 @@
<h1 id="no-empty-iframes">No Empty iframes</h1>
<h2 id="what-it-does">What it does</h2>
<p>No Empty iframes adds a blank <code>div</code> to any iframes that have an empty <code>body</code>.</p>
<h2 id="that-sounds-uselesswhats-the-point">That sounds useless…whats the point?</h2>
<p><a href="https://github.com/overdodactyl/ShadowFox">ShadowFox</a> utilizes <code>userContent.css</code> and <code>userChrome.css</code> to create a universal dark theme for Firefox. In part, this means styling <code>about:blank</code>. A complication of this is that <code>about:blank</code> is also used for anonymous frames on webpages. Generally, iframes will contain content, making the following css rule specific enough:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode css"><code class="sourceCode css"><a class="sourceLine" id="cb1-1" data-line-number="1">html &gt; body<span class="in">:empty</span> {</a>
<a class="sourceLine" id="cb1-2" data-line-number="2"> <span class="kw">background-color</span>: var(--in-content-page-background)<span class="at">!important</span>;</a>
<a class="sourceLine" id="cb1-3" data-line-number="3"> <span class="kw">margin</span>: <span class="dv">0</span><span class="at">!important</span></a>
<a class="sourceLine" id="cb1-4" data-line-number="4">}</a></code></pre></div>
<p>Some pages, however, have empty iframes that cause readability issues (see <a href="https://github.com/overdodactyl/ShadowFox/issues/222">#222</a>).</p>
<p>This extension injects an empty div into such iframes, allowing the rule above to work.</p>
<h2 id="better-approaches">Better approaches?</h2>
<p>If anyone has a better approach/workaround for this problem, I would appreciate any suggestions.</p>

View File

@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="ShadowFox is a universal dark theme for Firefox.">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="index.css">
<title>ShadowFox</title>
<link rel="apple-touch-icon" sizes="180x180" href="resources/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="resources/favicons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="resources/favicons/favicon-16x16.png">
<link rel="manifest" href="resources/favicons/site.webmanifest">
<link rel="mask-icon" href="resources/favicons/safari-pinned-tab.svg" color="#9440c1">
<link rel="shortcut icon" href="resources/favicons/favicon.ico">
<meta name="msapplication-TileColor" content="#9440c1">
<meta name="msapplication-config" content="resources/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
</head>
<style>
iframe {
background-color: #5e7651;
border: none;
}
.ion-ios-home {
padding: 10px 0 0 10px;
font-size: 250%;
}
section {
padding: 0 0 80px 0;
}
.CodeMirror {
max-width: 70%;
margin-left: 15%;
}
</style>
<body>
<div class="row">
<a href="."><i class="ion-ios-home icon-big"></i></a>
</div>
<section>
<div class="row">
<h2>No Empty iframes</h2><br>
<p class="long-copy">
ShadowFox styles <code>about:blank</code> in order to maintain a universal dark theme. An unfortunate consequence of this is that empty iframes on webpages are unintentionally styled (see <a href="https://github.com/overdodactyl/ShadowFox/issues/222">here</a>). No Empty iframes is a simple extension available on <a href="https://addons.mozilla.org/en-US/firefox/addon/no-empty-iframes/">AMO</a> that solves this problem by adding a content-less <code>div</code> to the body of any empty <code>iframe</code>.<br><br>
Below is a simple test for No Empty iframes. The first iframe has no content, and the second does. Both iframes should have a green background, but with just ShadowFox installed, you will notice the first is grey.<br><br>
<b>With No Empty iframes installed (or ShadowFox uninstalled), both boxes should be green.</b> <br><br><br>
</p>
<center>
<iframe id="iframe_empty" src="about:blank"></iframe>
<iframe id="iframe_content" src="about:blank"></iframe>
</center>
</div>
</section>
<section>
<div class="row">
<h2>Alternatives</h2>
<p class="long-copy">
No Empty iframes is very simple extension, and the following code could be easily be applied via an extension like <a href="https://addons.mozilla.org/en-US/firefox/addon/violentmonkey/">Violentmonkey</a>.<br><br><br>
</p>
<textarea class="codemirror-textarea" id="iframes_test">// ==UserScript==
// @name No Empty iframes
// @grant none
// ==/UserScript==
window.onload = function () {
var frames = document.getElementsByTagName("iframe");
for (var i = 0; i < frames.length; i++) {
var doc = frames[i].contentWindow.document;
var elemDiv = document.createElement('div');
doc.body.appendChild(elemDiv);
}
}
</textarea>
</div>
</section>
<footer>
<div class="row">
<div class="col span-1-of-2">
<ul class="footer-nav">
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/no-empty-iframes/">Download No Empty iframes</a></li>
</ul>
</div>
<div class="col span-1-of-2">
<ul class="social-links">
<li><a href="https://github.com/overdodactyl/ShadowFox/"><i class="ion-social-github"></i></a></li>
<li><a href="https://www.reddit.com/r/ShadowFoxCSS/"><i class="ion-social-reddit"></i></a></li>
<li><a href="https://join.slack.com/t/shadowfox-workspace/shared_invite/enQtMzI5Nzk5OTk1MjcxLThkMDgwOGE5ZDY1MDUyNjIwNWQ2MTlmMjEwZTJiZmZjYTUxODM4ZTRkNzhiNGRhZTFhMjdjMTFjMTQ3YjZjYzU"><i class="ion-pound"></i></a></li>
</ul>
</div>
</div>
<div class="row">
<p>
Copyright Pat Johnson &copy; 2018 (MIT). All rights reserved.<br /> Firefox is a registered trademark of the Mozilla Foundation.<br />
</p>
</div>
</footer>
<script src="resources/js/testpage.js"></script>
</body>
</html>

View File

@ -159,6 +159,7 @@ var readOnlyColors = CodeMirror.fromTextArea(code, {
readOnly: true
});
$(document).on('click', '.btn-insert-text', function() {
var uct = "/* GPL-3.9 Copyright (C) 2007 Timvde/UserChrome-Tweaks; Code pulled from https://github.com/Timvde/UserChrome-Tweaks */"
var dict = {

View File

@ -0,0 +1,18 @@
window.jQuery = window.$ = require("jquery");
var CodeMirror = require('codemirror');
require('codemirror/mode/javascript/javascript.js');
// Insert content into second iframe
var doc = document.getElementById('iframe_content').contentWindow.document;
doc.open();
doc.write('Hello World');
doc.close();
// Codemirror
var code = $('.codemirror-textarea')[0];
var iframes_test = CodeMirror.fromTextArea(code, {
lineNumbers: true,
mode: "javascript",
theme: "shadowfox",
readOnly: true
});

View File

@ -34,7 +34,8 @@
.ion-social-github:before,
.ion-social-reddit:before,
.ion-pound:before,
.ion-navicon-round:before {
.ion-navicon-round:before,
.ion-ios-home:before{
display: inline-block;
font-family: "Ionicons";
speak: none;
@ -65,3 +66,4 @@
.ion-social-reddit:before{content:"\f23b"}
.ion-pound:before{content:"\f219"}
.ion-navicon-round:before{content:"\f20d"}
.ion-ios-home:before{content:"\f448"}