oops already had dino + added google analytics (god i wanna kms so badly i hope this doesnt break)

This commit is contained in:
Sky 2023-05-24 20:51:38 -04:00
parent 347394145c
commit 22ad8c8e57
109 changed files with 749 additions and 7664 deletions

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<title>1v1.LOL</title>
<script src="js/googleAnalytics.js"></script>

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Achievement Unlocked</title>
<style>html{background-color:#000;}</style>

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Achievement Unlocked 2</title>
<style>html{background-color:#000;}</style>

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>A Dance of Fire And Ice</title>

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Avalanche</title>
<style>html{background-color:#000;}</style>

View File

@ -1,15 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no" />
<link rel="stylesheet" href="assets/css/app.css" type="text/css" />
<title>Basketball Stars | 3kh0</title>
<title>Basketball Stars</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<script src="/js/main.js"></script>
<body>
<div id="content"></div>
<div id="orientation"></div>

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<style>@import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap');</style>
<link rel="stylesheet" href="style.css">
<title>Bookmarklets | e-gamepass</title>

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Bloons Tower Defense 3</title>
<style>html{background-color:#000;}</style>

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Cell Machine</title>

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html id="fpdoodle" lang="en-NL">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="width=device-width,maximum-scale=1.0,user-scalable=no" name="viewport">
<link rel="icon" href="./favicon.ico" type="image/x-icon"/>
@ -111,8 +122,7 @@
(function () {
google.hs = {h: true, peh: true, sie: false};
})();</script>
<title>Champion Island | 3kh0</title>
<!--<script src="/js/main.js"></script> This was removed cuz it breaks stuff -->
<title>Champion Island</title>
<script type="text/javascript" charset="UTF-8" src="kitsune_compiled_deferred_module.js" nonce=""></script>
</head>
<body data-new-gr-c-s-check-loaded="14.1022.0" data-gr-ext-installed="" style="margin: 0; width: 2458px;">

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<style>@import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap');</style>
<link rel="stylesheet" href="style.css">
<title>Changelog | e-gamepass</title>
@ -18,7 +29,7 @@
<div class="title"><img src="favicon.png" style="width:4%;"><h2 style="font-size:50px">e-gamepass</h2></div>
<h2>v. 2023.05.24</h2>
<p>Added 4 games (Slope, This is the only level, chrome dino, achievement unlocked 2)<br>Fixed web analytics (only affects me lol)</p>
<p>Added 4 games (Slope, This is the only level, achievement unlocked 2)<br>Fixed web analytics + google analytics (only affects me lol)</p>
<h2>v. 2023.05.23</h2>
<p>Major update?!<br>Added saves<br>Complete backend remake<br>Fixed flash pages to make them full screen automatically<br>Added 2 games (Cell Machine and Death Run 3D)<br>Added more bookmarklets<br>Tetris Update!</p>
<a href="index.html" style="font-size: 30px; color:#3b76f5">Back to home</a>

View File

@ -2,6 +2,17 @@
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="UTF-8">
<link rel="stylesheet" href="lib/chessboardjs/css/chessboard-0.3.0.css">
<link rel="stylesheet" href="style.css">

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Chibi Knight</title>
<style>html{background-color:#000;}</style>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,37 +0,0 @@
{
"name": "Chrome Dino",
"short_name": "Chrome Dino",
"description": "Dino game. A pixelated dinosaur dodges cacti and pterodactyls as it runs across a desolate landscape.",
"version": "2.0",
"start_url": "index.html",
"display": "fullscreen",
"orientation": "any",
"background_color": "#ffffff",
"icons": [
{
"src": "icons/icon-16.png",
"sizes": "16x16",
"type": "image/png"
},
{
"src": "icons/icon-32.png",
"sizes": "32x32",
"type": "image/png"
},
{
"src": "icons/icon-114.png",
"sizes": "114x114",
"type": "image/png"
},
{
"src": "icons/icon-128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "icons/icon-256.png",
"sizes": "256x256",
"type": "image/png"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 996 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":2.0,"fileList":["1_hurdling.html","2_gymnastics.html","3_surfing.html","4_swimming.html","5_equestrian.html","appmanifest.json","index.html","register-sw.js","sw.js","icons/icon-114.png","icons/icon-128.png","icons/icon-16.png","icons/icon-256.png","icons/icon-32.png","images/default_100_percent/offline/100-disabled.png","images/default_100_percent/offline/100-error-offline.png","images/default_100_percent/offline/100-offline-sprite.png","images/default_100_percent/offline/100-olympic-firemedal-sprite.png","images/default_100_percent/offline/100-olympics-equestrian-sprite.png","images/default_100_percent/offline/100-olympics-gymnastics-sprite.png","images/default_100_percent/offline/100-olympics-hurdling-sprite.png","images/default_100_percent/offline/100-olympics-surfing-sprite.png","images/default_100_percent/offline/100-olympics-swimming-sprite.png","images/default_200_percent/offline/200-disabled.png","images/default_200_percent/offline/200-error-offline.png","images/default_200_percent/offline/200-offline-sprite.png","images/default_200_percent/offline/200-olympic-firemedal-sprite.png","images/default_200_percent/offline/200-olympics-equestrian-sprite.png","images/default_200_percent/offline/200-olympics-gymnastics-sprite.png","images/default_200_percent/offline/200-olympics-hurdling-sprite.png","images/default_200_percent/offline/200-olympics-surfing-sprite.png","images/default_200_percent/offline/200-olympics-swimming-sprite.png","scripts/load_time_data.js","scripts/neterror.slim.js","scripts/offline.js","scripts/offline-sprite-definitions.js","scripts/strings.js","styles/interstitial_common.css","styles/interstitial_core.css","styles/neterror.css"]}

View File

@ -1,3 +0,0 @@
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js');
}

View File

@ -1,215 +0,0 @@
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview This file defines a singleton which provides access to all data
* that is available as soon as the page's resources are loaded (before DOM
* content has finished loading). This data includes both localized strings and
* any data that is important to have ready from a very early stage (e.g. things
* that must be displayed right away).
*
* Note that loadTimeData is not guaranteed to be consistent between page
* refreshes (https://crbug.com/740629) and should not contain values that might
* change if the page is re-opened later.
*/
/** @type {!LoadTimeData} */
// eslint-disable-next-line no-var
var loadTimeData;
class LoadTimeData {
constructor() {
/** @type {Object} */
this.data_;
}
/**
* Sets the backing object.
*
* Note that there is no getter for |data_| to discourage abuse of the form:
*
* var value = loadTimeData.data()['key'];
*
* @param {Object} value The de-serialized page data.
*/
set data(value) {
expect(!this.data_, 'Re-setting data.');
this.data_ = value;
}
/**
* @param {string} id An ID of a value that might exist.
* @return {boolean} True if |id| is a key in the dictionary.
*/
valueExists(id) {
return id in this.data_;
}
/**
* Fetches a value, expecting that it exists.
* @param {string} id The key that identifies the desired value.
* @return {*} The corresponding value.
*/
getValue(id) {
expect(this.data_, 'No data. Did you remember to include strings.js?');
const value = this.data_[id];
expect(typeof value !== 'undefined', 'Could not find value for ' + id);
return value;
}
/**
* As above, but also makes sure that the value is a string.
* @param {string} id The key that identifies the desired string.
* @return {string} The corresponding string value.
*/
getString(id) {
const value = this.getValue(id);
expectIsType(id, value, 'string');
return /** @type {string} */ (value);
}
/**
* Returns a formatted localized string where $1 to $9 are replaced by the
* second to the tenth argument.
* @param {string} id The ID of the string we want.
* @param {...(string|number)} var_args The extra values to include in the
* formatted output.
* @return {string} The formatted string.
*/
getStringF(id, var_args) {
const value = this.getString(id);
if (!value) {
return '';
}
const args = Array.prototype.slice.call(arguments);
args[0] = value;
return this.substituteString.apply(this, args);
}
/**
* Returns a formatted localized string where $1 to $9 are replaced by the
* second to the tenth argument. Any standalone $ signs must be escaped as
* $$.
* @param {string} label The label to substitute through.
* This is not an resource ID.
* @param {...(string|number)} var_args The extra values to include in the
* formatted output.
* @return {string} The formatted string.
*/
substituteString(label, var_args) {
const varArgs = arguments;
return label.replace(/\$(.|$|\n)/g, function(m) {
expect(m.match(/\$[$1-9]/), 'Unescaped $ found in localized string.');
return m === '$$' ? '$' : varArgs[m[1]];
});
}
/**
* Returns a formatted string where $1 to $9 are replaced by the second to
* tenth argument, split apart into a list of pieces describing how the
* substitution was performed. Any standalone $ signs must be escaped as $$.
* @param {string} label A localized string to substitute through.
* This is not an resource ID.
* @param {...(string|number)} var_args The extra values to include in the
* formatted output.
* @return {!Array<!{value: string, arg: (null|string)}>} The formatted
* string pieces.
*/
getSubstitutedStringPieces(label, var_args) {
const varArgs = arguments;
// Split the string by separately matching all occurrences of $1-9 and of
// non $1-9 pieces.
const pieces = (label.match(/(\$[1-9])|(([^$]|\$([^1-9]|$))+)/g) ||
[]).map(function(p) {
// Pieces that are not $1-9 should be returned after replacing $$
// with $.
if (!p.match(/^\$[1-9]$/)) {
expect(
(p.match(/\$/g) || []).length % 2 === 0,
'Unescaped $ found in localized string.');
return {value: p.replace(/\$\$/g, '$'), arg: null};
}
// Otherwise, return the substitution value.
return {value: varArgs[p[1]], arg: p};
});
return pieces;
}
/**
* As above, but also makes sure that the value is a boolean.
* @param {string} id The key that identifies the desired boolean.
* @return {boolean} The corresponding boolean value.
*/
getBoolean(id) {
const value = this.getValue(id);
expectIsType(id, value, 'boolean');
return /** @type {boolean} */ (value);
}
/**
* As above, but also makes sure that the value is an integer.
* @param {string} id The key that identifies the desired number.
* @return {number} The corresponding number value.
*/
getInteger(id) {
const value = this.getValue(id);
expectIsType(id, value, 'number');
expect(value === Math.floor(value), 'Number isn\'t integer: ' + value);
return /** @type {number} */ (value);
}
/**
* Override values in loadTimeData with the values found in |replacements|.
* @param {Object} replacements The dictionary object of keys to replace.
*/
overrideValues(replacements) {
expect(
typeof replacements === 'object',
'Replacements must be a dictionary object.');
for (const key in replacements) {
this.data_[key] = replacements[key];
}
}
/** Reset loadTimeData's data to empty. Should only be used in tests. */
resetForTesting() {
this.data_ = {};
}
}
/**
* Checks condition, throws error message if expectation fails.
* @param {*} condition The condition to check for truthiness.
* @param {string} message The message to display if the check fails.
*/
function expect(condition, message) {
if (!condition) {
throw new Error(
'Unexpected condition on ' + document.location.href + ': ' + message);
}
}
/**
* Checks that the given value has the given type.
* @param {string} id The id of the value (only used for error message).
* @param {*} value The value to check the type on.
* @param {string} type The type we expect |value| to be.
*/
function expectIsType(id, value, type) {
expect(
typeof value === type, '[' + value + '] (' + id + ') is not a ' + type);
}
expect(!loadTimeData, 'should only include this file once');
loadTimeData = new LoadTimeData;
// Expose |loadTimeData| directly on |window|, since within a JS module the
// scope is local and not all files have been updated to import the exported
// |loadTimeData| explicitly.
window.loadTimeData = loadTimeData;
// console.warn('crbug/1173575, non-JS module files deprecated.');

View File

@ -1,39 +0,0 @@
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
const HIDDEN_CLASS = 'hidden';
// Subframes use a different layout but the same html file. This is to make it
// easier to support platforms that load the error page via different
// mechanisms (Currently just iOS). We also use the subframe style for portals
// as they are embedded like subframes and can't be interacted with by the user.
let isSubFrame = false;
if (window.top.location !== window.location || window.portalHost) {
document.documentElement.setAttribute('subframe', '');
isSubFrame = true;
}
// Adds an icon class to the list and removes classes previously set.
function updateIconClass(newClass) {
const frameSelector = isSubFrame ? '#sub-frame-error' : '#main-frame-error';
const iconEl = document.querySelector(frameSelector + ' .icon');
if (iconEl.classList.contains(newClass)) {
return;
}
iconEl.className = 'icon ' + newClass;
}
function onDocumentLoad() {
const iconClass = loadTimeData.valueExists('iconClass') &&
loadTimeData.getValue('iconClass');
updateIconClass(iconClass);
if (!isSubFrame && iconClass === 'icon-offline') {
document.documentElement.classList.add('offline');
new Runner('.interstitial-wrapper');
}
}
document.addEventListener('DOMContentLoaded', onDocumentLoad);

View File

@ -1,687 +0,0 @@
// Copyright (c) 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/* @const */
const GAME_TYPE = ['type_1', 'type_2', 'type_3', 'type_4', 'type_5'];
/**
* Obstacle definitions.
* minGap: minimum pixel space between obstacles.
* multipleSpeed: Speed at which multiples are allowed.
* speedOffset: speed faster / slower than the horizon.
* minSpeed: Minimum speed which the obstacle can make an appearance.
*
* @typedef {{
* type: string,
* width: number,
* height: number,
* yPos: number,
* multipleSpeed: number,
* minGap: number,
* minSpeed: number,
* collisionBoxes: Array<CollisionBox>,
* }}
*/
let ObstacleType;
/**
* T-Rex runner sprite definitions.
*/
Runner.spriteDefinitionByType = {
original: {
LDPI: {
BACKGROUND_EL: {x: 86, y: 2},
CACTUS_LARGE: {x: 332, y: 2},
CACTUS_SMALL: {x: 228, y: 2},
OBSTACLE_2: {x: 332, y: 2},
OBSTACLE: {x: 228, y: 2},
CLOUD: {x: 86, y: 2},
HORIZON: {x: 2, y: 54},
MOON: {x: 484, y: 2},
PTERODACTYL: {x: 134, y: 2},
RESTART: {x: 2, y: 68},
TEXT_SPRITE: {x: 655, y: 2},
TREX: {x: 848, y: 2},
STAR: {x: 645, y: 2},
COLLECTABLE: {x: 2, y: 2},
ALT_GAME_END: {x: 121, y: 2}
},
HDPI: {
BACKGROUND_EL: {x: 166, y: 2},
CACTUS_LARGE: {x: 652, y: 2},
CACTUS_SMALL: {x: 446, y: 2},
OBSTACLE_2: {x: 652, y: 2},
OBSTACLE: {x: 446, y: 2},
CLOUD: {x: 166, y: 2},
HORIZON: {x: 2, y: 104},
MOON: {x: 954, y: 2},
PTERODACTYL: {x: 260, y: 2},
RESTART: {x: 2, y: 130},
TEXT_SPRITE: {x: 1294, y: 2},
TREX: {x: 1678, y: 2},
STAR: {x: 1276, y: 2},
COLLECTABLE: {x: 4, y: 4},
ALT_GAME_END: {x: 242, y: 4}
},
MAX_GAP_COEFFICIENT: 1.5,
MAX_OBSTACLE_LENGTH: 3,
HAS_CLOUDS: 1,
BOTTOM_PAD: 10,
TREX: {
WAITING_1: {x: 44, w: 44, h: 47, xOffset: 0},
WAITING_2: {x: 0, w: 44, h: 47, xOffset: 0},
RUNNING_1: {x: 88, w: 44, h: 47, xOffset: 0},
RUNNING_2: {x: 132, w: 44, h: 47, xOffset: 0},
JUMPING: {x: 0, w: 44, h: 47, xOffset: 0},
CRASHED: {x: 220, w: 44, h: 47, xOffset: 0},
COLLISION_BOXES: [
new CollisionBox(22, 0, 17, 16), new CollisionBox(1, 18, 30, 9),
new CollisionBox(10, 35, 14, 8), new CollisionBox(1, 24, 29, 5),
new CollisionBox(5, 30, 21, 4), new CollisionBox(9, 34, 15, 4)
]
},
/** @type {Array<ObstacleType>} */
OBSTACLES: [
{
type: 'CACTUS_SMALL',
width: 17,
height: 35,
yPos: 105,
multipleSpeed: 4,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 7, 5, 27), new CollisionBox(4, 0, 6, 34),
new CollisionBox(10, 4, 7, 14)
]
},
{
type: 'CACTUS_LARGE',
width: 25,
height: 50,
yPos: 90,
multipleSpeed: 7,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 12, 7, 38), new CollisionBox(8, 0, 7, 49),
new CollisionBox(13, 10, 10, 38)
]
},
{
type: 'PTERODACTYL',
width: 46,
height: 40,
yPos: [100, 75, 50], // Variable height.
yPosMobile: [100, 50], // Variable height mobile.
multipleSpeed: 999,
minSpeed: 8.5,
minGap: 150,
collisionBoxes: [
new CollisionBox(15, 15, 16, 5), new CollisionBox(18, 21, 24, 6),
new CollisionBox(2, 14, 4, 3), new CollisionBox(6, 10, 4, 7),
new CollisionBox(10, 8, 6, 9)
],
numFrames: 2,
frameRate: 1000 / 6,
speedOffset: .8
},
{
type: 'COLLECTABLE',
width: 12,
height: 38,
yPos: 90,
multipleSpeed: 999,
minGap: 999,
minSpeed: 0,
collisionBoxes: [new CollisionBox(0, 0, 12, 38)]
}
],
BACKGROUND_EL: {
'CLOUD': {
HEIGHT: 14,
MAX_CLOUD_GAP: 400,
MAX_SKY_LEVEL: 30,
MIN_CLOUD_GAP: 100,
MIN_SKY_LEVEL: 71,
OFFSET: 4,
WIDTH: 46,
X_POS: 1,
Y_POS: 120
}
},
BACKGROUND_EL_CONFIG: {
MAX_BG_ELS: 1,
MAX_GAP: 400,
MIN_GAP: 100,
POS: 0,
SPEED: 0.5,
Y_POS: 125
},
LINES: [
{SOURCE_X: 2, SOURCE_Y: 52, WIDTH: 600, HEIGHT: 12, YPOS: 127},
],
ALT_GAME_END_CONFIG: {
WIDTH: 15,
HEIGHT: 17,
X_OFFSET: 0,
Y_OFFSET: 0,
},
ALT_GAME_OVER_TEXT_CONFIG: {
TEXT_X: 14,
TEXT_Y: 2,
TEXT_WIDTH: 108,
TEXT_HEIGHT: 15,
FLASH_DURATION: 1500
}
},
type_1: {
LDPI: {
OBSTACLE_1: {x: 631, y: 2},
OBSTACLE_2: {x: 656, y: 2},
OBSTACLE_3: {x: 697, y: 2},
OBSTACLE_4: {x: 754, y: 2},
OBSTACLE_5: {x: 781, y: 2},
OBSTACLE_6: {x: 826, y: 2},
BACKGROUND_EL: {x: 0, y: 120},
CLOUD: {x: 890, y: 2},
HORIZON: {x: 2, y: 54},
TREX: {x: 252, y: 2}
},
HDPI: {
OBSTACLE_1: {x: 1262, y: 2},
OBSTACLE_2: {x: 1312, y: 2},
OBSTACLE_3: {x: 1394, y: 2},
OBSTACLE_4: {x: 1508, y: 2},
OBSTACLE_5: {x: 1562, y: 2},
OBSTACLE_6: {x: 1652, y: 2},
BACKGROUND_EL: {x: 0, y: 240},
CLOUD: {x: 1780, y: 3},
HORIZON: {x: 4, y: 108},
TREX: {x: 504, y: 2}
},
ALT_GAME_END_CONFIG: {WIDTH: 15, HEIGHT: 17, X_OFFSET: 19, Y_OFFSET: 17},
MAX_GAP_COEFFICIENT: 0.56,
MAX_OBSTACLE_LENGTH: 1,
HAS_CLOUDS: 1,
BOTTOM_PAD: 10,
TREX: {
MAX_JUMP_HEIGHT: 50,
MIN_JUMP_HEIGHT: 50,
INITIAL_JUMP_VELOCITY: -10,
RUNNING_1: {x: 137, w: 44, h: 49, xOffset: 0},
RUNNING_2: {x: 183, w: 44, h: 47, xOffset: 0},
CRASHED: {x: 335, w: 44, h: 47, xOffset: 0},
JUMPING: {x: 230, w: 59, h: 49, xOffset: 6},
COLLISION_BOXES: [
new CollisionBox(22, 0, 17, 16), new CollisionBox(0, 16, 32, 9),
new CollisionBox(3, 24, 27, 6), new CollisionBox(5, 30, 21, 4)
]
},
OBSTACLES: [
{
type: 'OBSTACLE_1',
width: 24,
height: 60,
yPos: 106,
multipleSpeed: 4,
minGap: 70,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 0, 3, 26), new CollisionBox(3, 5, 8, 31),
new CollisionBox(11, 24, 11, 10)
]
},
{
type: 'OBSTACLE_2',
width: 40,
height: 60,
yPos: 106,
multipleSpeed: 4,
minGap: 90,
minSpeed: 5,
collisionBoxes: [
new CollisionBox(0, 0, 3, 26), new CollisionBox(3, 5, 24, 31),
new CollisionBox(27, 24, 11, 10)
]
},
{
type: 'OBSTACLE_3',
width: 57,
height: 60,
yPos: 106,
multipleSpeed: 4,
minGap: 100,
minSpeed: 7,
collisionBoxes: [
new CollisionBox(0, 0, 3, 26), new CollisionBox(3, 5, 40, 31),
new CollisionBox(27, 43, 11, 10)
]
},
{
type: 'OBSTACLE_4',
width: 27,
height: 44,
yPos: 102,
multipleSpeed: 7,
minGap: 110,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 0, 3, 26), new CollisionBox(3, 3, 8, 31),
new CollisionBox(11, 24, 11, 10)
]
},
{
type: 'OBSTACLE_5',
width: 45,
height: 44,
yPos: 102,
multipleSpeed: 7,
minGap: 120,
minSpeed: 7.5,
collisionBoxes: [
new CollisionBox(0, 0, 4, 26), new CollisionBox(4, 3, 26, 31),
new CollisionBox(30, 30, 12, 11)
]
},
{
type: 'OBSTACLE_6',
width: 63,
height: 44,
yPos: 102,
multipleSpeed: 7,
minGap: 140,
minSpeed: 7.5,
collisionBoxes: [
new CollisionBox(0, 0, 3, 26), new CollisionBox(4, 3, 44, 39),
new CollisionBox(48, 24, 12, 11)
]
}
],
BACKGROUND_EL: {
'BACKGROUND_0': {HEIGHT: 93, WIDTH: 423, Y_POS: 120, X_POS: 1, OFFSET: 4}
},
BACKGROUND_EL_CONFIG: {
MAX_BG_ELS: 1,
MAX_GAP: 600,
MIN_GAP: 600,
POS: 0,
SPEED: 0.2,
Y_POS: 125
},
LINES: [
{SOURCE_X: 2, SOURCE_Y: 54, WIDTH: 600, HEIGHT: 12, YPOS: 125},
{SOURCE_X: 2, SOURCE_Y: 84, WIDTH: 600, HEIGHT: 12, YPOS: 138}
]
},
type_2: {
LDPI: {
OBSTACLE_1: {x: 655, y: 2},
BACKGROUND_EL: {x: 0, y: 60},
CLOUD: {x: 963, y: 3},
HORIZON: {x: 2, y: 54},
TREX: {x: 252, y: 2}
},
HDPI: {
OBSTACLE_1: {x: 1310, y: 2},
BACKGROUND_EL: {x: 0, y: 120},
CLOUD: {x: 1926, y: 3},
HORIZON: {x: 4, y: 108},
TREX: {x: 504, y: 2},
},
ALT_GAME_END_CONFIG: {WIDTH: 15, HEIGHT: 17, X_OFFSET: 19, Y_OFFSET: 18},
MAX_GAP_COEFFICIENT: 0.56,
MAX_OBSTACLE_LENGTH: 1,
HAS_CLOUDS: 0,
BOTTOM_PAD: 10,
TREX: {
MAX_JUMP_HEIGHT: 30,
MIN_JUMP_HEIGHT: 30,
INITIAL_JUMP_VELOCITY: -19,
RUNNING_1: {x: 137, w: 44, h: 49, xOffset: 0},
RUNNING_2: {x: 183, w: 44, h: 49, xOffset: 0},
CRASHED: {x: 359, w: 44, h: 43, xOffset: 0},
JUMPING: {x: 228, w: 43, h: 44, xOffset: 2.5},
COLLISION_BOXES: [
new CollisionBox(22, 0, 17, 16), new CollisionBox(17, 37, 7, 7),
new CollisionBox(10, 17, 19, 20)
]
},
OBSTACLES: [{
type: 'OBSTACLE_1',
width: 54,
height: 54,
yPos: 90,
multipleSpeed: 4,
minGap: 70,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 8, 20, 43), new CollisionBox(21, 6, 8, 42),
new CollisionBox(32, 2, 18, 49)
]
}],
BACKGROUND_EL: {
'BACKGROUND_0': {HEIGHT: 120, WIDTH: 89, Y_POS: 40, X_POS: 1, OFFSET: 4},
'BACKGROUND_1':
{HEIGHT: 108, WIDTH: 130, Y_POS: 40, X_POS: 92, OFFSET: 4},
'BACKGROUND_2':
{HEIGHT: 28, WIDTH: 204, Y_POS: 40, X_POS: 223, OFFSET: 4},
},
BACKGROUND_EL_CONFIG: {
MAX_BG_ELS: 2,
MAX_GAP: 550,
MIN_GAP: 400,
POS: 0,
SPEED: 0.5,
Y_POS: 125
},
LINES: [{SOURCE_X: 2, SOURCE_Y: 54, WIDTH: 600, HEIGHT: 5, YPOS: 125}]
},
type_3: {
LDPI: {
OBSTACLE_1: {x: 611, y: 2},
OBSTACLE_2: {x: 634, y: 2},
OBSTACLE_3: {x: 671, y: 2},
OBSTACLE_4: {x: 722, y: 2},
OBSTACLE_5: {x: 762, y: 2},
OBSTACLE_6: {x: 806, y: 2},
BACKGROUND_EL: {x: 0, y: 65},
CLOUD: {x: 888, y: 2},
HORIZON: {x: 2, y: 58},
TREX: {x: 252, y: 2}
},
HDPI: {
OBSTACLE_1: {x: 1222, y: 2},
OBSTACLE_2: {x: 1268, y: 2},
OBSTACLE_3: {x: 1342, y: 2},
OBSTACLE_4: {x: 1444, y: 2},
OBSTACLE_5: {x: 1524, y: 2},
OBSTACLE_6: {x: 1612, y: 2},
BACKGROUND_EL: {x: 0, y: 130},
CLOUD: {x: 1776, y: 3},
HORIZON: {x: 4, y: 116},
TREX: {x: 504, y: 2}
},
ALT_GAME_END_CONFIG: {WIDTH: 15, HEIGHT: 17, X_OFFSET: 23, Y_OFFSET: 17},
MAX_GAP_COEFFICIENT: 0.56,
MAX_OBSTACLE_LENGTH: 1,
BOTTOM_PAD: 10,
HAS_CLOUDS: 1,
TREX: {
MAX_JUMP_HEIGHT: 45,
MIN_JUMP_HEIGHT: 30,
INITIAL_JUMP_VELOCITY: -10,
RUNNING_1: {x: 104, w: 51, h: 57, xOffset: 0},
RUNNING_2: {x: 156, w: 51, h: 57, xOffset: 0},
CRASHED: {x: 309, w: 51, h: 57, xOffset: 0},
JUMPING: {x: 208, w: 51, h: 57, xOffset: 0},
COLLISION_BOXES:
[new CollisionBox(28, 35, 19, 11), new CollisionBox(3, 44, 26, 4)]
},
OBSTACLES: [
{
type: 'OBSTACLE_1',
width: 24,
height: 18,
yPos: 117,
multipleSpeed: 4,
minGap: 50,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(11, 2, 3, 2), new CollisionBox(7, 4, 11, 10),
new CollisionBox(2, 9, 5, 6)
]
},
{
type: 'OBSTACLE_2',
width: 40,
height: 22,
yPos: 117,
multipleSpeed: 4,
minGap: 60,
minSpeed: 4.5,
collisionBoxes: [
new CollisionBox(11, 2, 3, 2), new CollisionBox(7, 5, 23, 10),
new CollisionBox(2, 9, 5, 6)
]
},
{
type: 'OBSTACLE_3',
width: 49,
height: 22,
yPos: 117,
multipleSpeed: 4,
minGap: 80,
minSpeed: 7,
collisionBoxes: [
new CollisionBox(11, 2, 3, 2), new CollisionBox(8, 5, 39, 10),
new CollisionBox(2, 9, 5, 6)
]
},
{
type: 'OBSTACLE_4',
width: 37,
height: 26,
yPos: 113,
multipleSpeed: 7,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(4, 16, 5, 8), new CollisionBox(9, 12, 7, 12),
new CollisionBox(16, 5, 10, 19)
]
},
{
type: 'OBSTACLE_5',
width: 45,
height: 30,
yPos: 113,
multipleSpeed: 7,
minGap: 120,
minSpeed: 5.5,
collisionBoxes: [
new CollisionBox(4, 16, 5, 8), new CollisionBox(9, 12, 7, 12),
new CollisionBox(16, 5, 10, 19), new CollisionBox(26, 14, 13, 11)
]
},
{
type: 'OBSTACLE_6',
width: 79,
height: 30,
yPos: 113,
multipleSpeed: 7,
minGap: 150,
minSpeed: 7,
collisionBoxes: [
new CollisionBox(4, 16, 5, 8), new CollisionBox(9, 12, 7, 12),
new CollisionBox(16, 5, 10, 19), new CollisionBox(26, 14, 13, 11),
new CollisionBox(40, 18, 10, 6), new CollisionBox(50, 12, 10, 12),
new CollisionBox(57, 5, 10, 19)
]
}
],
BACKGROUND_EL: {
'BACKGROUND_0': {
HEIGHT: 78,
OFFSET: 6,
WIDTH: 105,
X_POS: 425,
FIXED_X_POS: 0,
FIXED_Y_POS_1: 54,
FIXED_Y_POS_2: 51,
FIXED: true
}
},
BACKGROUND_EL_CONFIG: {
MAX_BG_ELS: 1,
MAX_GAP: 550,
MIN_GAP: 400,
POS: 0,
SPEED: 0.2,
Y_POS: 125,
MS_PER_FRAME: 250
},
LINES: [
{SOURCE_X: 2, SOURCE_Y: 58, WIDTH: 600, HEIGHT: 8, YPOS: 125},
]
},
type_4: {
LDPI: {
OBSTACLE_1: {x: 514, y: 2},
OBSTACLE_2: {x: 543, y: 2},
OBSTACLE_3: {x: 599, y: 2},
OBSTACLE_4: {x: 643, y: 2},
BACKGROUND_EL: {x: 811, y: 2},
CLOUD: {x: 888, y: 2},
WALL: {x: 2, y: 54},
HORIZON: {x: 2, y: 81},
TREX: {x: 252, y: 2}
},
HDPI: {
OBSTACLE_1: {x: 1028, y: 2},
OBSTACLE_2: {x: 1086, y: 2},
OBSTACLE_3: {x: 1198, y: 2},
OBSTACLE_4: {x: 1286, y: 2},
BACKGROUND_EL: {x: 1622, y: 4},
CLOUD: {x: 1776, y: 3},
WALL: {x: 2, y: 108},
HORIZON: {x: 4, y: 162},
TREX: {x: 504, y: 2}
},
ALT_GAME_END_CONFIG: {WIDTH: 15, HEIGHT: 17, X_OFFSET: 38, Y_OFFSET: 16},
MAX_GAP_COEFFICIENT: 0.56,
MAX_OBSTACLE_LENGTH: 1,
BOTTOM_PAD: 43,
HAS_CLOUDS: 0,
TREX: {
GRAVITY: 0.36,
MAX_JUMP_HEIGHT: 20,
MIN_JUMP_HEIGHT: 18,
INITIAL_JUMP_VELOCITY: -20,
INVERT_JUMP: 1,
RUNNING_1: {x: 0, w: 65, h: 30, xOffset: 0},
RUNNING_2: {x: 67, w: 65, h: 30, xOffset: 0},
CRASHED: {x: 196, w: 65, h: 30, xOffset: 0},
JUMPING: {x: 133.5, w: 65, h: 30, xOffset: 0},
COLLISION_BOXES: [
new CollisionBox(17, 4, 49, 9), new CollisionBox(20, 17, 23, 4),
new CollisionBox(19, 20, 10, 7), new CollisionBox(17, 13, 42, 4)
]
},
OBSTACLES: [
{
type: 'OBSTACLE_1',
width: 27,
height: 11,
yPos: 80,
multipleSpeed: 4,
minGap: 120,
minSpeed: 0,
collisionBoxes: [new CollisionBox(0, 2, 27, 8)]
},
{
type: 'OBSTACLE_2',
width: 54,
height: 11,
yPos: 80,
multipleSpeed: 4,
minGap: 140,
minSpeed: 7,
collisionBoxes: [new CollisionBox(0, 2, 52, 8)]
},
{
type: 'OBSTACLE_3',
width: 42,
height: 16,
yPos: 76,
multipleSpeed: 4,
minGap: 170,
minSpeed: 3,
collisionBoxes: [new CollisionBox(0, 2, 40, 14)]
}
],
BACKGROUND_EL_CONFIG: {
SPEED: 0.5,
POS: 0,
MAX_BG_ELS: 3,
MIN_GAP: 100,
MAX_GAP: 400,
Y_POS: 100
},
BACKGROUND_EL: {
'BACKGROUND_0':
{HEIGHT: 32, WIDTH: 30, Y_POS: 2, X_POS: 811, OFFSET: -65},
'BACKGROUND_1':
{HEIGHT: 37, WIDTH: 40, Y_POS: 2, X_POS: 842, OFFSET: -13},
'BACKGROUND_2': {HEIGHT: 33, WIDTH: 82, Y_POS: 2, X_POS: 727, OFFSET: -40}
},
LINES: [
{SOURCE_X: 2, SOURCE_Y: 81, WIDTH: 600, HEIGHT: 12, YPOS: 78},
{SOURCE_X: 2, SOURCE_Y: 54, WIDTH: 600, HEIGHT: 12, YPOS: 56}
]
},
type_5: {
LDPI: {
OBSTACLE_1: {x: 458, y: 2},
OBSTACLE_2: {x: 458, y: 2},
BACKGROUND_EL: {x: 0, y: 0},
CLOUD: {x: 482, y: 2},
WALL: {x: 2, y: 54},
HORIZON: {x: 2, y: 77},
TREX: {x: 252, y: 2}
},
HDPI: {
OBSTACLE_1: {x: 916, y: 2},
OBSTACLE_2: {x: 916, y: 2},
BACKGROUND_EL: {x: 0, y: 0},
CLOUD: {x: 963, y: 3},
WALL: {x: 2, y: 108},
HORIZON: {x: 4, y: 154},
TREX: {x: 504, y: 2}
},
ALT_GAME_END_CONFIG: {WIDTH: 15, HEIGHT: 17, X_OFFSET: 24, Y_OFFSET: 23},
MAX_GAP_COEFFICIENT: 2.5,
MAX_OBSTACLE_LENGTH: 1,
BOTTOM_PAD: 12,
HAS_CLOUDS: 1,
TREX: {
MAX_JUMP_HEIGHT: 30,
MIN_JUMP_HEIGHT: 30,
INITIAL_JUMP_VELOCITY: -10,
RUNNING_1: {x: 0, w: 51, h: 67, xOffset: 0},
RUNNING_2: {x: 50, w: 51, h: 67, xOffset: 0},
CRASHED: {x: 156, w: 51, h: 67, xOffset: 0},
JUMPING: {x: 103, w: 54, h: 67, xOffset: 0},
COLLISION_BOXES: [
new CollisionBox(35, 30, 13, 9), new CollisionBox(19, 51, 22, 9),
new CollisionBox(9, 51, 9, 13), new CollisionBox(4, 27, 31, 28)
]
},
OBSTACLES: [{
type: 'OBSTACLE_1',
width: 21,
height: 57,
yPos: 93,
multipleSpeed: 999,
minGap: 40,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 0, 3, 41), new CollisionBox(3, 5, 14, 39),
new CollisionBox(16, 7, 4, 43)
]
}],
BACKGROUND_EL_CONFIG: {
MAX_BG_ELS: 4,
MAX_GAP: 420,
MIN_GAP: 320,
POS: 0,
SPEED: 0.3,
Y_POS: 125
},
BACKGROUND_EL: {
'BACKGROUND_0': {HEIGHT: 40, WIDTH: 170, Y_POS: 100, X_POS: 0, OFFSET: 10}
},
LINES: [{SOURCE_X: 2, SOURCE_Y: 71, WIDTH: 600, HEIGHT: 12, YPOS: 123}]
}
};

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +0,0 @@
var pageData = {"altGameCommonImage1x":"images/default_100_percent/offline/100-olympic-firemedal-sprites.png","altGameCommonImage2x":"images/default_200_percent/offline/200-olympic-firemedal-sprites.png","dinoGameA11yAriaLabel":"","dinoGameA11yGameOver":"Game over, your score is $1.","dinoGameA11yHighScore":"Your highest score is $1.","dinoGameA11yJump":"Jump!","dinoGameA11ySpeedToggle":"Start slower","dinoGameA11yStartGame":"Game started.","enableAltGameMode":false,"errorCode":"","fontfamily":"'Segoe UI', Tahoma, sans-serif","fontsize":"75%","heading":{"hostName":"dino","msg":"Press space to play"},"iconClass":"icon-offline","language":"en","textdirection":"ltr","title":"chrome://dino/"};
loadTimeData.data = pageData;

