mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 13:51:41 +00:00
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
this.EXPORTED_SYMBOLS = [];
|
|
|
|
const Cu = Components.utils;
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
var window = Services.wm.getMostRecentWindow("navigator:browser");
|
|
var system = window.document.getElementById("systemapp");
|
|
|
|
var OrientationChangeHandler = {
|
|
// Clockwise orientations, looping
|
|
orientations: ["portrait-primary", "landscape-secondary",
|
|
"portrait-secondary", "landscape-primary",
|
|
"portrait-primary"],
|
|
|
|
lastOrientation: "portrait-primary",
|
|
|
|
init: function() {
|
|
window.screen.addEventListener("mozorientationchange", this, true);
|
|
},
|
|
|
|
handleEvent: function(evt) {
|
|
let newOrientation = window.screen.mozOrientation;
|
|
let orientationIndex = this.orientations.indexOf(this.lastOrientation);
|
|
let nextClockwiseOrientation = this.orientations[orientationIndex + 1];
|
|
let fullSwitch = (newOrientation.split("-")[0] ==
|
|
this.lastOrientation.split("-")[0]);
|
|
|
|
this.lastOrientation = newOrientation;
|
|
|
|
let angle, xFactor, yFactor;
|
|
if (fullSwitch) {
|
|
angle = 180;
|
|
xFactor = 1;
|
|
} else {
|
|
angle = (nextClockwiseOrientation == newOrientation) ? 90 : -90;
|
|
xFactor = window.innerWidth / window.innerHeight;
|
|
}
|
|
yFactor = 1 / xFactor;
|
|
|
|
system.style.transition = "";
|
|
system.style.transform = "rotate(" + angle + "deg)" +
|
|
"scale(" + xFactor + ", " + yFactor + ")";
|
|
|
|
function trigger() {
|
|
system.style.transition = "transform .25s cubic-bezier(.15, .7, .6, .9)";
|
|
|
|
system.style.opacity = "";
|
|
system.style.transform = "";
|
|
}
|
|
|
|
// 180deg rotation, no resize
|
|
if (fullSwitch) {
|
|
window.setTimeout(trigger);
|
|
return;
|
|
}
|
|
|
|
window.addEventListener("resize", function waitForResize(e) {
|
|
window.removeEventListener("resize", waitForResize);
|
|
trigger();
|
|
});
|
|
}
|
|
};
|
|
|
|
OrientationChangeHandler.init();
|