update libraries to latest

This commit is contained in:
Michael Deal 2012-11-06 13:06:08 -08:00
parent 5f6984123f
commit bec7710bdc
9 changed files with 240 additions and 105 deletions

View file

@ -1,12 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<script src="./js/DOMLoader.XMLHttp.js" type="text/javascript"></script>
<script src="./js/DOMLoader.script.js" type="text/javascript"></script>
<script src="./js/MIDI/audioDetect.js" type="text/javascript"></script>
<script src="./js/MIDI/loadPlugin.js" type="text/javascript"></script>
<script src="./js/MIDI/Plugin.js" type="text/javascript"></script>
<script src="./js/MIDI/Player.js" type="text/javascript"></script>
<script src="./js/Window/DOMLoader.XMLHttp.js" type="text/javascript"></script>
<script src="./js/Window/DOMLoader.script.js" type="text/javascript"></script>
<!-- base64 packages -->
<script src="./js/Polyfill/Base64.js" type="text/javascript"></script>
<script src="./inc/base64binary.js" type="text/javascript"></script>

View file

@ -6,16 +6,16 @@
<!-- soundfont.js css -->
<link href="./css/MIDIPlayer.css" rel="stylesheet" type="text/css" />
<!-- soundfont.js package -->
<script src="./js/Color/Space.js" type="text/javascript"></script>
<script src="./js/Event.js" type="text/javascript"></script>
<script src="./js/DOMLoader.XMLHttp.js" type="text/javascript"></script>
<script src="./js/DOMLoader.script.js" type="text/javascript"></script>
<script src="./js/Color/SpaceW3.js" type="text/javascript"></script>
<script src="./js/MIDI/audioDetect.js" type="text/javascript"></script>
<script src="./js/MIDI/loadPlugin.js" type="text/javascript"></script>
<script src="./js/MIDI/Plugin.js" type="text/javascript"></script>
<script src="./js/MIDI/Player.js" type="text/javascript"></script>
<script src="./js/MusicTheory/Synesthesia.js" type="text/javascript"></script>
<script src="./js/Widgets/Loader.js" type="text/javascript"></script>
<script src="./js/Window/Event.js" type="text/javascript"></script>
<script src="./js/Window/DOMLoader.XMLHttp.js" type="text/javascript"></script>
<script src="./js/Window/DOMLoader.script.js" type="text/javascript"></script>
<!-- jasmid package -->
<script src="./inc/jasmid/stream.js"></script>
<script src="./inc/jasmid/midifile.js"></script>

View file

@ -2,16 +2,16 @@
<html lang="en">
<head>
<title>Whitney Music Box in HTML5</title>
<script src="./js/Color/Space.js" type="text/javascript"></script>
<script src="./js/Event.js" type="text/javascript"></script>
<script src="./js/DOMLoader.XMLHttp.js" type="text/javascript"></script>
<script src="./js/DOMLoader.script.js" type="text/javascript"></script>
<script src="./js/Color/SpaceW3.js" type="text/javascript"></script>
<script src="./js/MIDI/audioDetect.js" type="text/javascript"></script>
<script src="./js/MIDI/loadPlugin.js" type="text/javascript"></script>
<script src="./js/MIDI/Plugin.js" type="text/javascript"></script>
<script src="./js/MIDI/Player.js" type="text/javascript"></script>
<script src="./js/MusicTheory/Synesthesia.js" type="text/javascript"></script>
<script src="./js/Widgets/Loader.js" type="text/javascript"></script>
<script src="./js/Window/Event.js" type="text/javascript"></script>
<script src="./js/Window/DOMLoader.XMLHttp.js" type="text/javascript"></script>
<script src="./js/Window/DOMLoader.script.js" type="text/javascript"></script>
<!-- base642binary package -->
<script src="./js/Polyfill/Base64.js" type="text/javascript"></script>
<script src="./inc/base64binary.js" type="text/javascript"></script>

View file