View File

@ -1,209 +0,0 @@
/* Copyright 2013 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file. */
html, body {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
}
.icon {
-webkit-user-select: none;
user-select: none;
display: inline-block;
}
.hidden {
display: none;
}
/* Offline page */
.offline {
transition: filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1),
background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
}
.offline body {
transition: background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
}
.offline.inverted {
background-color: #000;
filter: invert(1);
}
.offline.inverted body {
background-color: #fff;
}
.offline .interstitial-wrapper {
color: #2b2b2b;
font-size: 0.8em;
line-height: 1.55;
margin: 0 auto;
max-width: 600px;
padding-top: 150px;
width: 100%;
}
.offline .runner-container {
direction: ltr;
height: 150px;
max-width: 600px;
overflow: hidden;
position: absolute;
top: 35px;
width: 44px;
}
.offline .runner-canvas {
height: 150px;
max-width: 600px;
opacity: 1;
overflow: hidden;
position: absolute;
top: 0;
z-index: 10;
}
.offline .controller {
background: rgba(247, 247, 247, .1);
height: 100vh;
left: 0;
position: absolute;
top: 0;
width: 100vw;
z-index: 1;
}
#offline-resources {
display: none;
}
.arcade-mode,
.arcade-mode .runner-container,
.arcade-mode .runner-canvas {
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-crisp-edges;
image-rendering: pixelated;
image-rendering: crisp-edges;
max-width: 100%;
overflow: hidden;
}
.arcade-mode #buttons,
.arcade-mode #main-content {
opacity: 0;
overflow: hidden;
}
.arcade-mode .interstitial-wrapper {
height: 100vh;
max-width: 100%;
overflow: hidden;
}
.arcade-mode .runner-container {
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-crisp-edges;
image-rendering: pixelated;
image-rendering: crisp-edges;
left: 0;
margin: auto;
right: 0;
transform-origin: top center;
transition: transform 250ms cubic-bezier(0.4, 0, 1, 1) 400ms;
z-index: 2;
}
@media (prefers-color-scheme: dark) {
body {
background-color: #000;
}
.offline .runner-canvas {
filter: invert(1);
}
.offline.inverted {
background-color: #fff;
filter: invert(1);
}
.offline.inverted body {
background-color: #fff;
}
h1{filter: invert(1);}
}
@media (max-width: 420px) {
.suggested-left > #control-buttons, .suggested-right > #control-buttons {
float: none;
}
.snackbar {
left: 0;
bottom: 0;
width: 100%;
border-radius: 0;
}
}
@media (max-height: 350px) {
h1 {
margin: 0 0 15px;
}
.icon-offline {
margin: 0 0 10px;
}
.interstitial-wrapper {
margin-top: 5%;
}
.nav-wrapper {
margin-top: 30px;
}
}
@media (min-width: 600px) and (max-width: 736px) and (orientation: landscape) {
.offline .interstitial-wrapper {
margin-left: 0;
margin-right: 0;
}
}
@media (min-width: 420px) and (max-width: 736px) and (min-height: 240px) and (max-height: 420px) and (orientation:landscape) {
.interstitial-wrapper {
margin-bottom: 100px;
}
}
@media (min-height: 240px) and (orientation: landscape) {
.offline .interstitial-wrapper {
margin-bottom: 90px;
}
.icon-offline {
margin-bottom: 20px;
}
}
@media (max-height: 320px) and (orientation: landscape) {
.icon-offline {
margin-bottom: 0;
}
.offline .runner-container {
top: 10px;
}
}
@media (max-width: 240px) {
.interstitial-wrapper {
overflow: inherit;
padding: 0 8px;
}
}

