no empty iframes test page
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 3.9 KiB |
|
@ -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>
|
After Width: | Height: | Size: 793 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 15 KiB |
|
@ -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)
|
|
@ -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"]}
|
After Width: | Height: | Size: 326 KiB |
|
@ -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 © 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>
|
|
@ -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 |
|
@ -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"}
|
After Width: | Height: | Size: 105 KiB |
|
@ -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 © 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>
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":[],"names":[],"mappings":"","file":"website.121ad5a8.map","sourceRoot":".."}
|
|
@ -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)
|
|
@ -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"]}
|
|
@ -352,7 +352,7 @@
|
|||
<div class="row">
|
||||
<p>
|
||||
Copyright Pat Johnson © 2018 (MIT). All rights reserved.<br /> Firefox is a registered trademark of the Mozilla Foundation.<br /> CodeMirror Text Editor, ShadowFox Theme Copyright © 2017 (MIT).
|
||||
</p>
|
||||
</p><a href="no_empty_iframes_testpage.html"></a>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="index.js"></script>
|
||||
|
|
|
@ -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…what’s 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 > 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>
|
|
@ -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 © 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>
|
||||
|
||||
|
|
@ -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 = {
|
||||
|
|
|
@ -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
|
||||
});
|
|
@ -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"}
|
||||
|
|