@ -28,7 +28,7 @@
if (typeof(Color) === "undefined") Color = {};
if (typeof(Color.Space) === "undefined") Color.Space = {};
(function () {
(function () { "use strict";
var functions = {
// holds generated cached conversion functions.
@ -383,7 +383,7 @@ root.HSV_RGB = function (o) {
var H = o.H / 360;
var S = o.S / 100;
var V = o.V / 100;
var R, G, B;
var R, G, B, D, A, C;
if (S === 0) {
R = G = B = Math.round(V * 255);
} else {

View file

@ -60,12 +60,12 @@ MIDI.loadPlugin = function(callback, instrument) {
// works well in Firefox
DOMLoader.sendRequest({
url: "./soundfont/soundfont-" + filetype + instrument + ".js",
callback: function (response) {
onload: function (response) {
MIDI.Soundfont = JSON.parse(response.responseText);
if (loader) loader.message("Downloading: 100%<br>Processing...");
MIDI.HTML5.connect(callback);
},
progress: function (evt) {
onprogress: function (evt) {
var percent = evt.loaded / 1719931 * 100 >> 0;
if (loader) loader.message("Downloading: " + (percent + "%"));
}
@ -75,12 +75,12 @@ MIDI.loadPlugin = function(callback, instrument) {
// works well in Chrome
DOMLoader.sendRequest({
url: "./soundfont/soundfont-" + filetype + instrument + ".js",
callback: function(response) {
onload: function(response) {
MIDI.Soundfont = JSON.parse(response.responseText);
if (loader) loader.message("Downloading: 100%<br>Processing...");
MIDI.WebAudioAPI.connect(callback);
},
progress: function (evt) {
onprogress: function (evt) {
var percent = evt.loaded / 1719931 * 100 >> 0;
if (loader) loader.message("Downloading: " + (percent + "%"));
}

View file

@ -27,7 +27,7 @@
if (typeof(widgets) === "undefined") var widgets = {};
widgets.Loader = (function(root) {
widgets.Loader = (function(root) { "use strict";
var PI = Math.PI;
var defaultConfig = {
@ -86,6 +86,7 @@ return function (conf) {
var div = document.createElement("div");
var span = document.createElement("span");
div.appendChild(span);
div.className = defaultConfig.id;
that.span = span;
that.div = div;
var canvas = document.createElement("canvas");

View file

@ -1,16 +1,17 @@
/*
DOMLoader.XMLHttp : 0.1 : mudcu.be
-----------------------------------
DOMLoader.XMLHttp
--------------------------
DOMLoader.sendRequest({
url: "./dir/something.extension",
error: function(event) {
data: "test!",
onerror: function(event) {
console.log(event);
},
callback: function(response) {
onload: function(response) {
console.log(response.responseText);
},
progress: function (event) {
onprogress: function (event) {
var percent = event.loaded / event.total * 100 >> 0;
loader.message("loading: " + percent + "%");
}
@ -18,21 +19,20 @@
*/
if (typeof(DOMLoader) === "undefined") DOMLoader = {};
(function() { "use strict";
if (typeof(DOMLoader) === "undefined") var DOMLoader = {};
// Add XMLHttpRequest when not available
if (typeof (window.XMLHttpRequest) === "undefined") {
(function () { // http://www.quirksmode.org/js/xmlhttp.html
if (typeof (XMLHttpRequest) === "undefined") {
var XMLHttpRequest;
(function () { // find equivalent for IE
var factories = [
function () {
return new ActiveXObject("Msxml2.XMLHTTP");
return new ActiveXObject("Msxml2.XMLHTTP")
}, function () {
return new ActiveXObject("Msxml3.XMLHTTP");
return new ActiveXObject("Msxml3.XMLHTTP")
}, function () {
return new ActiveXObject("Microsoft.XMLHTTP");
return new ActiveXObject("Microsoft.XMLHTTP")
}];
for (var i = 0; i < factories.length; i++) {
try {
@ -42,7 +42,7 @@ if (typeof (window.XMLHttpRequest) === "undefined") {
}
break;
}
window.XMLHttpRequest = factories[i];
XMLHttpRequest = factories[i];
})();
}
@ -68,7 +68,7 @@ if (typeof ((new XMLHttpRequest()).responseText) === "undefined") {
// inject VBScript
document.write(IEBinaryToArray_ByteStr_Script);
DOMLoader.sendRequest = function(config) {
DOMLoader.sendRequest = function(conf) {
// helper to convert from responseBody to a "responseText" like thing
function getResponseText(binary) {
var byteMapping = {};
@ -83,14 +83,13 @@ if (typeof ((new XMLHttpRequest()).responseText) === "undefined") {
return rawBytes.replace(/[\s\S]/g, function (match) {
return byteMapping[match];
}) + lastChr;
}
};
//
var req = new XMLHttpRequest();
req.open("GET", config.url, true);
req.setRequestHeader("Accept-Charset", "x-user-defined");
if (config.responseType) req.responseType = config.responseType;
if (config.error) req.onerror = config.error;
if (config.progress) req.onprogress = config.progress;
var req = XMLHttpRequest();
req.open("GET", conf.url, true);
if (conf.responseType) req.responseType = conf.responseType;
if (conf.onerror) req.onerror = conf.onerror;
if (conf.onprogress) req.onprogress = conf.onprogress;
req.onreadystatechange = function (event) {
if (req.readyState === 4) {
if (req.status === 200) {
@ -98,29 +97,34 @@ if (typeof ((new XMLHttpRequest()).responseText) === "undefined") {
} else {
req = false;
}
if (config.callback) config.callback(req);
if (conf.onload) conf.onload(req);
}
};
req.setRequestHeader("Accept-Charset", "x-user-defined");
req.send(null);
return req;
}
} else {
DOMLoader.sendRequest = function(config) {
DOMLoader.sendRequest = function(conf) {
var req = new XMLHttpRequest();
req.open('GET', config.url, true);
if (req.overrideMimeType) req.overrideMimeType("text/plain; charset=x-user-defined");
if (config.responseType) req.responseType = config.responseType;
if (config.error) req.onerror = config.error;
if (config.progress) req.onprogress = config.progress;
req.open(conf.data ? "POST" : "GET", conf.url, true);
if (req.overrideMimeType) req.overrideMimeType("text/plain; charset=x-user-defined");
if (conf.data) req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
if (conf.responseType) req.responseType = conf.responseType;
if (conf.onerror) req.onerror = conf.onerror;
if (conf.onprogress) req.onprogress = conf.onprogress;
req.onreadystatechange = function (event) {
if (req.readyState === 4) {
if (req.status !== 200) req = false;
if (config.callback) config.callback(req);
if (req.status !== 200 && req.status != 304) {
if (conf.onerror) conf.onerror(event, false);
return;
}
if (conf.onload) {
conf.onload(req);
}
}
};
req.send("");
req.send(conf.data);
return req;
};
}
})();
}

View file

@ -1,7 +1,12 @@
/*
DOMLoader : 0.2 : mudcu.be
---------------------------
----------------------------------------------------
DOMLoader.script.js : 0.1.2 : 2012/09/08 : http://mudcu.be
----------------------------------------------------
Copyright 2011-2012 Mudcube. All rights reserved.
----------------------------------------------------
/// No verification
DOMLoader.script.add("../js/jszip/jszip.js");
/// Strict loading order and verification.
DOMLoader.script.add({
strictOrder: true,
srcs: [
@ -24,10 +29,19 @@
console.log(3)
}
});
/// Just verification.
DOMLoader.script.add({
src: "../js/jszip/jszip.js",
verify: "JSZip",
callback: function() {
console.log(1)
}
});
*/
if (typeof(DOMLoader) === "undefined") DOMLoader = {};
if (typeof(DOMLoader) === "undefined") var DOMLoader = {};
(function() { "use strict";
DOMLoader.script = function() {
this.loaded = {};
@ -37,6 +51,9 @@ DOMLoader.script = function() {
DOMLoader.script.prototype.add = function(config) {
var that = this;
if (typeof(config) === "string") {
config = { src: config };
}
var srcs = config.srcs;
if (typeof(srcs) === "undefined") {
srcs = [{
@ -49,7 +66,7 @@ DOMLoader.script.prototype.add = function(config) {
///
var testElement = function(element, test) {
if (that.loaded[element.src]) return;
if (test && !eval(test)) return;
if (test && typeof(window[test]) === "undefined") return;
that.loaded[element.src] = true;
//
if (that.loading[element.src]) that.loading[element.src]();
@ -61,10 +78,23 @@ DOMLoader.script.prototype.add = function(config) {
///
var batchTest = [];
var addElement = function(element) {
if (/([\w\d.\[\]])$/.test(element.verify)) { // check whether its a variable reference
element.test = "(typeof(" + element.verify + ") !== \"undefined\")";
batchTest.push(element.test);
if (typeof(element) === "string") {
element = {
src: element,
verify: config.verify
};
}
if (/([\w\d.])$/.test(element.verify)) { // check whether its a variable reference
element.test = element.verify;
if (typeof(element.test) === "object") {
for (var key in element.test) {
batchTest.push(element.test[key]);
}
} else {
batchTest.push(element.test);
}
}
if (that.loaded[element.src]) return;
var script = document.createElement("script");
script.onreadystatechange = function() {
if (this.readyState !== "loaded" && this.readyState !== "complete") return;
@ -72,6 +102,9 @@ DOMLoader.script.prototype.add = function(config) {
};
script.onload = function() {
testElement(element);
};
script.onerror = function() {
};
script.setAttribute("type", "text/javascript");
script.setAttribute("src", element.src);
@ -87,7 +120,29 @@ DOMLoader.script.prototype.add = function(config) {
testElement(srcs[n], srcs[n].test);
}
}
if (!config.strictOrder && eval(batchTest.join(" && "))) { // finished loading all the requested scripts
var istrue = true;
for (var n = 0; n < batchTest.length; n ++) {
var test = batchTest[n];
if (test && test.indexOf(".") !== -1) {
test = test.split(".");
var level0 = window[test[0]];
if (typeof(level0) === "undefined") continue;
if (test.length === 2) { //- this is a bit messy and could handle more cases
if (typeof(level0[test[1]]) === "undefined") {
istrue = false;
}
} else if (test.length === 3) {
if (typeof(level0[test[1]][test[2]]) === "undefined") {
istrue = false;
}
}
} else {
if (typeof(window[test]) === "undefined") {
istrue = false;
}
}
}
if (!config.strictOrder && istrue) { // finished loading all the requested scripts
if (config.callback) config.callback();
} else { // keep calling back the function
setTimeout(function() { //- should get slower over time?
@ -121,11 +176,12 @@ DOMLoader.script.prototype.add = function(config) {
getNext();
} else { // loose ordering
for (var ID = 0; ID < srcs.length; ID ++) {
if (that.loaded[srcs[ID].src]) return;
addElement(srcs[ID]);
}
onLoad();
}
};
DOMLoader.script = (new DOMLoader.script());
DOMLoader.script = (new DOMLoader.script());
})();

View file

@ -203,7 +203,7 @@
* Track for proper command/control-key for Mac/PC.
----------------------------------------------------
Event.add(window, "keyup keydown", Event.proxy.metaTracker);
console.log(Event.metaKey);
console.log(Event.proxy.metaKey);
* Test for event features, in this example Drag & Drop file support.
----------------------------------------------------
@ -269,31 +269,37 @@ var eventManager = function(target, type, listener, configure, trigger) {
configure = configure || {};
// Check for element to load on interval (before onload).
if (typeof(target) === "string" && type === "ready") {
var time = (new Date).getTime();
var timeout = configure.timeout;
var speed = configure.interval || 1000 / 60;
var ms = configure.interval || 1000 / 60;
var interval = setInterval(function() {
if ((new Date).getTime() - time > timeout) {
clearInterval(interval);
}
if (document.querySelector(target)) {
clearInterval(interval);
listener();
}
}, speed);
}, ms);
return;
}
// Get DOM element from Query Selector.
if (typeof(target) === "string") {
target = document.querySelectorAll(target);
if (target.length === 0) return;
if (target.length === 1) {
if (target.length === 0) return createError("Missing target on listener!"); // No results.
if (target.length === 1) { // Single target.
target = target[0];
} else { /// Handle multiple targets.
var events = {};
for (var n = 0, length = target.length; n < length; n ++) {
var event = eventManager(target[n], type, listener, configure, trigger);
if (event) events[n] = event;
}
return batch(events);
}
}
/// Handle multiple targets.
if (target.length > 0) {
var events = {};
for (var n = 0, length = target.length; n < length; n ++) {
var event = eventManager(target[n], type, listener, clone(configure), trigger);
if (event) events[n] = event;
}
return createBatchCommands(events);
}
// Check for multiple events in one string.
if (type.indexOf && type.indexOf(" ") !== -1) type = type.split(" ");
if (type.indexOf && type.indexOf(",") !== -1) type = type.split(",");
@ -302,23 +308,23 @@ var eventManager = function(target, type, listener, configure, trigger) {
var events = {};
if (typeof(type.length) === "number") { // Handle multiple listeners glued together.
for (var n = 0, length = type.length; n < length; n ++) { // Array [type]
var event = eventManager(target, type[n], listener, configure, trigger);
var event = eventManager(target, type[n], listener, clone(configure), trigger);
if (event) events[type[n]] = event;
}
} else { // Handle multiple listeners.
for (var key in type) { // Object {type}
if (typeof(type[key]) === "function") { // without configuration.
var event = eventManager(target, key, type[key], configure, trigger);
var event = eventManager(target, key, type[key], clone(configure), trigger);
} else { // with configuration.
var event = eventManager(target, key, type[key].listener, type[key], trigger);
var event = eventManager(target, key, type[key].listener, clone(type[key]), trigger);
}
if (event) events[key] = event;
}
}
return batch(events);
return createBatchCommands(events);
}
// Ensure listener is a function.
if (typeof(listener) !== "function") return;
if (typeof(listener) !== "function") return createError("Listener is not a function! ", target, type, listener);
// Generate a unique wrapper identifier.
var useCapture = configure.useCapture || false;
var id = normalize(type) + getID(target) + "." + getID(listener) + "." + (useCapture ? 1 : 0);
@ -346,14 +352,13 @@ var eventManager = function(target, type, listener, configure, trigger) {
wrappers[id] = root.proxy[type](configure);
}
} else { // Fire native event.
var type = normalize(type);
if (trigger === "remove") { // Remove event listener.
if (!wrappers[id]) return; // Already removed.
target[remove](type, listener, useCapture);
delete wrappers[id];
} else if (trigger === "add") { // Attach event listener.
if (wrappers[id]) return wrappers[id]; // Already attached.
var type = normalize(type);
// Attach listener.
target[add](type, listener, useCapture);
// Record wrapper.
wrappers[id] = {
@ -370,7 +375,7 @@ var eventManager = function(target, type, listener, configure, trigger) {
};
/// Perform batch actions on multiple events.
var batch = function(events) {
var createBatchCommands = function(events) {
return {
remove: function() { // Remove multiple events.
for (var key in events) {
@ -385,6 +390,13 @@ var batch = function(events) {
};
};
/// Display error message in console.
var createError = function(message) {
if (typeof(console) === "undefined") return;
if (typeof(console.error) === "undefined") return;
console.error(arguments);
};
/// Handle naming discrepancies between platforms.
var normalize = (function() {
var translate = {};
@ -423,7 +435,7 @@ var counter = 0;
var getID = function(object) {
if (object === window) return "#window";
if (object === document) return "#document";
if (!object) return console.log("Missing target on listener!");
if (!object) return createError("Missing target on listener!");
if (!object.uniqueID) object.uniqueID = "id" + counter ++;
return object.uniqueID;
};
@ -442,7 +454,6 @@ root.createPointerEvent = function (event, self, preventRecord) {
var eventName = self.gesture;
var target = self.target;
var pts = event.changedTouches || root.proxy.getCoords(event);
///
if (pts.length) {
var pt = pts[0];
self.pointers = preventRecord ? [] : pts;
@ -568,19 +579,28 @@ root.pointerSetup = function(conf, self) {
///
if (Event.modifyEventListener) conf.listener = Event.createPointerEvent;
/// Convenience commands.
var fingers = 0;
var type = self.gesture.indexOf("pointer") === 0 && Event.modifyEventListener ? "pointer" : "mouse";
self.proxy = function(listener) {
self.defaultListener = conf.listener;
conf.listener = listener;
listener(conf.event, self);
};
self.remove = function() {
if (conf.onPointerDown) Event.remove(conf.target, type + "down", conf.onPointerDown);
if (conf.onPointerMove) Event.remove(conf.doc, type + "move", conf.onPointerMove);
if (conf.onPointerUp) Event.remove(conf.doc, type + "up", conf.onPointerUp);
};
self.enable = function(opt) {
self.resume = function(opt) {
if (conf.onPointerMove && (!opt || opt.move)) Event.add(conf.doc, type + "move", conf.onPointerMove);
if (conf.onPointerUp && (!opt || opt.move)) Event.add(conf.doc, type + "up", conf.onPointerUp);
conf.fingers = fingers;
};
self.disable = function(opt) {
self.pause = function(opt) {
fingers = conf.fingers;
if (conf.onPointerMove && (!opt || opt.move)) Event.remove(conf.doc, type + "move", conf.onPointerMove);
if (conf.onPointerUp && (!opt || opt.up)) Event.remove(conf.doc, type + "up", conf.onPointerUp);
conf.fingers = 0;
};
///
return self;
@ -614,8 +634,13 @@ root.pointerStart = function(event, self, conf) {
break;
}
///
var x = (touch.pageX + bbox.scrollLeft - pt.offsetX) * bbox.scaleX;
var y = (touch.pageY + bbox.scrollTop - pt.offsetY) * bbox.scaleY;
if (conf.position === "relative") {
var x = (touch.pageX + bbox.scrollLeft - pt.offsetX) * bbox.scaleX;
var y = (touch.pageY + bbox.scrollTop - pt.offsetY) * bbox.scaleY;
} else {
var x = (touch.pageX - pt.offsetX);
var y = (touch.pageY - pt.offsetY);
}
///
pt.rotation = 0;
pt.scale = 1;
@ -625,7 +650,13 @@ root.pointerStart = function(event, self, conf) {
///
conf.fingers ++;
};
//
///
conf.event = event;
if (self.defaultListener) {
conf.listener = self.defaultListener;
delete self.defaultListener;
}
///
var isTouchStart = !conf.fingers;
var track = conf.tracker;
var touches = event.changedTouches || root.getCoords(event);
@ -658,7 +689,7 @@ root.pointerStart = function(event, self, conf) {
addTouchStart(touch, sid);
} else { // Start tracking fingers.
track = conf.tracker = {};
conf.bbox = root.getBoundingBox(conf.target);
self.bbox = conf.bbox = root.getBoundingBox(conf.target);
conf.fingers = 0;
conf.cancel = false;
addTouchStart(touch, sid);
@ -788,7 +819,10 @@ root.getCoord = function(event) {
};
} else if(typeof(event.pageX) !== "undefined" && typeof(event.pageY) !== "undefined") { // Desktop browsers.
root.getCoord = function(event) {
return event;
return {
x: event.pageX,
y: event.pageY
};
};
} else { // Internet Explorer <=8.0
root.getCoord = function(event) {
@ -855,7 +889,7 @@ root.getBoundingBox = function(o) {
Keep track of metaKey, the proper ctrlKey for users platform.
*/
root.metaTracker = (function() {
(function() {
var agent = navigator.userAgent.toLowerCase();
var mac = agent.indexOf("macintosh") !== -1;
if (mac && agent.indexOf("khtml") !== -1) { // chrome, safari.
@ -865,7 +899,10 @@ root.metaTracker = (function() {
} else { // windows, linux, or mac opera.
var watch = { 17: true };
}
return function(event) {
root.isMetaKey = function(event) {
return !!watch[event.keyCode];
};
root.metaTracker = function(event) {
if (watch[event.keyCode]) {
root.metaKey = event.type === "keydown";
}
@ -911,8 +948,13 @@ root.click = function(conf) {
var pointer = pointers[0];
var bbox = conf.bbox;
var newbbox = root.getBoundingBox(conf.target);
var ax = (pointer.pageX + bbox.scrollLeft - bbox.x1) * bbox.scaleX;
var ay = (pointer.pageY + bbox.scrollTop - bbox.y1) * bbox.scaleY;
if (conf.position === "relative") {
var ax = (pointer.pageX + bbox.scrollLeft - bbox.x1) * bbox.scaleX;
var ay = (pointer.pageY + bbox.scrollTop - bbox.y1) * bbox.scaleY;
} else {
var ax = (pointer.pageX - bbox.x1);
var ay = (pointer.pageY - bbox.y1);
}
if (ax > 0 && ax < bbox.width && // Within target coordinates.
ay > 0 && ay < bbox.height &&
bbox.scrollTop === newbbox.scrollTop) {
@ -984,8 +1026,13 @@ root.dblclick = function(conf) {
pointer1 = pointers[0];
}
var bbox = conf.bbox;
var ax = (pointer1.pageX + bbox.scrollLeft - bbox.x1) * bbox.scaleX;
var ay = (pointer1.pageY + bbox.scrollTop - bbox.y1) * bbox.scaleY;
if (conf.position === "relative") {
var ax = (pointer1.pageX + bbox.scrollLeft - bbox.x1) * bbox.scaleX;
var ay = (pointer1.pageY + bbox.scrollTop - bbox.y1) * bbox.scaleY;
} else {
var ax = (pointer1.pageX - bbox.x1);
var ay = (pointer1.pageY - bbox.y1);
}
if (!(ax > 0 && ax < bbox.width && // Within target coordinates..
ay > 0 && ay < bbox.height &&
Math.abs(pointer1.pageX - pointer0.pageX) <= 25 && // Within drift deviance.
@ -1044,6 +1091,18 @@ if (typeof(Event.proxy) === "undefined") Event.proxy = {};
Event.proxy = (function(root) { "use strict";
root.dragElement = function(that, event) {
root.drag({
event: event,
target: that,
position: "move",
listener: function(event, self) {
that.style.left = self.x + "px";
that.style.top = self.y + "px";
}
});
};
root.drag = function(conf) {
conf.gesture = "drag";
conf.onPointerDown = function (event) {
@ -1071,8 +1130,13 @@ root.drag = function(conf) {
self.identifier = identifier;
self.start = pt.start;
self.fingers = 1; // TODO(mud): option to track as single set, or individually.
self.x = (pt.pageX + bbox.scrollLeft - pt.offsetX) * bbox.scaleX;
self.y = (pt.pageY + bbox.scrollTop - pt.offsetY) * bbox.scaleY;
if (conf.position === "relative") {
self.x = (pt.pageX + bbox.scrollLeft - pt.offsetX) * bbox.scaleX;
self.y = (pt.pageY + bbox.scrollTop - pt.offsetY) * bbox.scaleY;
} else {
self.x = (pt.pageX - pt.offsetX);
self.y = (pt.pageY - pt.offsetY);
}
///
conf.listener(event, self);
}
@ -1157,8 +1221,13 @@ root.gesture = function(conf) {
// Check whether "pt" is used by another gesture.
if (!pt) continue;
// Find the actual coordinates.
pt.move.x = (touch.pageX + bbox.scrollLeft - bbox.x1) * bbox.scaleX;
pt.move.y = (touch.pageY + bbox.scrollTop - bbox.y1) * bbox.scaleY;
if (conf.position === "relative") {
pt.move.x = (touch.pageX + bbox.scrollLeft - bbox.x1) * bbox.scaleX;
pt.move.y = (touch.pageY + bbox.scrollTop - bbox.y1) * bbox.scaleY;
} else {
pt.move.x = (touch.pageX - bbox.x1);
pt.move.y = (touch.pageY - bbox.y1);
}
}
///
if (conf.fingers < conf.minFingers) return;
@ -1564,8 +1633,13 @@ root.longpress = function(conf) {
var identifier = touch.identifier || Infinity;
var pt = conf.tracker[identifier];
if (!pt) continue;
var x = (touch.pageX + bbox.scrollLeft - bbox.x1) * bbox.scaleX;
var y = (touch.pageY + bbox.scrollTop - bbox.y1) * bbox.scaleY;
if (conf.position === "relative") {
var x = (touch.pageX + bbox.scrollLeft - bbox.x1) * bbox.scaleX;
var y = (touch.pageY + bbox.scrollTop - bbox.y1) * bbox.scaleY;
} else {
var x = (touch.pageX - bbox.x1);
var y = (touch.pageY - bbox.y1);
}
if (!(x > 0 && x < bbox.width && // Within target coordinates..
y > 0 && y < bbox.height &&
Math.abs(x - pt.start.x) <= 25 && // Within drift deviance.