View File

@ -1,517 +0,0 @@
/* Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. */
button {
border: 0;
border-radius: 4px;
box-sizing: border-box;
color: var(--primary-button-text-color);
cursor: pointer;
float: right;
font-size: .875em;
margin: 0;
padding: 8px 16px;
transition: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
user-select: none;
}
[dir='rtl'] button {
float: left;
}
.bad-clock button,
.captive-portal button,
.https-only button,
.insecure-form button,
.lookalike-url button,
.main-frame-blocked button,
.neterror button,
.pdf button,
.ssl button,
.safe-browsing-billing button {
background: var(--primary-button-fill-color);
}
button:active {
background: var(--primary-button-fill-color-active);
outline: 0;
}
#debugging {
display: inline;
overflow: auto;
}
.debugging-content {
line-height: 1em;
margin-bottom: 0;
margin-top: 1em;
}
.debugging-content-fixed-width {
display: block;
font-family: monospace;
font-size: 1.2em;
margin-top: 0.5em;
}
.debugging-title {
font-weight: bold;
}
#details {
margin: 0 0 50px;
}
#details p:not(:first-of-type) {
margin-top: 20px;
}
.secondary-button:active {
border-color: white;
box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3),
0 2px 6px 2px rgba(60, 64, 67, .15);
}
.secondary-button:hover {
background: var(--secondary-button-hover-fill-color);
border-color: var(--secondary-button-hover-border-color);
text-decoration: none;
}
.error-code {
color: var(--error-code-color);
font-size: .8em;
margin-top: 12px;
text-transform: uppercase;
}
#error-debugging-info {
font-size: 0.8em;
}
h1 {
color: var(--heading-color);
font-size: 1.6em;
font-weight: normal;
line-height: 1.25em;
margin-bottom: 16px;
}
h2 {
font-size: 1.2em;
font-weight: normal;
}
.icon {
height: 72px;
margin: 0 0 40px;
width: 72px;
}
input[type=checkbox] {
opacity: 0;
}
input[type=checkbox]:focus ~ .checkbox::after {
outline: -webkit-focus-ring-color auto 5px;
}
.interstitial-wrapper {
box-sizing: border-box;
font-size: 1em;
line-height: 1.6em;
margin: 14vh auto 0;
max-width: 600px;
width: 100%;
}
#main-message > p {
display: inline;
}
#extended-reporting-opt-in {
font-size: .875em;
margin-top: 32px;
}
#extended-reporting-opt-in label {
display: grid;
grid-template-columns: 1.8em 1fr;
position: relative;
}
#enhanced-protection-message {
border-radius: 4px;
font-size: 1em;
margin-top: 32px;
padding: 10px 5px;
}
#enhanced-protection-message label {
display: grid;
grid-template-columns: 2.5em 1fr;
position: relative;
}
#enhanced-protection-message div {
margin: 0.5em;
}
#enhanced-protection-message .icon {
height: 1.5em;
vertical-align: middle;
width: 1.5em;
}
.nav-wrapper {
margin-top: 51px;
}
.nav-wrapper::after {
clear: both;
content: '';
display: table;
width: 100%;
}
.small-link {
color: var(--small-link-color);
font-size: .875em;
}
.checkboxes {
flex: 0 0 24px;
}
.checkbox {
--padding: .9em;
background: transparent;
display: block;
height: 1em;
left: -1em;
padding-inline-start: var(--padding);
position: absolute;
right: 0;
top: -.5em;
width: 1em;
}
.checkbox::after {
border: 1px solid white;
border-radius: 2px;
content: '';
height: 1em;
left: var(--padding);
position: absolute;
top: var(--padding);
width: 1em;
}
.checkbox::before {
background: transparent;
border: 2px solid white;
border-inline-end-width: 0;
border-top-width: 0;
content: '';
height: .2em;
left: calc(.3em + var(--padding));
opacity: 0;
position: absolute;
top: calc(.3em + var(--padding));
transform: rotate(-45deg);
width: .5em;
}
input[type=checkbox]:checked ~ .checkbox::before {
opacity: 1;
}
#recurrent-error-message {
background: #ededed;
border-radius: 4px;
margin-bottom: 16px;
margin-top: 12px;
padding: 12px 16px;
}
.showing-recurrent-error-message #extended-reporting-opt-in {
margin-top: 16px;
}
.showing-recurrent-error-message #enhanced-protection-message {
margin-top: 16px;
}
@media (max-width: 700px) {
.interstitial-wrapper {
padding: 0 10%;
}
#error-debugging-info {
overflow: auto;
}
}
@media (max-width: 420px) {
button,
[dir='rtl'] button,
.small-link {
float: none;
font-size: .825em;
font-weight: 500;
margin: 0;
width: 100%;
}
button {
padding: 16px 24px;
}
#details {
margin: 20px 0 20px 0;
}
#details p:not(:first-of-type) {
margin-top: 10px;
}
.secondary-button:not(.hidden) {
display: block;
margin-top: 20px;
text-align: center;
width: 100%;
}
.interstitial-wrapper {
padding: 0 5%;
}
#extended-reporting-opt-in {
margin-top: 24px;
}
#enhanced-protection-message {
margin-top: 24px;
}
.nav-wrapper {
margin-top: 30px;
}
}
/**
* Mobile specific styling.
* Navigation buttons are anchored to the bottom of the screen.
* Details message replaces the top content in its own scrollable area.
*/
@media (max-width: 420px) {
.nav-wrapper .secondary-button {
border: 0;
margin: 16px 0 0;
margin-inline-end: 0;
padding-bottom: 16px;
padding-top: 16px;
}
}
/* Fixed nav. */
@media (min-width: 240px) and (max-width: 420px) and
(min-height: 401px),
(min-width: 421px) and (min-height: 240px) and
(max-height: 560px) {
body .nav-wrapper {
background: var(--background-color);
bottom: 0;
box-shadow: 0 -12px 24px var(--background-color);
left: 0;
margin: 0 auto;
max-width: 736px;
padding-inline-end: 24px;
padding-inline-start: 24px;
position: fixed;
right: 0;
width: 100%;
z-index: 2;
}
.interstitial-wrapper {
max-width: 736px;
}
#details,
#main-content {
padding-bottom: 40px;
}
#details {
padding-top: 5.5vh;
}
button.small-link {
color: var(--google-blue-600);
}
}
@media (max-width: 420px) and (orientation: portrait),
(max-height: 560px) {
body {
margin: 0 auto;
}
button,
[dir='rtl'] button,
button.small-link,
.nav-wrapper .secondary-button {
font-family: Roboto-Regular,Helvetica;
font-size: .933em;
margin: 6px 0;
transform: translatez(0);
}
.nav-wrapper {
box-sizing: border-box;
padding-bottom: 8px;
width: 100%;
}
#details {
box-sizing: border-box;
height: auto;
margin: 0;
opacity: 1;
transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
}
#details.hidden,
#main-content.hidden {
height: 0;
opacity: 0;
overflow: hidden;
padding-bottom: 0;
transition: none;
}
h1 {
font-size: 1.5em;
margin-bottom: 8px;
}
.icon {
margin-bottom: 5.69vh;
}
.interstitial-wrapper {
box-sizing: border-box;
margin: 7vh auto 12px;
padding: 0 24px;
position: relative;
}
.interstitial-wrapper p {
font-size: .95em;
line-height: 1.61em;
margin-top: 8px;
}
#main-content {
margin: 0;
transition: opacity 100ms cubic-bezier(0.4, 0, 0.2, 1);
}
.small-link {
border: 0;
}
.suggested-left > #control-buttons,
.suggested-right > #control-buttons {
float: none;
margin: 0;
}
}
@media (min-width: 421px) and (min-height: 500px) and (max-height: 560px) {
.interstitial-wrapper {
margin-top: 10vh;
}
}
@media (min-height: 400px) and (orientation:portrait) {
.interstitial-wrapper {
margin-bottom: 145px;
}
}
@media (min-height: 299px) {
.nav-wrapper {
padding-bottom: 16px;
}
}
@media (max-height: 560px) and (min-height: 240px) and (orientation:landscape) {
.extended-reporting-has-checkbox #details {
padding-bottom: 80px;
}
}
@media (min-height: 500px) and (max-height: 650px) and (max-width: 414px) and
(orientation: portrait) {
.interstitial-wrapper {
margin-top: 7vh;
}
}
@media (min-height: 650px) and (max-width: 414px) and (orientation: portrait) {
.interstitial-wrapper {
margin-top: 10vh;
}
}
/* Small mobile screens. No fixed nav. */
@media (max-height: 400px) and (orientation: portrait),
(max-height: 239px) and (orientation: landscape),
(max-width: 419px) and (max-height: 399px) {
.interstitial-wrapper {
display: flex;
flex-direction: column;
margin-bottom: 0;
}
#details {
flex: 1 1 auto;
order: 0;
}
#main-content {
flex: 1 1 auto;
order: 0;
}
.nav-wrapper {
flex: 0 1 auto;
margin-top: 8px;
order: 1;
padding-inline-end: 0;
padding-inline-start: 0;
position: relative;
width: 100%;
}
button,
.nav-wrapper .secondary-button {
padding: 16px 24px;
}
button.small-link {
color: var(--google-blue-600);
}
}
@media (max-width: 239px) and (orientation: portrait) {
.nav-wrapper {
padding-inline-end: 0;
padding-inline-start: 0;
}
}

