tenfourfox/mobile/android/chrome/content/aboutFeedback.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

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);
}