mirror of
https://github.com/classilla/tenfourfox.git
synced 2025-01-08 22:32:05 +00:00
167 lines
5.8 KiB
JavaScript
167 lines
5.8 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";
|
|
|
|
// input.mozilla.org expects "Firefox for Android" as the product.
|
|
const FEEDBACK_PRODUCT_STRING = "Firefox for Android";
|
|
|
|
var Cc = Components.classes;
|
|
var Ci = Components.interfaces;
|
|
var Cu = Components.utils;
|
|
const HEARTY_ICON_MDPI = "chrome://browser/skin/images/icon_heart_mdpi.png";
|
|
const HEARTY_ICON_HDPI = "chrome://browser/skin/images/icon_heart_hdpi.png";
|
|
const HEARTY_ICON_XHDPI = "chrome://browser/skin/images/icon_heart_xhdpi.png";
|
|
const HEARTY_ICON_XXHDPI = "chrome://browser/skin/images/icon_heart_xxhdpi.png";
|
|
|
|
const FLOATY_ICON_MDPI = "chrome://browser/skin/images/icon_floaty_mdpi.png";
|
|
const FLOATY_ICON_HDPI = "chrome://browser/skin/images/icon_floaty_hdpi.png";
|
|
const FLOATY_ICON_XHDPI = "chrome://browser/skin/images/icon_floaty_xhdpi.png";
|
|
const FLOATY_ICON_XXHDPI = "chrome://browser/skin/images/icon_floaty_xxhdpi.png";
|
|
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
Cu.import("resource://gre/modules/Messaging.jsm");
|
|
Cu.import("resource://gre/modules/UpdateUtils.jsm");
|
|
document.addEventListener("DOMContentLoaded", init, false);
|
|
|
|
function dump(a) {
|
|
Services.console.logStringMessage(a);
|
|
}
|
|
|
|
function init() {
|
|
let anchors = document.querySelectorAll(".maybe-later");
|
|
for(let anchor of anchors) {
|
|
anchor.addEventListener("click", maybeLater, false);
|
|
}
|
|
document.getElementById("happy-link").addEventListener("click", function(evt) {
|
|
switchSection("happy");
|
|
}, false);
|
|
document.getElementById("sad-link").addEventListener("click", function(evt) {
|
|
switchSection("sad");
|
|
}, false);
|
|
|
|
let helpSectionIcon = FLOATY_ICON_XXHDPI;
|
|
let sadThanksIcon = HEARTY_ICON_XXHDPI;
|
|
|
|
if (window.devicePixelRatio <= 1) {
|
|
helpSectionIcon = FLOATY_ICON_MDPI;
|
|
sadThanksIcon = HEARTY_ICON_MDPI;
|
|
} else if (window.devicePixelRatio <= 1.5) {
|
|
helpSectionIcon = FLOATY_ICON_HDPI;
|
|
sadThanksIcon = HEARTY_ICON_HDPI;
|
|
} else if (window.devicePixelRatio <= 2) {
|
|
helpSectionIcon = FLOATY_ICON_XHDPI;
|
|
sadThanksIcon = HEARTY_ICON_XHDPI;
|
|
}
|
|
|
|
document.getElementById("sumo-icon").src = helpSectionIcon;
|
|
document.getElementById("sad-thanks-icon").src = sadThanksIcon;
|
|
|
|
document.getElementById("open-play-store").addEventListener("click", openPlayStore, false);
|
|
document.forms[0].addEventListener("submit", sendFeedback, false);
|
|
for (let anchor of document.querySelectorAll(".no-thanks")) {
|
|
anchor.addEventListener("click", evt => window.close(), false);
|
|
}
|
|
|
|
let sumoLink = Services.urlFormatter.formatURLPref("app.support.baseURL");
|
|
document.getElementById("help-section").addEventListener("click", function() {
|
|
window.open(sumoLink, "_blank");
|
|
}, false);
|
|
|
|
window.addEventListener("popstate", function (aEvent) {
|
|
updateActiveSection(aEvent.state ? aEvent.state.section : "intro")
|
|
}, false);
|
|
|
|
// Fill "Last visited site" input with most recent history entry URL.
|
|
Messaging.sendRequestForResult({ type: "Feedback:LastUrl" }).then(function(aData) {
|
|
aData = aData.substring(0, 200);
|
|
document.getElementById("last-url").value = aData;
|
|
// Enable the parent div iff the URL is valid.
|
|
if (aData.length != 0) {
|
|
document.getElementById("last-url-div").style.display="block";
|
|
}
|
|
});
|
|
}
|
|
|
|
function switchSection(aSection) {
|
|
history.pushState({ section: aSection }, aSection);
|
|
updateActiveSection(aSection);
|
|
}
|
|
|
|
function updateActiveSection(aSection) {
|
|
document.querySelector("section[active]").removeAttribute("active");
|
|
document.getElementById(aSection).setAttribute("active", true);
|
|
}
|
|
|
|
function openPlayStore() {
|
|
Messaging.sendRequest({ type: "Feedback:OpenPlayStore" });
|
|
|
|
window.close();
|
|
}
|
|
|
|
function maybeLater() {
|
|
window.close();
|
|
|
|
Messaging.sendRequest({ type: "Feedback:MaybeLater" });
|
|
}
|
|
|
|
function sendFeedback(aEvent) {
|
|
// Prevent the page from reloading.
|
|
aEvent.preventDefault();
|
|
|
|
let section = history.state.section;
|
|
|
|
// Sanity check.
|
|
if (section != "sad") {
|
|
Cu.reportError("Trying to send feedback from an invalid section: " + section);
|
|
return;
|
|
}
|
|
|
|
let sectionElement = document.getElementById(section);
|
|
let descriptionElement = sectionElement.querySelector(".description");
|
|
|
|
let data = {};
|
|
data["happy"] = false;
|
|
data["description"] = descriptionElement.value;
|
|
data["product"] = FEEDBACK_PRODUCT_STRING;
|
|
|
|
let urlCheckBox = document.getElementById("last-checkbox");
|
|
let urlElement = document.getElementById("last-url");
|
|
// Only send a URL string if the user provided one.
|
|
if (urlCheckBox.checked) {
|
|
data["url"] = urlElement.value;
|
|
}
|
|
|
|
data["device"] = Services.sysinfo.get("device");
|
|
data["manufacturer"] = Services.sysinfo.get("manufacturer");
|
|
data["platform"] = Services.appinfo.OS;
|
|
data["version"] = Services.appinfo.version;
|
|
data["locale"] = Services.locale.getSystemLocale().getCategory("NSILOCALE_CTYPE");
|
|
data["channel"] = UpdateUtils.UpdateChannel;
|
|
|
|
// Source field is added only when Fennec prompts the user.
|
|
let getParam = window.location.href.split("?");
|
|
if (getParam.length > 1) {
|
|
let urlParam = new URLSearchParams(getParam[1]);
|
|
if(urlParam.get("source")) {
|
|
data["source"] = urlParam.get("source");
|
|
}
|
|
}
|
|
|
|
let req = new XMLHttpRequest();
|
|
req.addEventListener("error", function() {
|
|
Cu.reportError("Error sending feedback to input.mozilla.org: " + req.statusText);
|
|
}, false);
|
|
req.addEventListener("abort", function() {
|
|
Cu.reportError("Aborted sending feedback to input.mozilla.org: " + req.statusText);
|
|
}, false);
|
|
|
|
let postURL = Services.urlFormatter.formatURLPref("app.feedback.postURL");
|
|
req.open("POST", postURL, true);
|
|
req.setRequestHeader("Content-type", "application/json");
|
|
req.send(JSON.stringify(data));
|
|
|
|
switchSection("thanks-" + section);
|
|
}
|