View File

@ -1,100 +0,0 @@
:root {
--background-color: #fff;
--google-blue-100: rgb(210, 227, 252);
--google-blue-300: rgb(138, 180, 248);
--google-blue-600: rgb(26, 115, 232);
--google-blue-700: rgb(25, 103, 210);
--google-gray-100: rgb(241, 243, 244);
--google-gray-300: rgb(218, 220, 224);
--google-gray-500: rgb(154, 160, 166);
--google-gray-50: rgb(248, 249, 250);
--google-gray-600: rgb(128, 134, 139);
--google-gray-700: rgb(95, 99, 104);
--google-gray-800: rgb(60, 64, 67);
--google-gray-900: rgb(32, 33, 36);
}
/* Copyright 2017 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file. */
a {
color: var(--link-color);
}
body {
--background-color: #fff;
--error-code-color: var(--google-gray-700);
--google-blue-100: rgb(210, 227, 252);
--google-blue-300: rgb(138, 180, 248);
--google-blue-600: rgb(26, 115, 232);
--google-blue-700: rgb(25, 103, 210);
--google-gray-100: rgb(241, 243, 244);
--google-gray-300: rgb(218, 220, 224);
--google-gray-500: rgb(154, 160, 166);
--google-gray-50: rgb(248, 249, 250);
--google-gray-600: rgb(128, 134, 139);
--google-gray-700: rgb(95, 99, 104);
--google-gray-800: rgb(60, 64, 67);
--google-gray-900: rgb(32, 33, 36);
--heading-color: var(--google-gray-900);
--link-color: rgb(88, 88, 88);
--popup-container-background-color: rgba(0,0,0,.65);
--primary-button-fill-color-active: var(--google-blue-700);
--primary-button-fill-color: var(--google-blue-600);
--primary-button-text-color: #fff;
--quiet-background-color: rgb(247, 247, 247);
--secondary-button-border-color: var(--google-gray-500);
--secondary-button-fill-color: #fff;
--secondary-button-hover-border-color: var(--google-gray-600);
--secondary-button-hover-fill-color: var(--google-gray-50);
--secondary-button-text-color: var(--google-gray-700);
--small-link-color: var(--google-gray-700);
--text-color: var(--google-gray-700);
background: var(--background-color);
color: var(--text-color);
word-wrap: break-word;
}
.nav-wrapper .secondary-button {
background: var(--secondary-button-fill-color);
border: 1px solid var(--secondary-button-border-color);
color: var(--secondary-button-text-color);
float: none;
margin: 0;
padding: 8px 16px;
}
.hidden {
display: none;
}
html {
-webkit-text-size-adjust: 100%;
font-size: 125%;
}
.icon {
background-repeat: no-repeat;
background-size: 100%;
}
@media (prefers-color-scheme: dark) {
body {
--background-color: var(--google-gray-900);
--error-code-color: var(--google-gray-500);
--heading-color: var(--google-gray-500);
--link-color: var(--google-blue-300);
--primary-button-fill-color-active: rgb(129, 162, 208);
--primary-button-fill-color: var(--google-blue-300);
--primary-button-text-color: var(--google-gray-900);
--quiet-background-color: var(--background-color);
--secondary-button-border-color: var(--google-gray-700);
--secondary-button-fill-color: var(--google-gray-900);
--secondary-button-hover-fill-color: rgb(48, 51, 57);
--secondary-button-text-color: var(--google-blue-300);
--small-link-color: var(--google-blue-300);
--text-color: var(--google-gray-500);
}
}

