initial commit (WIP)
BIN
apple-touch-icon.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
emularity_bios_v1/pce-macplus-pcex.rom
Normal file
BIN
emularity_bios_v1/pce-macplus-pram.dat
Normal file
BIN
emularity_bios_v1/pce-macplus.rom
Normal file
200
emularity_config_v1/pce-macplus.cfg
Normal file
@ -0,0 +1,200 @@
|
||||
path = "/emulator"
|
||||
|
||||
memtest = 0
|
||||
|
||||
cpu {
|
||||
model = "68000"
|
||||
speed = 1
|
||||
}
|
||||
|
||||
ram {
|
||||
address = 0x000000
|
||||
size = 4096K
|
||||
}
|
||||
|
||||
rom {
|
||||
file = "pce-macplus.rom"
|
||||
address = 0x400000
|
||||
size = 256K
|
||||
}
|
||||
|
||||
rom {
|
||||
file = "pce-macplus-pcex.rom"
|
||||
address = 0xf80000
|
||||
size = 256K
|
||||
}
|
||||
|
||||
keyboard {
|
||||
model = 7
|
||||
intl = 0
|
||||
}
|
||||
|
||||
rtc {
|
||||
file = "pce-macplus-pram.dat"
|
||||
realtime = 1
|
||||
}
|
||||
|
||||
sony {
|
||||
insert_delay = 2
|
||||
}
|
||||
|
||||
serial {
|
||||
port = 0
|
||||
}
|
||||
|
||||
serial {
|
||||
port = 1
|
||||
}
|
||||
|
||||
sound {
|
||||
driver = "sdl:lowpass=0"
|
||||
}
|
||||
|
||||
terminal {
|
||||
driver = "sdl"
|
||||
|
||||
# escape = "CtrlRight"
|
||||
|
||||
scale = 1
|
||||
border = 0
|
||||
|
||||
aspect_x = 3
|
||||
aspect_y = 2
|
||||
}
|
||||
|
||||
scsi {
|
||||
# address = 0x580000
|
||||
# size = 0x1000
|
||||
|
||||
device {
|
||||
id = 6
|
||||
drive = 0x80
|
||||
|
||||
vendor = " SEAGATE"
|
||||
product = " ST225N"
|
||||
}
|
||||
|
||||
device {
|
||||
id = 0
|
||||
drive = 0x81
|
||||
|
||||
# CHS = 615/4/17
|
||||
vendor = " SEAGATE"
|
||||
product = " ST225N"
|
||||
}
|
||||
}
|
||||
|
||||
disk {
|
||||
drive = 1
|
||||
type = "auto"
|
||||
file = "/emulator/fd1.dsk"
|
||||
file = "/emulator/fd1.ana"
|
||||
file = "/emulator/fd1.cp2"
|
||||
file = "/emulator/fd1.image"
|
||||
file = "/emulator/fd1.ima"
|
||||
file = "/emulator/fd1.imd"
|
||||
file = "/emulator/fd1.img"
|
||||
file = "/emulator/fd1.msa"
|
||||
file = "/emulator/fd1.pfdc"
|
||||
file = "/emulator/fd1.psi"
|
||||
file = "/emulator/fd1.raw"
|
||||
file = "/emulator/fd1.st"
|
||||
file = "/emulator/fd1.stx"
|
||||
file = "/emulator/fd1.tc"
|
||||
file = "/emulator/fd1.td0"
|
||||
file = "/emulator/fd1.xdf"
|
||||
file = "/emulator/fd1"
|
||||
optional = 1
|
||||
}
|
||||
|
||||
disk {
|
||||
drive = 2
|
||||
type = "auto"
|
||||
file = "/emulator/fd2.dsk"
|
||||
file = "/emulator/fd2.ana"
|
||||
file = "/emulator/fd2.cp2"
|
||||
file = "/emulator/fd2.image"
|
||||
file = "/emulator/fd2.ima"
|
||||
file = "/emulator/fd2.imd"
|
||||
file = "/emulator/fd2.img"
|
||||
file = "/emulator/fd2.msa"
|
||||
file = "/emulator/fd2.pfdc"
|
||||
file = "/emulator/fd2.psi"
|
||||
file = "/emulator/fd2.raw"
|
||||
file = "/emulator/fd2.st"
|
||||
file = "/emulator/fd2.stx"
|
||||
file = "/emulator/fd2.tc"
|
||||
file = "/emulator/fd2.td0"
|
||||
file = "/emulator/fd2.xdf"
|
||||
file = "/emulator/fd2"
|
||||
optional = 1
|
||||
}
|
||||
|
||||
disk {
|
||||
drive = 3
|
||||
type = "auto"
|
||||
file = "/emulator/fd3.dsk"
|
||||
file = "/emulator/fd3.ana"
|
||||
file = "/emulator/fd3.cp2"
|
||||
file = "/emulator/fd3.image"
|
||||
file = "/emulator/fd3.ima"
|
||||
file = "/emulator/fd3.imd"
|
||||
file = "/emulator/fd3.img"
|
||||
file = "/emulator/fd3.msa"
|
||||
file = "/emulator/fd3.pfdc"
|
||||
file = "/emulator/fd3.psi"
|
||||
file = "/emulator/fd3.raw"
|
||||
file = "/emulator/fd3.st"
|
||||
file = "/emulator/fd3.stx"
|
||||
file = "/emulator/fd3.tc"
|
||||
file = "/emulator/fd3.td0"
|
||||
file = "/emulator/fd3.xdf"
|
||||
file = "/emulator/fd3"
|
||||
optional = 1
|
||||
}
|
||||
|
||||
disk {
|
||||
drive = 0x80
|
||||
type = "auto"
|
||||
file = "/emulator/hd1.dsk"
|
||||
file = "/emulator/hd1.ana"
|
||||
file = "/emulator/hd1.cp2"
|
||||
file = "/emulator/hd1.image"
|
||||
file = "/emulator/hd1.ima"
|
||||
file = "/emulator/hd1.imd"
|
||||
file = "/emulator/hd1.img"
|
||||
file = "/emulator/hd1.msa"
|
||||
file = "/emulator/hd1.pfdc"
|
||||
file = "/emulator/hd1.psi"
|
||||
file = "/emulator/hd1.raw"
|
||||
file = "/emulator/hd1.st"
|
||||
file = "/emulator/hd1.stx"
|
||||
file = "/emulator/hd1.tc"
|
||||
file = "/emulator/hd1.td0"
|
||||
file = "/emulator/hd1.xdf"
|
||||
file = "/emulator/hd1"
|
||||
optional = 1
|
||||
}
|
||||
|
||||
disk {
|
||||
drive = 0x81
|
||||
type = "auto"
|
||||
file = "/emulator/hd2.dsk"
|
||||
file = "/emulator/hd2.ana"
|
||||
file = "/emulator/hd2.cp2"
|
||||
file = "/emulator/hd2.image"
|
||||
file = "/emulator/hd2.ima"
|
||||
file = "/emulator/hd2.imd"
|
||||
file = "/emulator/hd2.img"
|
||||
file = "/emulator/hd2.msa"
|
||||
file = "/emulator/hd2.pfdc"
|
||||
file = "/emulator/hd2.psi"
|
||||
file = "/emulator/hd2.raw"
|
||||
file = "/emulator/hd2.st"
|
||||
file = "/emulator/hd2.stx"
|
||||
file = "/emulator/hd2.tc"
|
||||
file = "/emulator/hd2.td0"
|
||||
file = "/emulator/hd2.xdf"
|
||||
file = "/emulator/hd2"
|
||||
optional = 1
|
||||
}
|
102440
emularity_engine_v1/pce-macplus.js
Normal file
24
emularity_engine_v1/pce-macplus.js.bak
Normal file
21
emularity_engine_v1/pce-macplus.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "PCE Mac Plus",
|
||||
"native_resolution": [
|
||||
512,
|
||||
342
|
||||
],
|
||||
"peripherals": [
|
||||
"fd1",
|
||||
"fd2",
|
||||
"fd3",
|
||||
"hd1",
|
||||
"hd2"
|
||||
],
|
||||
"bios_filenames": [
|
||||
"pce-macplus.rom",
|
||||
"pce-macplus-pcex.rom",
|
||||
"pce-macplus-pram.dat"
|
||||
],
|
||||
"js_filename": "pce-macplus.js.gz",
|
||||
"driver": "macplus"
|
||||
}
|
108
files.xml
Normal file
@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files>
|
||||
<file name="00_coverscreenshot.jpg" source="original">
|
||||
<mtime>1491281464</mtime>
|
||||
<size>52120</size>
|
||||
<format>JPEG</format>
|
||||
<rotation>0</rotation>
|
||||
<md5>7d245fb52df6210d6cdfb9b167d46cb3</md5>
|
||||
<crc32>fd17335d</crc32>
|
||||
<sha1>22bc557b1b0a37a00bfadad1ee2d2e4411f7f2ca</sha1>
|
||||
</file>
|
||||
<file name="00_coverscreenshot_thumb.jpg" source="derivative">
|
||||
<format>JPEG Thumb</format>
|
||||
<original>00_coverscreenshot.jpg</original>
|
||||
<mtime>1491281490</mtime>
|
||||
<size>3068</size>
|
||||
<md5>cd861d5b5e77c8447a8661fdd54b70e2</md5>
|
||||
<crc32>9a2841e9</crc32>
|
||||
<sha1>6ae3d31cc772641a74458e5071435b87cf7b0998</sha1>
|
||||
</file>
|
||||
<file name="_screenshot.gif" source="original">
|
||||
<mtime>1491281475</mtime>
|
||||
<size>64231</size>
|
||||
<format>Emulator Screenshot</format>
|
||||
<md5>a93f87da33f88775be5196285159fb94</md5>
|
||||
<crc32>233eef7b</crc32>
|
||||
<sha1>6eb6b1c18f890f3f54a353f087403abcb5482f7b</sha1>
|
||||
</file>
|
||||
<file name="hd1.img" source="original">
|
||||
<mtime>1491279141</mtime>
|
||||
<size>21411840</size>
|
||||
<md5>7f9ae888ff116dbf388a5a265315525e</md5>
|
||||
<crc32>7e0b2118</crc32>
|
||||
<sha1>2f5ac4d2364b24f64ac56374cb83ab7e869d301c</sha1>
|
||||
<format>ISO Image</format>
|
||||
</file>
|
||||
<file name="hd2.img" source="original">
|
||||
<mtime>1491279155</mtime>
|
||||
<size>21411840</size>
|
||||
<md5>5a0704eb58dfb7ec5c42479c14f1435a</md5>
|
||||
<crc32>dc864bc8</crc32>
|
||||
<sha1>156f3642a3461bd9a31db9bfc543cde52ee884b1</sha1>
|
||||
<format>ISO Image</format>
|
||||
</file>
|
||||
<file name="mac_MacOS_7.0.1_compilation.gif" source="original">
|
||||
<mtime>1491281471</mtime>
|
||||
<size>4301</size>
|
||||
<format>Animated GIF</format>
|
||||
<md5>4ce478db0d501bc77205a747c7bf9dec</md5>
|
||||
<crc32>58bb3164</crc32>
|
||||
<sha1>fada40476b84bad63b3c837b952384fcc0afc712</sha1>
|
||||
</file>
|
||||
<file name="mac_MacOS_7.0.1_compilation_archive.torrent" source="metadata">
|
||||
<btih>b8928d4e5b9e875512ec7da2a66e7787afa66853</btih>
|
||||
<mtime>1523311943</mtime>
|
||||
<size>4610</size>
|
||||
<md5>12103f3d7ddc76d2a81b39796b91a346</md5>
|
||||
<crc32>6013a406</crc32>
|
||||
<sha1>f3ca17864e582dba60888dc2c217d30a20ec25de</sha1>
|
||||
<format>Archive BitTorrent</format>
|
||||
</file>
|
||||
<file name="mac_MacOS_7.0.1_compilation_files.xml" source="original">
|
||||
<format>Metadata</format>
|
||||
<md5>e36da0f0f79475f7212db0af45376dc2</md5>
|
||||
</file>
|
||||
<file name="mac_MacOS_7.0.1_compilation_meta.sqlite" source="original">
|
||||
<mtime>1491281477</mtime>
|
||||
<size>14336</size>
|
||||
<format>Metadata</format>
|
||||
<md5>e232ddfdc5502ed04518ea9183b10697</md5>
|
||||
<crc32>60e19f70</crc32>
|
||||
<sha1>c75e69f8c5fb213a4fa1b94ef7f9b601dd742968</sha1>
|
||||
</file>
|
||||
<file name="mac_MacOS_7.0.1_compilation_meta.xml" source="original">
|
||||
<mtime>1491284996</mtime>
|
||||
<size>4295</size>
|
||||
<format>Metadata</format>
|
||||
<md5>46af4d68ad5d443ef487fb7aac42e85a</md5>
|
||||
<crc32>bb798be6</crc32>
|
||||
<sha1>fb689e72ea95333d787ea13dc2d7e8bc776fcda1</sha1>
|
||||
</file>
|
||||
<file name="mac_MacOS_7.0.1_compilation_reviews.xml" source="original">
|
||||
<mtime>1523311942</mtime>
|
||||
<size>2195</size>
|
||||
<format>Metadata</format>
|
||||
<md5>84d46daaf93a535d24e4664f0a429ca2</md5>
|
||||
<crc32>81d6c029</crc32>
|
||||
<sha1>606fcb53270afc7c1d21baf01aa6bad542b4679b</sha1>
|
||||
</file>
|
||||
<file name="screenshot_00.jpg" source="original">
|
||||
<mtime>1491281467</mtime>
|
||||
<size>52120</size>
|
||||
<md5>7d245fb52df6210d6cdfb9b167d46cb3</md5>
|
||||
<crc32>fd17335d</crc32>
|
||||
<sha1>22bc557b1b0a37a00bfadad1ee2d2e4411f7f2ca</sha1>
|
||||
<format>JPEG</format>
|
||||
<rotation>0</rotation>
|
||||
</file>
|
||||
<file name="screenshot_00_thumb.jpg" source="derivative">
|
||||
<format>JPEG Thumb</format>
|
||||
<original>screenshot_00.jpg</original>
|
||||
<mtime>1491281491</mtime>
|
||||
<size>3068</size>
|
||||
<md5>cd861d5b5e77c8447a8661fdd54b70e2</md5>
|
||||
<crc32>9a2841e9</crc32>
|
||||
<sha1>6ae3d31cc772641a74458e5071435b87cf7b0998</sha1>
|
||||
</file>
|
||||
</files>
|
BIN
happy-mac.png
Normal file
After Width: | Height: | Size: 19 KiB |
131
index.html
Normal file
@ -0,0 +1,131 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>System 7</title>
|
||||
<meta name="viewport" content="initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, width=device-width, height=device-height">
|
||||
<link rel="manifest" href="manifest.json">
|
||||
|
||||
<script>window.archive_setup=[]</script>
|
||||
|
||||
<script src="index_files/jquery-1.js"></script>
|
||||
<script src="index_files/bootstrap.js"></script>
|
||||
<script src="index_files/jwplayer.js"></script>
|
||||
<script src="index_files/react.js"></script>
|
||||
<script src="index_files/react-dom.js"></script>
|
||||
<script src="index_files/play8.js"></script>
|
||||
<script src="index_files/playset.js"></script>
|
||||
<script src="index_files/polyfill.js"></script>
|
||||
<script src="index_files/archive.js"></script>
|
||||
<script src="index_files/loader.js"></script>
|
||||
<script src="index_files/browserfs.js"></script>
|
||||
|
||||
<script src="pressure-v2.1.2.js"></script>
|
||||
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-title" content="System 7">
|
||||
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
||||
|
||||
<meta name="description" content="This pair of compilation hard drives contains a full copy of MacOS 7.0.1, along with a range of games, applications, utilities and toys to demonstrate the...">
|
||||
<meta property="og:title" content="MacOS System 7.0.1 Compilation : Apple Computer : Free Download, Borrow, and Streaming : Internet Archive">
|
||||
<meta property="og:description" content="This pair of compilation hard drives contains a full copy of MacOS 7.0.1, along with a range of games, applications, utilities and toys to demonstrate the...">
|
||||
<meta property="og:site_name" content="Internet Archive">
|
||||
<meta property="og:image" content="https://archive.org/services/img/mac_MacOS_7.0.1_compilation">
|
||||
<meta property="og:url" content="https://archive.org/details/mac_MacOS_7.0.1_compilation">
|
||||
<link rel="canonical" href="https://archive.org/details/mac_MacOS_7.0.1_compilation">
|
||||
|
||||
<link href="index_files/archive.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body class="navia embedded ia-module tiles">
|
||||
<!-- Wraps all page content -->
|
||||
<div id="wrap">
|
||||
|
||||
<!--HTML-->
|
||||
<div id="emulate">
|
||||
<div id="canvasholder">
|
||||
<canvas id="canvas" style="width:100%;height:100%" width="300" height="150"></canvas>
|
||||
<div id="gamepadtext"></div>
|
||||
<button id="keyboardBtn" onclick="keyboardBtnClicked()">⌨️</button> <!-- keyboard emoji -->
|
||||
<input id="keyboardInput" type="text">
|
||||
</div>
|
||||
</div><!--/#emulate-->
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
body.embedded {
|
||||
background-color:black;
|
||||
}
|
||||
|
||||
#emulate {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#canvas {
|
||||
/*cursor: none;*/
|
||||
}
|
||||
|
||||
#keyboardBtn {
|
||||
width: 20%;
|
||||
float: right;
|
||||
}
|
||||
|
||||
#keyboardInput {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
img.emularity-splash-image {
|
||||
display: none !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
if ("standalone" in navigator && !navigator.standalone) {
|
||||
alert("Add to Home Screen to be able to use it!");
|
||||
return;
|
||||
}
|
||||
|
||||
AJS.emulate_setup({"url":"\/stream\/mac_MacOS_7.0.1_compilation?module=pce-macplus&scale=1","identifier":"mac_MacOS_7.0.1_compilation","module":"pce-macplus","scale":"1","screenshot":"\/serve\/mac_MacOS_7.0.1_compilation\/_screenshot.gif"});
|
||||
AJS.emulate();
|
||||
|
||||
// prevIsDeep is to be saved by pce-macplus.js
|
||||
var prevIsDeep = false, isDeep = false;
|
||||
|
||||
Pressure.set("#canvas", {
|
||||
start: function(event){
|
||||
// this is called on force start
|
||||
},
|
||||
end: function(){
|
||||
// this is called on force end
|
||||
},
|
||||
startDeepPress: function(event) {
|
||||
// this is called on "force click" / "deep press", aka once the force is greater than 0.5
|
||||
console.log("deeeeeep");
|
||||
isDeep = true;
|
||||
},
|
||||
endDeepPress: function(){
|
||||
// this is called when the "force click" / "deep press" end
|
||||
console.log("shalloooow");
|
||||
isDeep = false;
|
||||
},
|
||||
change: function(force, event) {
|
||||
// this is called every time there is a change in pressure
|
||||
// force will always be a value from 0 to 1 on mobile and desktop
|
||||
},
|
||||
unsupported: function(){
|
||||
// NOTE: this is only called if the polyfill option is disabled!
|
||||
// this is called once there is a touch on the element and the device or browser does not support Force or 3D touch
|
||||
}
|
||||
});
|
||||
|
||||
function keyboardBtnClicked() {
|
||||
document.getElementById("keyboardInput").focus();
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
BIN
index_files/_screenshot.gif
Normal file
After Width: | Height: | Size: 63 KiB |
270
index_files/analytics.js
Normal file
@ -0,0 +1,270 @@
|
||||
/* eslint-disable no-var, semi, prefer-arrow-callback, prefer-template */
|
||||
|
||||
/**
|
||||
* Collection of methods for sending analytics events to Archive.org's analytics server.
|
||||
*
|
||||
* These events are used for internal stats and sent (in anonymized form) to Google Analytics.
|
||||
*
|
||||
* @see analytics.md
|
||||
*
|
||||
* @type {Object}
|
||||
*/
|
||||
window.archive_analytics = (function defineArchiveAnalytics() {
|
||||
var DEFAULT_SERVICE = 'ao_2';
|
||||
|
||||
var startTime = new Date();
|
||||
|
||||
/**
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function isPerformanceTimingApiSupported() {
|
||||
return 'performance' in window && 'timing' in window.performance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines how many milliseconds elapsed between the browser starting to parse the DOM and
|
||||
* the current time.
|
||||
*
|
||||
* Uses the Performance API or a fallback value if it's not available.
|
||||
*
|
||||
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
|
||||
*
|
||||
* @return {Number}
|
||||
*/
|
||||
function getLoadTime() {
|
||||
var start;
|
||||
|
||||
if (isPerformanceTimingApiSupported())
|
||||
start = window.performance.timing.domLoading;
|
||||
else
|
||||
start = startTime.getTime();
|
||||
|
||||
return new Date().getTime() - start;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines how many milliseconds elapsed between the user navigating to the page and
|
||||
* the current time.
|
||||
*
|
||||
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
|
||||
*
|
||||
* @return {Number|null} null if the browser doesn't support the Performance API
|
||||
*/
|
||||
function getNavToDoneTime() {
|
||||
if (!isPerformanceTimingApiSupported())
|
||||
return null;
|
||||
|
||||
return new Date().getTime() - window.performance.timing.navigationStart;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs an arithmetic calculation on a string with a number and unit, while maintaining
|
||||
* the unit.
|
||||
*
|
||||
* @param {String} original value to modify, with a unit
|
||||
* @param {Function} doOperation accepts one Number parameter, returns a Number
|
||||
* @returns {String}
|
||||
*/
|
||||
function computeWithUnit(original, doOperation) {
|
||||
var number = parseFloat(original, 10);
|
||||
var unit = original.replace(/(\d*\.\d+)|\d+/, '');
|
||||
|
||||
return doOperation(number) + unit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the default font size of the browser.
|
||||
*
|
||||
* @returns {String|null} computed font-size with units (typically pixels), null if it cannot be computed
|
||||
*/
|
||||
function getDefaultFontSize() {
|
||||
var fontSizeStr;
|
||||
|
||||
if (!('getComputedStyle' in window))
|
||||
return null;
|
||||
|
||||
fontSizeStr = window.getComputedStyle(document.documentElement).fontSize;
|
||||
|
||||
// Don't modify the value if tracking book reader.
|
||||
if (document.documentElement.classList.contains('BookReaderRoot'))
|
||||
return fontSizeStr;
|
||||
|
||||
return computeWithUnit(fontSizeStr, function reverseBootstrapFontSize(number) {
|
||||
// Undo the 62.5% size applied in the Bootstrap CSS.
|
||||
return number * 1.6;
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
/**
|
||||
* @type {String|null}
|
||||
*/
|
||||
service: null,
|
||||
|
||||
/**
|
||||
* Key-value pairs to send in pageviews (you can read this after a pageview to see what was
|
||||
* sent).
|
||||
*
|
||||
* @type {Object}
|
||||
*/
|
||||
values: {},
|
||||
|
||||
/**
|
||||
* @param {Object} values
|
||||
* @param {Function} [onload_callback] (deprecated) callback to invoke once ping to analytics server is done
|
||||
* @param {Boolean} [augment_for_ao_site] (deprecated) if true, add some archive.org site-specific values
|
||||
*/
|
||||
send_ping: function send_ping(values, onload_callback, augment_for_ao_site) {
|
||||
var img_src = "//analytics.archive.org/0.gif";
|
||||
|
||||
if (!values)
|
||||
values = {};
|
||||
|
||||
function format_ping(values) {
|
||||
var ret = [];
|
||||
var count = 2;
|
||||
var version = 2;
|
||||
|
||||
for (var data in values) {
|
||||
ret.push(encodeURIComponent(data) + "=" + encodeURIComponent(values[data]));
|
||||
count = count + 1;
|
||||
}
|
||||
|
||||
ret.push('version=' + version);
|
||||
ret.push('count=' + count);
|
||||
return ret.join("&");
|
||||
}
|
||||
|
||||
// Automatically set service.
|
||||
if (!values.service && this.service)
|
||||
values.service = this.service;
|
||||
|
||||
if (augment_for_ao_site && !values.service)
|
||||
values.service = DEFAULT_SERVICE;
|
||||
|
||||
var string = format_ping(values);
|
||||
|
||||
var loadtime_img = new Image(100,25);
|
||||
if (onload_callback && typeof(onload_callback)=='function')
|
||||
loadtime_img.onload = onload_callback;
|
||||
loadtime_img.src = img_src + "?" + string;
|
||||
},
|
||||
|
||||
send_scroll_fetch_event: function send_scroll_fetch_event(page) {
|
||||
var values = {
|
||||
kind: 'event',
|
||||
ec: 'page_action',
|
||||
ea: 'scroll_fetch',
|
||||
el: location.pathname,
|
||||
ev: page, // int
|
||||
cache_bust: Math.random()
|
||||
};
|
||||
|
||||
var loadTime = getLoadTime();
|
||||
var navToDoneTime = getNavToDoneTime();
|
||||
|
||||
if (loadTime)
|
||||
values.loadtime = loadTime;
|
||||
if (navToDoneTime)
|
||||
values.nav_to_done_ms = navToDoneTime;
|
||||
|
||||
this.send_ping(values);
|
||||
},
|
||||
|
||||
send_scroll_fetch_base_event: function send_scroll_fetch_base_event() {
|
||||
var values = {
|
||||
kind: 'event',
|
||||
ec: 'page_action',
|
||||
ea: 'scroll_fetch_base',
|
||||
el: location.pathname,
|
||||
cache_bust: Math.random(),
|
||||
};
|
||||
|
||||
var loadTime = getLoadTime();
|
||||
var navToDoneTime = getNavToDoneTime();
|
||||
|
||||
if (loadTime)
|
||||
values.loadtime = loadTime;
|
||||
if (navToDoneTime)
|
||||
values.nav_to_done_ms = navToDoneTime;
|
||||
|
||||
this.send_ping(values);
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {Object} options
|
||||
* @param {String} [options.mediaType]
|
||||
*/
|
||||
send_pageview: function send_pageview(options) {
|
||||
var settings = options || {};
|
||||
|
||||
var defaultFontSize;
|
||||
var loadTime = getLoadTime();
|
||||
var mediaType = settings.mediaType;
|
||||
var navToDoneTime = getNavToDoneTime();
|
||||
|
||||
/**
|
||||
* @return {String}
|
||||
*/
|
||||
function get_locale() {
|
||||
if (navigator) {
|
||||
if (navigator.language)
|
||||
return navigator.language;
|
||||
|
||||
else if (navigator.browserLanguage)
|
||||
return navigator.browserLanguage;
|
||||
|
||||
else if (navigator.systemLanguage)
|
||||
return navigator.systemLanguage;
|
||||
|
||||
else if (navigator.userLanguage)
|
||||
return navigator.userLanguage;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
defaultFontSize = getDefaultFontSize();
|
||||
|
||||
// Set field values
|
||||
this.values.kind = 'pageview';
|
||||
this.values.timediff = (new Date().getTimezoneOffset()/60)*(-1); // *timezone* diff from UTC
|
||||
this.values.locale = get_locale();
|
||||
this.values.referrer = (document.referrer == '' ? '-' : document.referrer);
|
||||
|
||||
if (loadTime)
|
||||
this.values.loadtime = loadTime;
|
||||
|
||||
if (navToDoneTime)
|
||||
this.values.nav_to_done_ms = navToDoneTime;
|
||||
|
||||
if (defaultFontSize)
|
||||
this.values.ga_cd1 = defaultFontSize;
|
||||
|
||||
if ('devicePixelRatio' in window)
|
||||
this.values.ga_cd2 = window.devicePixelRatio;
|
||||
|
||||
if (mediaType)
|
||||
this.values.ga_cd3 = mediaType;
|
||||
|
||||
this.send_ping(this.values);
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {Object} options see this.send_pageview options
|
||||
*/
|
||||
send_pageview_on_load: function send_pageview_on_load(options) {
|
||||
var self = this;
|
||||
|
||||
window.addEventListener('load', function send_pageview_with_options() {
|
||||
self.send_pageview(options);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {Object[]}
|
||||
*/
|
||||
get_data_packets: function get_data_packets() {
|
||||
return [this.values];
|
||||
},
|
||||
};
|
||||
}());
|
13212
index_files/archive.css
Normal file
21
index_files/archive.js
Normal file
11
index_files/bootstrap.js
vendored
Normal file
14
index_files/browserfs.js
Normal file
6
index_files/jquery-1.js
vendored
Normal file
95
index_files/jwplayer.js
Normal file
1754
index_files/loader.js
Normal file
2
index_files/play8.js
Normal file
2
index_files/playset.js
Normal file
2
index_files/polyfill.js
Normal file
12
index_files/react-dom.js
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* ReactDOM v15.2.0
|
||||
*
|
||||
* Copyright 2013-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
*/
|
||||
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e(require("react"));else if("function"==typeof define&&define.amd)define(["react"],e);else{var f;f="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,f.ReactDOM=e(f.React)}}(function(e){return e.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED});
|
16
index_files/react.js
vendored
Normal file
BIN
index_files/start.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
mac_MacOS_7.0.1_compilation/hd1.img
Normal file
BIN
mac_MacOS_7.0.1_compilation/hd2.img
Normal file
6
manifest.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "System 7",
|
||||
"display": "fullscreen",
|
||||
"orientation": "landscape",
|
||||
"start_url": "/index.html"
|
||||
}
|
20
meta.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<identifier>mac_MacOS_7.0.1_compilation</identifier>
|
||||
<collection>softwarelibrary_mac</collection>
|
||||
<emulator>pce-macplus</emulator>
|
||||
<emulator_ext>img</emulator_ext>
|
||||
<mediatype>software</mediatype>
|
||||
<scanner>Internet Archive Python library 1.4.0</scanner>
|
||||
<title>MacOS System 7.0.1 Compilation</title>
|
||||
<publicdate>2017-04-04 04:12:22</publicdate>
|
||||
<uploader>jscott@archive.org</uploader>
|
||||
<addeddate>2017-04-04 04:12:22</addeddate>
|
||||
<collection>softwarelibrary</collection>
|
||||
<pce_drive_hd1>hd1.img</pce_drive_hd1>
|
||||
<pce_drive_hd2>hd2.img</pce_drive_hd2>
|
||||
<creator>Apple Computer</creator>
|
||||
<description>This pair of compilation hard drives contains a full copy of MacOS 7.0.1, along with a range of games, applications, utilities and toys to demonstrate the experience of using an early Macintosh computer.<div><br /></div><div><b>System Programs: </b>HyperCard, Macintosh Basics, Control Panels.</div><div><b>Applications: </b>BBEdit Lite, MacDraw, MacPaint, Microsoft Excel, Microsoft Word, Microsoft Works, Orion, Pagemaker, ZTerm.</div><div><b>Games: </b>Risk, Cannon Fodder, Shufflepuck.</div><div><b>Utilities: </b>HD Setup, Disinfectant, Disk Copy, ResEdit, TeachText, Compact Pro, Mac Gzip, Mar, Stuffit Expander, Stuffit Lite.</div><div><b>Toys: </b>Alarm Clock, Calculator, Note Pad, Puzzle, Scrapbook.<br /><div><br /></div><div><i>General History:</i><br /><div><br /></div><div><div>System 7 (codenamed "Big Bang" and sometimes retrospectively called Mac OS 7) is a single-user graphical user interface-based operating system for Macintosh computers and was part of the classic Mac OS line of operating systems. It was introduced on May 13, 1991, by Apple Computer. It succeeded System 6, and was the main Macintosh operating system until it was succeeded by Mac OS 8 in 1997. Features added with the System 7 release included virtual memory, personal file sharing, QuickTime, QuickDraw 3D, and an improved user interface.</div><div><br /></div><div>"System 7" is often used generically to refer to all 7.x versions. With the release of version 7.6 in 1997, Apple officially renamed the operating system "Mac OS", a name which had first appeared on System 7.5.1's boot screen. System 7 was developed for Macs that used the Motorola 680x0 line of processors, but was ported to the PowerPC after Apple adopted the new processor.</div></div><div><br /></div><div><div>System 7 was the first Apple operating system to be available on CD, although it shipped on a set of 15 floppy disks initially. Unlike earlier systems, System 7 itself did not come bundled with major software packages. Newly purchased Macintosh computers had System 7 installed and were often bundled with software such as HyperCard, At Ease and Mouse Practice. Later, the Macintosh Performa series added various software bundles including third-party software such as ClarisWorks, The New Grolier Multimedia Encyclopedia, Microsoft Bookshelf, Spectre VR and Power Pete. Since System 7 was introduced before the Internet came to popular attention, software such as MacTCP, FreePPP and Netscape were not included at first, but was later available on disk from Internet service providers and bundled with books such as Adam C. Engst's Internet Starter Kit for Macintosh. PowerPC Macintoshes included Graphing Calculator. System 7 also included AppleTalk networking and file sharing software in the form of system extensions and control panels.</div><div><br /></div><div>The basic utilities installed by default with System 7 included TeachText (superseded by the more flexible SimpleText in later versions) for basic text editing tasks and reading readme documents. Also available on the additional "Disk Tools" floppy disk are Disk First Aid for disk repair and Apple HD SC Setup for initializing and partitioning disks.</div></div></div></div></description>
|
||||
<date>1991</date>
|
||||
<year>1991</year>
|
||||
</metadata>
|
BIN
other_logos/dosbox.png
Normal file
After Width: | Height: | Size: 86 B |
BIN
other_logos/ia-logo-150x150.png
Normal file
After Width: | Height: | Size: 481 B |
BIN
other_logos/mame.png
Normal file
After Width: | Height: | Size: 86 B |
BIN
other_logos/pce.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
other_logos/sae.png
Normal file
After Width: | Height: | Size: 86 B |
576
pressure-v2.1.2.js
Normal file
@ -0,0 +1,576 @@
|
||||
// Pressure v2.1.2 | Created By Stuart Yamartino | MIT License | 2015 - 2017
|
||||
;(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define([], factory);
|
||||
} else if (typeof exports === 'object') {
|
||||
module.exports = factory();
|
||||
} else {
|
||||
root.Pressure = factory();
|
||||
}
|
||||
}(this, function() {
|
||||
'use strict';
|
||||
|
||||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
||||
|
||||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
||||
|
||||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
||||
|
||||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
//--------------------- Public API Section ---------------------//
|
||||
// this is the Pressure Object, this is the only object that is accessible to the end user
|
||||
// only the methods in this object can be called, making it the "public api"
|
||||
|
||||
var Pressure = {
|
||||
|
||||
// targets any device with Force or 3D Touch
|
||||
set: function set(selector, closure, options) {
|
||||
loopPressureElements(selector, closure, options);
|
||||
},
|
||||
|
||||
|
||||
// set configuration options for global config
|
||||
config: function config(options) {
|
||||
Config.set(options);
|
||||
},
|
||||
|
||||
|
||||
// the map method allows for interpolating a value from one range of values to another
|
||||
// example from the Arduino documentation: https://www.arduino.cc/en/Reference/Map
|
||||
map: function map(x, in_min, in_max, out_min, out_max) {
|
||||
return _map.apply(null, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
var Element = function () {
|
||||
function Element(el, block, options) {
|
||||
_classCallCheck(this, Element);
|
||||
|
||||
this.routeEvents(el, block, options);
|
||||
this.preventSelect(el, options);
|
||||
}
|
||||
|
||||
_createClass(Element, [{
|
||||
key: 'routeEvents',
|
||||
value: function routeEvents(el, block, options) {
|
||||
var type = Config.get('only', options);
|
||||
// for devices that support pointer events
|
||||
if (supportsPointer && (type === 'pointer' || type === null)) {
|
||||
this.adapter = new AdapterPointer(el, block, options).bindEvents();
|
||||
}
|
||||
// for devices that support 3D Touch
|
||||
else if (supportsTouch && (type === 'touch' || type === null)) {
|
||||
this.adapter = new Adapter3DTouch(el, block, options).bindEvents();
|
||||
}
|
||||
// for devices that support Force Touch
|
||||
else if (supportsMouse && (type === 'mouse' || type === null)) {
|
||||
this.adapter = new AdapterForceTouch(el, block, options).bindEvents();
|
||||
}
|
||||
// unsupported if it is requesting a type and your browser is of other type
|
||||
else {
|
||||
this.adapter = new Adapter(el, block).bindUnsupportedEvent();
|
||||
}
|
||||
}
|
||||
|
||||
// prevent the default action of text selection, "peak & pop", and force touch special feature
|
||||
|
||||
}, {
|
||||
key: 'preventSelect',
|
||||
value: function preventSelect(el, options) {
|
||||
if (Config.get('preventSelect', options)) {
|
||||
el.style.webkitTouchCallout = "none";
|
||||
el.style.webkitUserSelect = "none";
|
||||
el.style.khtmlUserSelect = "none";
|
||||
el.style.MozUserSelect = "none";
|
||||
el.style.msUserSelect = "none";
|
||||
el.style.userSelect = "none";
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
return Element;
|
||||
}();
|
||||
|
||||
/*
|
||||
This is the base adapter from which all the other adapters extend.
|
||||
*/
|
||||
|
||||
var Adapter = function () {
|
||||
function Adapter(el, block, options) {
|
||||
_classCallCheck(this, Adapter);
|
||||
|
||||
this.el = el;
|
||||
this.block = block;
|
||||
this.options = options;
|
||||
this.pressed = false;
|
||||
this.deepPressed = false;
|
||||
this.nativeSupport = false;
|
||||
this.runningPolyfill = false;
|
||||
this.runKey = Math.random();
|
||||
}
|
||||
|
||||
_createClass(Adapter, [{
|
||||
key: 'setPressed',
|
||||
value: function setPressed(boolean) {
|
||||
this.pressed = boolean;
|
||||
}
|
||||
}, {
|
||||
key: 'setDeepPressed',
|
||||
value: function setDeepPressed(boolean) {
|
||||
this.deepPressed = boolean;
|
||||
}
|
||||
}, {
|
||||
key: 'isPressed',
|
||||
value: function isPressed() {
|
||||
return this.pressed;
|
||||
}
|
||||
}, {
|
||||
key: 'isDeepPressed',
|
||||
value: function isDeepPressed() {
|
||||
return this.deepPressed;
|
||||
}
|
||||
}, {
|
||||
key: 'add',
|
||||
value: function add(event, set) {
|
||||
this.el.addEventListener(event, set, false);
|
||||
}
|
||||
}, {
|
||||
key: 'runClosure',
|
||||
value: function runClosure(method) {
|
||||
if (method in this.block) {
|
||||
// call the closure method and apply nth arguments if they exist
|
||||
this.block[method].apply(this.el, Array.prototype.slice.call(arguments, 1));
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'fail',
|
||||
value: function fail(event, runKey) {
|
||||
if (Config.get('polyfill', this.options)) {
|
||||
if (this.runKey === runKey) {
|
||||
this.runPolyfill(event);
|
||||
}
|
||||
} else {
|
||||
this.runClosure('unsupported', event);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'bindUnsupportedEvent',
|
||||
value: function bindUnsupportedEvent() {
|
||||
var _this = this;
|
||||
|
||||
this.add(supportsTouch ? 'touchstart' : 'mousedown', function (event) {
|
||||
return _this.runClosure('unsupported', event);
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: '_startPress',
|
||||
value: function _startPress(event) {
|
||||
if (this.isPressed() === false) {
|
||||
this.runningPolyfill = false;
|
||||
this.setPressed(true);
|
||||
this.runClosure('start', event);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: '_startDeepPress',
|
||||
value: function _startDeepPress(event) {
|
||||
if (this.isPressed() && this.isDeepPressed() === false) {
|
||||
this.setDeepPressed(true);
|
||||
this.runClosure('startDeepPress', event);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: '_changePress',
|
||||
value: function _changePress(force, event) {
|
||||
this.nativeSupport = true;
|
||||
this.runClosure('change', force, event);
|
||||
}
|
||||
}, {
|
||||
key: '_endDeepPress',
|
||||
value: function _endDeepPress() {
|
||||
if (this.isPressed() && this.isDeepPressed()) {
|
||||
this.setDeepPressed(false);
|
||||
this.runClosure('endDeepPress');
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: '_endPress',
|
||||
value: function _endPress() {
|
||||
if (this.runningPolyfill === false) {
|
||||
if (this.isPressed()) {
|
||||
this._endDeepPress();
|
||||
this.setPressed(false);
|
||||
this.runClosure('end');
|
||||
}
|
||||
this.runKey = Math.random();
|
||||
this.nativeSupport = false;
|
||||
} else {
|
||||
this.setPressed(false);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'deepPress',
|
||||
value: function deepPress(force, event) {
|
||||
force >= 0.5 ? this._startDeepPress(event) : this._endDeepPress();
|
||||
}
|
||||
}, {
|
||||
key: 'runPolyfill',
|
||||
value: function runPolyfill(event) {
|
||||
this.increment = Config.get('polyfillSpeedUp', this.options) === 0 ? 1 : 10 / Config.get('polyfillSpeedUp', this.options);
|
||||
this.decrement = Config.get('polyfillSpeedDown', this.options) === 0 ? 1 : 10 / Config.get('polyfillSpeedDown', this.options);
|
||||
this.setPressed(true);
|
||||
this.runClosure('start', event);
|
||||
if (this.runningPolyfill === false) {
|
||||
this.loopPolyfillForce(0, event);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'loopPolyfillForce',
|
||||
value: function loopPolyfillForce(force, event) {
|
||||
if (this.nativeSupport === false) {
|
||||
if (this.isPressed()) {
|
||||
this.runningPolyfill = true;
|
||||
force = force + this.increment > 1 ? 1 : force + this.increment;
|
||||
this.runClosure('change', force, event);
|
||||
this.deepPress(force, event);
|
||||
setTimeout(this.loopPolyfillForce.bind(this, force, event), 10);
|
||||
} else {
|
||||
force = force - this.decrement < 0 ? 0 : force - this.decrement;
|
||||
if (force < 0.5 && this.isDeepPressed()) {
|
||||
this.setDeepPressed(false);
|
||||
this.runClosure('endDeepPress');
|
||||
}
|
||||
if (force === 0) {
|
||||
this.runningPolyfill = false;
|
||||
this.setPressed(true);
|
||||
this._endPress();
|
||||
} else {
|
||||
this.runClosure('change', force, event);
|
||||
this.deepPress(force, event);
|
||||
setTimeout(this.loopPolyfillForce.bind(this, force, event), 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
return Adapter;
|
||||
}();
|
||||
|
||||
/*
|
||||
This adapter is for Macs with Force Touch trackpads.
|
||||
*/
|
||||
|
||||
var AdapterForceTouch = function (_Adapter) {
|
||||
_inherits(AdapterForceTouch, _Adapter);
|
||||
|
||||
function AdapterForceTouch(el, block, options) {
|
||||
_classCallCheck(this, AdapterForceTouch);
|
||||
|
||||
return _possibleConstructorReturn(this, (AdapterForceTouch.__proto__ || Object.getPrototypeOf(AdapterForceTouch)).call(this, el, block, options));
|
||||
}
|
||||
|
||||
_createClass(AdapterForceTouch, [{
|
||||
key: 'bindEvents',
|
||||
value: function bindEvents() {
|
||||
this.add('webkitmouseforcewillbegin', this._startPress.bind(this));
|
||||
this.add('mousedown', this.support.bind(this));
|
||||
this.add('webkitmouseforcechanged', this.change.bind(this));
|
||||
this.add('webkitmouseforcedown', this._startDeepPress.bind(this));
|
||||
this.add('webkitmouseforceup', this._endDeepPress.bind(this));
|
||||
this.add('mouseleave', this._endPress.bind(this));
|
||||
this.add('mouseup', this._endPress.bind(this));
|
||||
}
|
||||
}, {
|
||||
key: 'support',
|
||||
value: function support(event) {
|
||||
if (this.isPressed() === false) {
|
||||
this.fail(event, this.runKey);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'change',
|
||||
value: function change(event) {
|
||||
if (this.isPressed() && event.webkitForce > 0) {
|
||||
this._changePress(this.normalizeForce(event.webkitForce), event);
|
||||
}
|
||||
}
|
||||
|
||||
// make the force the standard 0 to 1 scale and not the 1 to 3 scale
|
||||
|
||||
}, {
|
||||
key: 'normalizeForce',
|
||||
value: function normalizeForce(force) {
|
||||
return this.reachOne(_map(force, 1, 3, 0, 1));
|
||||
}
|
||||
|
||||
// if the force value is above 0.995 set the force to 1
|
||||
|
||||
}, {
|
||||
key: 'reachOne',
|
||||
value: function reachOne(force) {
|
||||
return force > 0.995 ? 1 : force;
|
||||
}
|
||||
}]);
|
||||
|
||||
return AdapterForceTouch;
|
||||
}(Adapter);
|
||||
|
||||
/*
|
||||
This adapter is more mobile devices that support 3D Touch.
|
||||
*/
|
||||
|
||||
var Adapter3DTouch = function (_Adapter2) {
|
||||
_inherits(Adapter3DTouch, _Adapter2);
|
||||
|
||||
function Adapter3DTouch(el, block, options) {
|
||||
_classCallCheck(this, Adapter3DTouch);
|
||||
|
||||
return _possibleConstructorReturn(this, (Adapter3DTouch.__proto__ || Object.getPrototypeOf(Adapter3DTouch)).call(this, el, block, options));
|
||||
}
|
||||
|
||||
_createClass(Adapter3DTouch, [{
|
||||
key: 'bindEvents',
|
||||
value: function bindEvents() {
|
||||
if (supportsTouchForceChange) {
|
||||
this.add('touchforcechange', this.start.bind(this));
|
||||
this.add('touchstart', this.support.bind(this, 0));
|
||||
this.add('touchend', this._endPress.bind(this));
|
||||
} else {
|
||||
this.add('touchstart', this.startLegacy.bind(this));
|
||||
this.add('touchend', this._endPress.bind(this));
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'start',
|
||||
value: function start(event) {
|
||||
if (event.touches.length > 0) {
|
||||
this._startPress(event);
|
||||
this.touch = this.selectTouch(event);
|
||||
if (this.touch) {
|
||||
this._changePress(this.touch.force, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'support',
|
||||
value: function support(iter, event) {
|
||||
var runKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.runKey;
|
||||
|
||||
if (this.isPressed() === false) {
|
||||
if (iter <= 6) {
|
||||
iter++;
|
||||
setTimeout(this.support.bind(this, iter, event, runKey), 10);
|
||||
} else {
|
||||
this.fail(event, runKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'startLegacy',
|
||||
value: function startLegacy(event) {
|
||||
this.initialForce = event.touches[0].force;
|
||||
this.supportLegacy(0, event, this.runKey, this.initialForce);
|
||||
}
|
||||
|
||||
// this checks up to 6 times on a touch to see if the touch can read a force value
|
||||
// if the force value has changed it means the device supports pressure
|
||||
// more info from this issue https://github.com/yamartino/pressure/issues/15
|
||||
|
||||
}, {
|
||||
key: 'supportLegacy',
|
||||
value: function supportLegacy(iter, event, runKey, force) {
|
||||
if (force !== this.initialForce) {
|
||||
this._startPress(event);
|
||||
this.loopForce(event);
|
||||
} else if (iter <= 6) {
|
||||
iter++;
|
||||
setTimeout(this.supportLegacy.bind(this, iter, event, runKey, force), 10);
|
||||
} else {
|
||||
this.fail(event, runKey);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'loopForce',
|
||||
value: function loopForce(event) {
|
||||
if (this.isPressed()) {
|
||||
this.touch = this.selectTouch(event);
|
||||
setTimeout(this.loopForce.bind(this, event), 10);
|
||||
this._changePress(this.touch.force, event);
|
||||
}
|
||||
}
|
||||
|
||||
// link up the touch point to the correct element, this is to support multitouch
|
||||
|
||||
}, {
|
||||
key: 'selectTouch',
|
||||
value: function selectTouch(event) {
|
||||
if (event.touches.length === 1) {
|
||||
return this.returnTouch(event.touches[0], event);
|
||||
} else {
|
||||
for (var i = 0; i < event.touches.length; i++) {
|
||||
// if the target press is on this element
|
||||
if (event.touches[i].target === this.el || this.el.contains(event.touches[i].target)) {
|
||||
return this.returnTouch(event.touches[i], event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// return the touch and run a start or end for deep press
|
||||
|
||||
}, {
|
||||
key: 'returnTouch',
|
||||
value: function returnTouch(touch, event) {
|
||||
this.deepPress(touch.force, event);
|
||||
return touch;
|
||||
}
|
||||
}]);
|
||||
|
||||
return Adapter3DTouch;
|
||||
}(Adapter);
|
||||
|
||||
/*
|
||||
This adapter is for devices that support pointer events.
|
||||
*/
|
||||
|
||||
var AdapterPointer = function (_Adapter3) {
|
||||
_inherits(AdapterPointer, _Adapter3);
|
||||
|
||||
function AdapterPointer(el, block, options) {
|
||||
_classCallCheck(this, AdapterPointer);
|
||||
|
||||
return _possibleConstructorReturn(this, (AdapterPointer.__proto__ || Object.getPrototypeOf(AdapterPointer)).call(this, el, block, options));
|
||||
}
|
||||
|
||||
_createClass(AdapterPointer, [{
|
||||
key: 'bindEvents',
|
||||
value: function bindEvents() {
|
||||
this.add('pointerdown', this.support.bind(this));
|
||||
this.add('pointermove', this.change.bind(this));
|
||||
this.add('pointerup', this._endPress.bind(this));
|
||||
this.add('pointerleave', this._endPress.bind(this));
|
||||
}
|
||||
}, {
|
||||
key: 'support',
|
||||
value: function support(event) {
|
||||
if (this.isPressed() === false) {
|
||||
if (event.pressure === 0 || event.pressure === 0.5 || event.pressure > 1) {
|
||||
this.fail(event, this.runKey);
|
||||
} else {
|
||||
this._startPress(event);
|
||||
this._changePress(event.pressure, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'change',
|
||||
value: function change(event) {
|
||||
if (this.isPressed() && event.pressure > 0 && event.pressure !== 0.5) {
|
||||
this._changePress(event.pressure, event);
|
||||
this.deepPress(event.pressure, event);
|
||||
}
|
||||
}
|
||||
}]);
|
||||
|
||||
return AdapterPointer;
|
||||
}(Adapter);
|
||||
|
||||
// This class holds the states of the the Pressure config
|
||||
|
||||
|
||||
var Config = {
|
||||
|
||||
// 'false' will make polyfill not run when pressure is not supported and the 'unsupported' method will be called
|
||||
polyfill: true,
|
||||
|
||||
// milliseconds it takes to go from 0 to 1 for the polyfill
|
||||
polyfillSpeedUp: 1000,
|
||||
|
||||
// milliseconds it takes to go from 1 to 0 for the polyfill
|
||||
polyfillSpeedDown: 0,
|
||||
|
||||
// 'true' prevents the selecting of text and images via css properties
|
||||
preventSelect: true,
|
||||
|
||||
// 'touch', 'mouse', or 'pointer' will make it run only on that type of device
|
||||
only: null,
|
||||
|
||||
// this will get the correct config / option settings for the current pressure check
|
||||
get: function get(option, options) {
|
||||
return options.hasOwnProperty(option) ? options[option] : this[option];
|
||||
},
|
||||
|
||||
|
||||
// this will set the global configs
|
||||
set: function set(options) {
|
||||
for (var k in options) {
|
||||
if (options.hasOwnProperty(k) && this.hasOwnProperty(k) && k != 'get' && k != 'set') {
|
||||
this[k] = options[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//------------------- Helpers -------------------//
|
||||
|
||||
// accepts jQuery object, node list, string selector, then called a setup for each element
|
||||
var loopPressureElements = function loopPressureElements(selector, closure) {
|
||||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||
|
||||
// if a string is passed in as an element
|
||||
if (typeof selector === 'string' || selector instanceof String) {
|
||||
var elements = document.querySelectorAll(selector);
|
||||
for (var i = 0; i < elements.length; i++) {
|
||||
new Element(elements[i], closure, options);
|
||||
}
|
||||
// if a single element object is passed in
|
||||
} else if (isElement(selector)) {
|
||||
new Element(selector, closure, options);
|
||||
// if a node list is passed in ex. jQuery $() object
|
||||
} else {
|
||||
for (var i = 0; i < selector.length; i++) {
|
||||
new Element(selector[i], closure, options);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//Returns true if it is a DOM element
|
||||
var isElement = function isElement(o) {
|
||||
return (typeof HTMLElement === 'undefined' ? 'undefined' : _typeof(HTMLElement)) === "object" ? o instanceof HTMLElement : //DOM2
|
||||
o && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string";
|
||||
};
|
||||
|
||||
// the map method allows for interpolating a value from one range of values to another
|
||||
// example from the Arduino documentation: https://www.arduino.cc/en/Reference/Map
|
||||
var _map = function _map(x, in_min, in_max, out_min, out_max) {
|
||||
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||
};
|
||||
|
||||
var supportsMouse = false;
|
||||
var supportsTouch = false;
|
||||
var supportsPointer = false;
|
||||
var supportsTouchForce = false;
|
||||
var supportsTouchForceChange = false;
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
// only attempt to assign these in a browser environment.
|
||||
// on the server, this is a no-op, like the rest of the library
|
||||
if (typeof Touch !== 'undefined') {
|
||||
// In Android, new Touch requires arguments.
|
||||
try {
|
||||
if (Touch.prototype.hasOwnProperty('force') || 'force' in new Touch()) {
|
||||
supportsTouchForce = true;
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
supportsTouch = 'ontouchstart' in window.document && supportsTouchForce;
|
||||
supportsMouse = 'onmousemove' in window.document && !supportsTouch;
|
||||
supportsPointer = 'onpointermove' in window.document;
|
||||
supportsTouchForceChange = 'ontouchforcechange' in window.document;
|
||||
}
|
||||
return Pressure;
|
||||
}));
|