View File

@ -1,429 +0,0 @@
* {
font-family: system-ui, 'Segoe UI', Tahoma, sans-serif;
}
/* Copyright 2013 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file. */
/* Don't use the main frame div when the error is in a subframe. */
html[subframe] #main-frame-error {
display: none;
}
/* Don't use the subframe error div when the error is in a main frame. */
html:not([subframe]) #sub-frame-error {
display: none;
}
h1 {
margin-top: 0;
word-wrap: break-word;
}
h1 span {
font-weight: 500;
}
a {
text-decoration: none;
}
.icon {
-webkit-user-select: none;
display: inline-block;
}
.icon-offline {
content: -webkit-image-set(
url(../images/default_100_percent/offline/100-error-offline.png) 1x,
url(../images/default_200_percent/offline/200-error-offline.png) 2x);
position: relative;
}
.hidden {
display: none;
}
/* Offline page */
html[dir='rtl'] .runner-container,
html[dir='rtl'].offline .icon-offline {
transform: scaleX(-1);
}
.offline {
transition: filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1),
background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
}
.offline body {
transition: background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
}
.offline #main-message > p {
display: none;
}
.offline.inverted {
background-color: #dfdedb; /* --google-gray-900 inverted value */
filter: invert(1);
}
.offline.inverted body {
background-color: #dfdedb;
}
.offline .interstitial-wrapper {
color: var(--text-color);
font-size: 1em;
line-height: 1.55;
margin: 0 auto;
max-width: 600px;
padding-top: 100px;
position: relative;
width: 100%;
}
.offline .runner-container {
direction: ltr;
height: 150px;
max-width: 600px;
overflow: hidden;
position: absolute;
top: 35px;
width: 44px;
}
.offline .runner-container:focus {
outline: none;
}
.offline .runner-container:focus-visible {
/* outline: 3px solid var(--google-blue-300); */
outline: none;
}
.offline .runner-canvas {
height: 150px;
max-width: 600px;
opacity: 1;
overflow: hidden;
position: absolute;
top: 0;
z-index: 10;
}
.offline .controller {
height: 100vh;
left: 0;
position: absolute;
top: 0;
width: 100vw;
z-index: 9;
}
#offline-resources {
display: none;
}
#offline-instruction {
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-crisp-edges;
image-rendering: pixelated;
image-rendering: crisp-edges;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 60px;
width: fit-content;
}
.offline-runner-live-region {
bottom: 0;
clip-path: polygon(0 0, 0 0, 0 0);
color: var(--background-color);
display: block;
font-size: xx-small;
overflow: hidden;
position: absolute;
text-align: center;
transition: color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
user-select: none;
}
/* Custom toggle */
.slow-speed-option {
align-items: center;
background: var(--google-gray-50);
border-radius: 24px/50%;
bottom: 0;
color: var(--error-code-color);
/*display: inline-flex;*/
display: none;
font-size: 1em;
left: 0;
line-height: 1.1em;
margin: 5px auto;
padding: 2px 12px 3px 20px;
position: absolute;
right: 0;
width: max-content;
z-index: 999;
}
.slow-speed-option.hidden {
display: none;
}
.slow-speed-option [type=checkbox] {
opacity: 0;
pointer-events: none;
position: absolute;
}
.slow-speed-option .slow-speed-toggle {
cursor: pointer;
margin-inline-start: 8px;
padding: 8px 4px;
position: relative;
}
.slow-speed-option [type=checkbox]:disabled ~ .slow-speed-toggle {
cursor: default;
}
.slow-speed-option-label [type=checkbox] {
opacity: 0;
pointer-events: none;
position: absolute;
}
.slow-speed-option .slow-speed-toggle::before,
.slow-speed-option .slow-speed-toggle::after {
content: '';
display: block;
margin: 0 3px;
transition: all 100ms cubic-bezier(0.4, 0, 1, 1);
}
.slow-speed-option .slow-speed-toggle::before {
background: rgb(189,193,198);
border-radius: 0.65em;
height: 0.9em;
width: 2em;
}
.slow-speed-option .slow-speed-toggle::after {
background: #fff;
border-radius: 50%;
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 40%);
height: 1.2em;
position: absolute;
top: 51%;
transform: translate(-20%, -50%);
width: 1.1em;
}
.slow-speed-option [type=checkbox]:focus + .slow-speed-toggle {
box-shadow: 0 0 8px rgb(94, 158, 214);
outline: 1px solid rgb(93, 157, 213);
}
.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::before {
background: var(--google-blue-600);
opacity: 0.5;
}
.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::after {
background: var(--google-blue-600);
transform: translate(calc(2em - 90%), -50%);
}
.slow-speed-option [type=checkbox]:checked:disabled +
.slow-speed-toggle::before {
background: rgb(189,193,198);
}
.slow-speed-option [type=checkbox]:checked:disabled +
.slow-speed-toggle::after {
background: var(--google-gray-50);
}
@media (max-width: 420px) {
#download-button {
padding-bottom: 12px;
padding-top: 12px;
}
.suggested-left > #control-buttons,
.suggested-right > #control-buttons {
float: none;
}
.snackbar {
border-radius: 0;
bottom: 0;
left: 0;
width: 100%;
}
}
@media (max-height: 350px) {
h1 {
margin: 0 0 15px;
}
.icon-offline {
margin: 0 0 10px;
}
.interstitial-wrapper {
margin-top: 5%;
}
.nav-wrapper {
margin-top: 30px;
}
}
@media (min-width: 420px) and (max-width: 736px) and
(min-height: 240px) and (max-height: 420px) and
(orientation:landscape) {
.interstitial-wrapper {
margin-bottom: 100px;
}
}
@media (max-width: 360px) and (max-height: 480px) {
.offline .interstitial-wrapper {
padding-top: 60px;
}
.offline .runner-container {
top: 8px;
}
}
@media (min-height: 240px) and (orientation: landscape) {
.offline .interstitial-wrapper {
margin-bottom: 90px;
}
.icon-offline {
margin-bottom: 20px;
}
}
@media (max-height: 320px) and (orientation: landscape) {
.icon-offline {
margin-bottom: 0;
}
.offline .runner-container {
top: 10px;
}
}
@media (max-width: 240px) {
button {
padding-inline-end: 12px;
padding-inline-start: 12px;
}
.interstitial-wrapper {
overflow: inherit;
padding: 0 8px;
}
}
@media (max-width: 120px) {
button {
width: auto;
}
}
.arcade-mode,
.arcade-mode .runner-container,
.arcade-mode .runner-canvas {
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-crisp-edges;
image-rendering: pixelated;
image-rendering: crisp-edges;
max-width: 100%;
overflow: hidden;
}
.arcade-mode #buttons,
.arcade-mode #main-content {
opacity: 0;
overflow: hidden;
}
.arcade-mode .interstitial-wrapper {
height: 100vh;
max-width: 100%;
overflow: hidden;
}
.arcade-mode .runner-container {
left: 0;
margin: auto;
right: 0;
transform-origin: top center;
transition: transform 250ms cubic-bezier(0.4, 0, 1, 1) 400ms;
z-index: 2;
}
@media (prefers-color-scheme: dark) {
.icon {
filter: invert(1);
}
.offline .runner-canvas {
filter: invert(1);
transition: filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1),
background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
}
.offline.inverted .runner-canvas {
filter: invert(0);
}
.offline.inverted {
background-color: var(--background-color);
filter: invert(0);
}
.offline.inverted body {
background-color: #fff;
}
.offline.inverted .offline-runner-live-region {
color: #fff;
}
#suggestions-list a {
color: var(--link-color);
}
#error-information-button {
filter: invert(0.6);
}
.slow-speed-option {
background: var(--google-gray-800);
color: var(--google-gray-100);
}
.slow-speed-option .slow-speed-toggle::before,
.slow-speed-option [type=checkbox]:checked:disabled +
.slow-speed-toggle::before {
background: rgb(189,193,198);
}
.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::after,
.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::before {
background: var(--google-blue-300);
}
}

View File

@ -1,399 +0,0 @@
"use strict";
const OFFLINE_DATA_FILE = "offline.js";
const CACHE_NAME_PREFIX = "chrome-dino";
const BROADCASTCHANNEL_NAME = "offline";
const CONSOLE_PREFIX = "[SW] ";
const LAZYLOAD_KEYNAME = "";
// Create a BroadcastChannel if supported.
const broadcastChannel = (typeof BroadcastChannel === "undefined" ? null : new BroadcastChannel(BROADCASTCHANNEL_NAME));
//////////////////////////////////////
// Utility methods
function PostBroadcastMessage(o)
{
if (!broadcastChannel)
return; // not supported
// Impose artificial (and arbitrary!) delay of 3 seconds to make sure client is listening by the time the message is sent.
// Note we could remove the delay on some messages, but then we create a race condition where sometimes messages can arrive
// in the wrong order (e.g. "update ready" arrives before "started downloading update"). So to keep the consistent ordering,
// delay all messages by the same amount.
setTimeout(() => broadcastChannel.postMessage(o), 3000);
};
function Broadcast(type)
{
PostBroadcastMessage({
"type": type
});
};
function BroadcastDownloadingUpdate(version)
{
PostBroadcastMessage({
"type": "downloading-update",
"version": version
});
}
function BroadcastUpdateReady(version)
{
PostBroadcastMessage({
"type": "update-ready",
"version": version
});
}
function IsUrlInLazyLoadList(url, lazyLoadList)
{
if (!lazyLoadList)
return false; // presumably lazy load list failed to load
try {
for (const lazyLoadRegex of lazyLoadList)
{
if (new RegExp(lazyLoadRegex).test(url))
return true;
}
}
catch (err)
{
console.error(CONSOLE_PREFIX + "Error matching in lazy-load list: ", err);
}
return false;
};
function WriteLazyLoadListToStorage(lazyLoadList)
{
if (typeof localforage === "undefined")
return Promise.resolve(); // bypass if localforage not imported
else
return localforage.setItem(LAZYLOAD_KEYNAME, lazyLoadList)
};
function ReadLazyLoadListFromStorage()
{
if (typeof localforage === "undefined")
return Promise.resolve([]); // bypass if localforage not imported
else
return localforage.getItem(LAZYLOAD_KEYNAME);
};
function GetCacheBaseName()
{
// Include the scope to avoid name collisions with any other SWs on the same origin.
// e.g. "c3offline-https://example.com/foo/" (won't collide with anything under bar/)
return CACHE_NAME_PREFIX + "-" + self.registration.scope;
};
function GetCacheVersionName(version)
{
// Append the version number to the cache name.
// e.g. "c3offline-https://example.com/foo/-v2"
return GetCacheBaseName() + "-v" + version;
};
// Return caches.keys() filtered down to just caches we're interested in (with the right base name).
// This filters out caches from unrelated scopes.
async function GetAvailableCacheNames()
{
const cacheNames = await caches.keys();
const cacheBaseName = GetCacheBaseName();
return cacheNames.filter(n => n.startsWith(cacheBaseName));
};
// Identify if an update is pending, which is the case when we have 2 or more available caches.
// One must be an update that is waiting, since the next navigate that does an upgrade will
// delete all the old caches leaving just one currently-in-use cache.
async function IsUpdatePending()
{
const availableCacheNames = await GetAvailableCacheNames();
return (availableCacheNames.length >= 2);
};
// Automatically deduce the main page URL (e.g. index.html or main.aspx) from the available browser windows.
// This prevents having to hard-code an index page in the file list, implicitly caching it like AppCache did.
async function GetMainPageUrl()
{
const allClients = await clients.matchAll({
includeUncontrolled: true,
type: "window"
});
for (const c of allClients)
{
// Parse off the scope from the full client URL, e.g. https://example.com/index.html -> index.html
let url = c.url;
if (url.startsWith(self.registration.scope))
url = url.substring(self.registration.scope.length);
if (url && url !== "/") // ./ is also implicitly cached so don't bother returning that
{
// If the URL is solely a search string, prefix it with / to ensure it caches correctly.
// e.g. https://example.com/?foo=bar needs to cache as /?foo=bar, not just ?foo=bar.
if (url.startsWith("?"))
url = "/" + url;
return url;
}
}
return ""; // no main page URL could be identified
};
// Fetch optionally bypassing HTTP cache using fetch cache options
function fetchWithBypass(request, bypassCache)
{
if (typeof request === "string")
request = new Request(request);
if (bypassCache)
{
return fetch(request.url, {
method: 'GET',
headers: request.headers,
mode: request.mode == 'navigate' ? 'cors' : request.mode,
credentials: request.credentials,
redirect: request.redirect
});
}
else
{
// bypass disabled: perform normal fetch which is allowed to return from HTTP cache
return fetch(request);
}
};
// Effectively a cache.addAll() that only creates the cache on all requests being successful (as a weak attempt at making it atomic)
// and can optionally cache-bypass with fetchWithBypass in every request
async function CreateCacheFromFileList(cacheName, fileList, bypassCache)
{
// Kick off all requests and wait for them all to complete
const responses = await Promise.all(fileList.map(url => fetchWithBypass(url, bypassCache)));
// Check if any request failed. If so don't move on to opening the cache.
// This makes sure we only open a cache if all requests succeeded.
let allOk = true;
for (const response of responses)
{
if (!response.ok)
{
allOk = false;
console.error(CONSOLE_PREFIX + "Error fetching '" + response.url + "' (" + response.status + " " + response.statusText + ")");
}
}
if (!allOk)
throw new Error("not all resources were fetched successfully");
// Can now assume all responses are OK. Open a cache and write all responses there.
// TODO: ideally we can do this transactionally to ensure a complete cache is written as one atomic operation.
// This needs either new transactional features in the spec, or at the very least a way to rename a cache
// (so we can write to a temporary name that won't be returned by GetAvailableCacheNames() and then rename it when ready).
const cache = await caches.open(cacheName);
try {
return await Promise.all(responses.map(
(response, i) => cache.put(fileList[i], response)
));
}
catch (err)
{
// Not sure why cache.put() would fail (maybe if storage quota exceeded?) but in case it does,
// clean up the cache to try to avoid leaving behind an incomplete cache.
console.error(CONSOLE_PREFIX + "Error writing cache entries: ", err);
caches.delete(cacheName);
throw err;
}
};
async function UpdateCheck(isFirst)
{
try {
// Always bypass cache when requesting offline.js to make sure we find out about new versions.
const response = await fetchWithBypass(OFFLINE_DATA_FILE, true);
if (!response.ok)
throw new Error(OFFLINE_DATA_FILE + " responded with " + response.status + " " + response.statusText);
const data = await response.json();
const version = data.version;
const fileList = data.fileList;
const lazyLoadList = data.lazyLoad;
const currentCacheName = GetCacheVersionName(version);
const cacheExists = await caches.has(currentCacheName);
// Don't recache if there is already a cache that exists for this version. Assume it is complete.
if (cacheExists)
{
// Log whether we are up-to-date or pending an update.
const isUpdatePending = await IsUpdatePending();
if (isUpdatePending)
{
console.log(CONSOLE_PREFIX + "Update pending");
Broadcast("update-pending");
}
else
{
console.log(CONSOLE_PREFIX + "Up to date");
Broadcast("up-to-date");
}
return;
}
// Implicitly add the main page URL to the file list, e.g. "index.html", so we don't have to assume a specific name.
const mainPageUrl = await GetMainPageUrl();
// Prepend the main page URL to the file list if we found one and it is not already in the list.
// Also make sure we request the base / which should serve the main page.
fileList.unshift("./");
if (mainPageUrl && fileList.indexOf(mainPageUrl) === -1)
fileList.unshift(mainPageUrl);
console.log(CONSOLE_PREFIX + "Caching " + fileList.length + " files for offline use");
if (isFirst)
Broadcast("downloading");
else
BroadcastDownloadingUpdate(version);
// Note we don't bypass the cache on the first update check. This is because SW installation and the following
// update check caching will race with the normal page load requests. For any normal loading fetches that have already
// completed or are in-flight, it is pointless and wasteful to cache-bust the request for offline caching, since that
// forces a second network request to be issued when a response from the browser HTTP cache would be fine.
if (lazyLoadList)
await WriteLazyLoadListToStorage(lazyLoadList); // dump lazy load list to local storage#
await CreateCacheFromFileList(currentCacheName, fileList, !isFirst);
const isUpdatePending = await IsUpdatePending();
if (isUpdatePending)
{
console.log(CONSOLE_PREFIX + "All resources saved, update ready");
BroadcastUpdateReady(version);
}
else
{
console.log(CONSOLE_PREFIX + "All resources saved, offline support ready");
Broadcast("offline-ready");
}
}
catch (err)
{
// Update check fetches fail when we're offline, but in case there's any other kind of problem with it, log a warning.
console.warn(CONSOLE_PREFIX + "Update check failed: ", err);
}
};
self.addEventListener("install", event =>
{
// On install kick off an update check to cache files on first use.
// If it fails we can still complete the install event and leave the SW running, we'll just
// retry on the next navigate.
event.waitUntil(
UpdateCheck(true) // first update
.catch(() => null)
);
});
async function GetCacheNameToUse(availableCacheNames, doUpdateCheck)
{
// Prefer the oldest cache available. This avoids mixed-version responses by ensuring that if a new cache
// is created and filled due to an update check while the page is running, we keep returning resources
// from the original (oldest) cache only.
if (availableCacheNames.length === 1 || !doUpdateCheck)
return availableCacheNames[0];
// We are making a navigate request with more than one cache available. Check if we can expire any old ones.
const allClients = await clients.matchAll();
// If there are other clients open, don't expire anything yet. We don't want to delete any caches they
// might be using, which could cause mixed-version responses.
if (allClients.length > 1)
return availableCacheNames[0];
// Identify newest cache to use. Delete all the others.
const latestCacheName = availableCacheNames[availableCacheNames.length - 1];
console.log(CONSOLE_PREFIX + "Updating to new version");
await Promise.all(
availableCacheNames.slice(0, -1)
.map(c => caches.delete(c))
);
return latestCacheName;
};
async function HandleFetch(event, doUpdateCheck)
{
const availableCacheNames = await GetAvailableCacheNames();
// No caches available: go to network
if (!availableCacheNames.length)
return fetch(event.request);
const useCacheName = await GetCacheNameToUse(availableCacheNames, doUpdateCheck);
const cache = await caches.open(useCacheName);
const cachedResponse = await cache.match(event.request);
if (cachedResponse)
return cachedResponse; // use cached response
// We need to check if this request is to be lazy-cached. Send the request and load the lazy-load list
// from storage simultaneously.
const result = await Promise.all([fetch(event.request), ReadLazyLoadListFromStorage()]);
const fetchResponse = result[0];
const lazyLoadList = result[1];
if (IsUrlInLazyLoadList(event.request.url, lazyLoadList))
{
// Handle failure writing to the cache. This can happen if the storage quota is exceeded, which is particularly
// likely in Safari 11.1, which appears to have very tight storage limits. Make sure even in the event of an error
// we continue to return the response from the fetch.
try {
// Note clone response since we also respond with it
await cache.put(event.request, fetchResponse.clone());
}
catch (err)
{
console.warn(CONSOLE_PREFIX + "Error caching '" + event.request.url + "': ", err);
}
}
return fetchResponse;
};
self.addEventListener("fetch", event =>
{
/** NOTE (iain)
* This check is to prevent a bug with XMLHttpRequest where if its
* proxied with "FetchEvent.prototype.respondWith" no upload progress
* events are triggered. By returning we allow the default action to
* occur instead. Currently all cross-origin requests fall back to default.
*/
if (new URL(event.request.url).origin !== location.origin)
return;
// Check for an update on navigate requests
const doUpdateCheck = (event.request.mode === "navigate");
const responsePromise = HandleFetch(event, doUpdateCheck);
if (doUpdateCheck)
{
// allow the main request to complete, then check for updates
event.waitUntil(
responsePromise
.then(() => UpdateCheck(false)) // not first check
);
}
event.respondWith(responsePromise);
});

View File

@ -1,4 +1,14 @@
<!DOCTYPE html><html lang='en'> <head> <meta http-equiv='X-UA-Compatible' content='IE=edge' /> <meta http-equiv='pragma' content='no-cache' /> <meta name='apple-mobile-web-app-capable' content='yes' /> <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' /> <meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' /> <meta charset='utf-8' /> <style> body { background: #000000; color: #cccccc; margin: 0px; padding: 0px; border: 0px; } canvas { image-rendering: optimizeSpeed; -webkit-interpolation-mode: nearest-neighbor; -ms-touch-action: none; margin: 0px; padding: 0px; border: 0px; } :-webkit-full-screen #canvas { width: 100%; height: 100%; } div.gm4html5_div_class { margin: 0px; padding: 0px; border: 0px; } div.gm4html5_login { padding: 20px; position: absolute; border: solid 2px #000000; background-color: #404040; color: #00ff00; border-radius: 15px; box-shadow: #101010 20px 20px 40px; } div.gm4html5_cancel_button { float: right; } div.gm4html5_login_button { float: left; } div.gm4html5_login_header { text-align: center; } :-webkit-full-screen { width: 100%; height: 100%; } </style> </head> <body> <div class='gm4html5_div_class' id='gm4html5_div_id'> <center><canvas id='canvas' width='800' height='600'> <p>Your browser doesn't support HTML5 canvas.</p> </canvas></center> </div> <script>var is_chrome = navigator.userAgent.toLowerCase().indexOf("chrome") > -1;
<!DOCTYPE html><html lang='en'> <head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta http-equiv='X-UA-Compatible' content='IE=edge' /> <meta http-equiv='pragma' content='no-cache' /> <meta name='apple-mobile-web-app-capable' content='yes' /> <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' /> <meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' /> <meta charset='utf-8' /> <style> body { background: #000000; color: #cccccc; margin: 0px; padding: 0px; border: 0px; } canvas { image-rendering: optimizeSpeed; -webkit-interpolation-mode: nearest-neighbor; -ms-touch-action: none; margin: 0px; padding: 0px; border: 0px; } :-webkit-full-screen #canvas { width: 100%; height: 100%; } div.gm4html5_div_class { margin: 0px; padding: 0px; border: 0px; } div.gm4html5_login { padding: 20px; position: absolute; border: solid 2px #000000; background-color: #404040; color: #00ff00; border-radius: 15px; box-shadow: #101010 20px 20px 40px; } div.gm4html5_cancel_button { float: right; } div.gm4html5_login_button { float: left; } div.gm4html5_login_header { text-align: center; } :-webkit-full-screen { width: 100%; height: 100%; } </style> </head> <body> <div class='gm4html5_div_class' id='gm4html5_div_id'> <center><canvas id='canvas' width='800' height='600'> <p>Your browser doesn't support HTML5 canvas.</p> </canvas></center> </div> <script>var is_chrome = navigator.userAgent.toLowerCase().indexOf("chrome") > -1;
if (is_chrome) {
CanvasRenderingContext2D.prototype.arc = function (x, y, radius, startAngle, endAngle, anticlockwise) {
// Signed length of curve

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cluster Rush</title>

View File

@ -3,6 +3,17 @@
<head>
<!-- external -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<!--<link href="https://fonts.googleapis.com/css?family=Kavoon&subset=latin,latin-ext" rel="stylesheet" type="text/css">-->
<link href="https://fonts.googleapis.com/css?family=Merriweather:900&subset=latin,latin-ext" rel="stylesheet" type="text/css" />

View File

@ -1,9 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Cut the Rope | 3kh0</title>
<title>Cut the Rope</title>
<meta name="description" content="Play Cut the Rope! A mysterious package has arrived, and the little monster inside has only one request… CANDY!">
<meta name="msapplication-tooltip" content="Play Cut the Rope! A mysterious package has arrived, and the little monster inside has only one request… CANDY!" />
<meta name="msapplication-navbutton-color" content="#659729" />
@ -16,7 +27,6 @@
<script type="text/javascript" src="scripts/detectmobilebrowser.js" ></script>
<link href="css/ctr.css" rel="stylesheet" type="text/css">
<script src="scripts/sm2.js" type="text/javascript"></script>
<script src="/js/main.js"></script>
<script src="scripts/libraries.js" type="text/javascript"></script>
<script src="scripts/ctr.js" type="text/javascript"></script>
<noscript>

View File

@ -1,9 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<title>Dante | 3kh0</title>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<title>Dante</title>
<meta content="width=device-width,initial-scale=1,user-scalable=0" name="viewport" />
<link rel="icon" href="/favicon.ico">
<link rel="icon" href="favicon.ico">
</head>
<body>
<script>

View File

@ -10,15 +10,25 @@
</script>
<html lang="en-us">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Death Run 3D | 3kh0</title>
<title>Death Run 3D</title>
<link href="shared/style.css" rel="stylesheet" />
<link rel="stylesheet" href="TemplateData56/style.css" />
<script src="TemplateData56/UnityProgress.js"></script>
<link rel="shortcut icon" href="TemplateData/favicon.ico" />
<script src="Build/UnityLoader.js"></script>
<script src="/js/main.js"></script>
<script>
window.rWS = WebSocket;
WebSocket = function (url, options) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3,6 +3,16 @@
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<title>Drift Boss</title>
<link rel="icon" type="image/x-icon" href="/media/graphics/misc/favicon.ico">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Duck Life 4</title>
<style>html{background-color:#000;}</style>

View File

@ -8,6 +8,17 @@
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no">
<meta name="HandheldFriendly" content="true" />
@ -16,10 +27,9 @@
<meta name="apple-mobile-web-app-title" content="Bubblez">
<meta id="viewport" name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui,shrink-to-fit=no" />
<meta name="apple-mobile-web-app-capable" content="yes">
<script src="/js/main.js"></script>
<meta name="apple-mobile-web-app-title" content="Fireboy & Watergirl 1 Forest Temple">
<title>Fireboy & Watergirl - Forest Temple | 3kh0</title>
<title>Fireboy & Watergirl - Forest Temple</title>
<link rel="manifest" href="manifest.json">

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, viewport-fit=cover" />
@ -8,10 +19,9 @@
<link rel="stylesheet" type="text/css" href="styles.css" />
<link rel="manifest" href="manifest.json" />
<style></style>
<title>Flappy Bird | 3kh0</title>
<title>Flappy Bird</title>
<script src="playcanvas-stable.min.js"></script>
<script src="settings.js"></script>
<script src="/js/main.js"></script>
</head>
<body>
<script src="start.js"></script>

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<meta http-equiv="Cache-Control" content="no-cache" />

View File

@ -1,14 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<title>Friday Night Funkin' | 3kh0</title>
<title>Friday Night Funkin'</title>
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<link rel="shortcut icon" type="image/png" href="./favicon.png" />
<link rel="icon" type="image/png" href="./favicon.png" />
<script type="text/javascript" src="./Funkin.js"></script>
<script type="text/javascript" src="/js/main.js"></script>
<link rel="shortcut icon" type="image/png" href="favicon.png" />
<link rel="icon" type="image/png" href="favicon.png" />
<script type="text/javascript" src="Funkin.js"></script>
<script>
window.addEventListener(

View File

@ -2,6 +2,17 @@
<!-- Created with https://packager.turbowarp.org/ -->
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<!-- We only include this to explicitly loosen the CSP of various packager environments. It does not provide any security. -->

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Gun Mayhem</title>
<style>html{background-color:#000;}</style>

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Gun Mayhem 2</title>
<style>html{background-color:#000;}</style>

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Gun Mayhem Redux</title>
<style>html{background-color:#000;}</style>

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>The World's Hardest Game</title>
<style>html{background-color:#000;}</style>

View File

@ -1,6 +1,17 @@
<!doctype html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<title>HexGL by BKcore</title>
<meta charset="utf-8">
<meta name="description" content="HexGL is a futuristic racing game built by Thibaut Despoulain (BKcore) using HTML5, Javascript and WebGL. Come challenge your friends on this fast-paced 3D game!">

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<style>@import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap');</style>
<link rel="stylesheet" href="./style.css">
<title>e-gamepass</title>

View File

@ -2,6 +2,17 @@
<meta charset="utf-8">
<title>I Wanna Be Thy Copy</title>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<script src="iwbtc-all.js"></script>
<link rel="stylesheet" href="style.css">
@ -58,6 +69,6 @@
the music and images from the original game.
<br>
<br>
Source code available on <a href=https://github.com/copy/iwbtc>github</a>. Play a tas version <a href="tas/index.html">here</a>.
Source code available on <a href=https://github.com/copy/iwbtc>github</a>. Play a tas version <a href="tas/index.html">here</a>. Use the editor <a href="editor.html">here</a>.
</div>

View File

@ -2,6 +2,17 @@
<html>
<head>
<meta charset="UTF-8">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<title>Low&#39;s Adventures 2</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<meta name="generator" content="Construct 3">

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Learn To Fly</title>
<style>html{background-color:#000;}</style>

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8">
<title>Full Screen Mario</title>

View File

@ -97,6 +97,17 @@ THIS IS THE LAST OFFICIAL BUILD OF EAGLERCRAFT RELEASED BY LAX1DUDE
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="UTF-8" />
<title>My Drive - Google Drive</title>

View File

@ -1,7 +1,17 @@
<html>
<head>
<title>Offline Paradise | 3kh0</title>
<script src="/js/main.js"></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<title>Offline Paradise</title>
</head>
<body style="-webkit-user-select: none; user-select: none; overscroll: none; overflow: hidden; border: none; margin: none; padding: none;">
<meta charset="utf-8" />

View File

@ -2,6 +2,17 @@
<!-- Created with https://packager.turbowarp.org/ -->
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<!-- We only include this to explicitly loosen the CSP of various packager environments. It does not provide any security. -->

File diff suppressed because one or more lines are too long

View File

@ -26,6 +26,17 @@ Compile it yourself here: https://gitlab.com/lax1dude/eaglercraftx-1.8/
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="EaglercraftX 1.8 Offline" />

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Run 2</title>
<style>html{background-color:#000;}</style>

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<style>canvas{padding-left:0;padding-right:0;border:1px solid grey}body{background-color:#141414;margin:0}a{color:#fff}a:hover{color:#ff0}.subheader{color:#fff;user-select:none;font-family:Arial}.column-left{float:left;width:33.333%;text-align:left}.column-center{display:inline-block;width:33.333%;text-align:center}.column-right{float:right;width:33.333%;text-align:right}.title{text-align:center;font-family:Arial;color:#fff;user-select:none}.wrapper{font-size:0;padding-top:10px;margin:0 auto;box-shadow:rgba(0,0,0,.16) 0 2px 4px 0,rgba(0,0,0,.12) 0 2px 10px 0}#titleWrapper{font-size:initial;padding-bottom:12px}#menuWrapper{border-left:1px solid grey;border-right:1px solid grey;border-bottom:1px solid grey;padding-bottom:3px;margin-bottom:15px;background-color:#3c3c3c;overflow:auto;font-family:Arial;font-size:14px;user-select:none;position:relative;color:#ff0;width:inherit}#elementTable{border-collapse:collapse;float:left}.elementMenuButton{background:0 0;border:none;text-align:left;user-select:none;width:100%;height:100%}.elementMenuButton:hover{background-color:#0a0a0a;color:#fff!important}.elementMenuButton:active{background-color:#646464;color:#fff!important}.selectedElementMenuButton{outline:1px solid white}.optionsCol{float:left}.spigotType{width:75px}#speedSliderDiv{margin-top:4px;margin-bottom:8px}#speedSlider{width:60px;height:10px;border-radius:5px;background-image:linear-gradient(to right,rgba(255,0,0,.8),rgba(0,128,0,.8));outline:0;-webkit-appearance:none}#optionsCol2{padding-left:4px}#fps-counter{position:absolute;bottom:1px;right:1px}.optionButton{font-size:inherit;font-family:inherit;user-select:none;border:none;outline:0}.optionButtonContainer{margin-top:4px}#clearButton:hover{background-color:red}#clearButton:active{background-color:#7b0000}#saveButton:hover{background-color:#0f0}#saveButton:active{background-color:#007b00}#loadButton:hover{background-color:#ff0}#loadButton:active{background-color:#7b7b00}#penSizeDiv{margin-bottom:2px}
</style>
<title>Sand Game</title>

View File

@ -9,9 +9,20 @@
</script>
<html lang="en-us">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Slope | 3kh0</title>
<title>Slope</title>
<link href="shared/style.css" rel="stylesheet" />
<link rel="stylesheet" href="TemplateData56/style.css" />
<script src="TemplateData56/UnityProgress.js"></script>

View File

@ -1,9 +1,20 @@
<!Doctype html>
<html lang="en-us">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Super Mario 64 | 3kh0</title>
<title>Super Mario 64</title>
<link rel="icon" href="logo.png">
<style>
body, html{

File diff suppressed because one or more lines are too long

View File

@ -2,12 +2,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="hot.jpg">
<title>SUPERHOT</title>
<link rel="stylesheet" href="https://raw.githack.com/3kh0/3kh0-assets/main/superhot/styles.css" />
<link rel="stylesheet" href="styles.css" />
</head>
<body style="margin: 0;">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" style="width: 100%; height: 100%;"></canvas>
@ -16,11 +27,11 @@
TOTAL_MEMORY: 268435456,
errorhandler: null, // arguments: err, url, line. This function must return 'true' if the error is handled, otherwise 'false'
compatibilitycheck: null,
dataUrl: "https://raw.githack.com/3kh0/3kh0-assets/main/superhot/webgl.datagz",
codeUrl: "https://raw.githack.com/3kh0/3kh0-assets/main/superhot/webgl.jsgz",
memUrl: "https://raw.githack.com/3kh0/3kh0-assets/main/superhot/webgl.memgz",
dataUrl: "webgl.datagz",
codeUrl: "webgl.jsgz",
memUrl: "webgl.memgz",
};
</script>
<script src="https://raw.githack.com/3kh0/3kh0-assets/main/superhot/UnityLoader.js"></script>
<script src="UnityLoader.js"></script>
</body>
</html>

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Super Meat Boy</title>
<style>html{background-color:#000;}</style>

View File

@ -1,6 +1,17 @@
<html>
<head>
<title>TwitchTetris | 3kh0</title>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<title>TwitchTetris</title>
<link href="//fonts.googleapis.com/css?family=VT323" rel="stylesheet" type="text/css" />
<link href="/favicon.ico" rel="icon">
<link href="styles.css" rel="stylesheet" type="text/css" />

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>This Is The Only Level</title>
<style>html{background-color:#000;}</style>

View File

@ -1,6 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="google" value="notranslate">

View File

@ -1,4 +1,14 @@
<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>TurboWarp Packager - Convert Scratch projects to HTML, EXE, and more</title><meta name="description" content="Converts Scratch 3, 2, or 1 projects into HTML files, zip archives, or executable programs for Windows, macOS, and Linux."><style>body[p4-splash-theme="dark"]:not([p4-loaded]) {
<!doctype html><html><head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>TurboWarp Packager - Convert Scratch projects to HTML, EXE, and more</title><meta name="description" content="Converts Scratch 3, 2, or 1 projects into HTML files, zip archives, or executable programs for Windows, macOS, and Linux."><style>body[p4-splash-theme="dark"]:not([p4-loaded]) {
background-color: #111;
color-scheme: dark;
}

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Vex</title>
<style>html{background-color:#000;}</style>

View File

@ -1,5 +1,16 @@
<html>
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XVTVBR1D5V"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XVTVBR1D5V');
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Vex 2</title>
<style>html{background-color:#000;}</style>

Some files were not shown because too many files have changed in this diff Show More