diff options
Diffstat (limited to 'mobile/android/extensions/flyweb/content')
-rw-r--r-- | mobile/android/extensions/flyweb/content/aboutFlyWeb.css | 29 | ||||
-rw-r--r-- | mobile/android/extensions/flyweb/content/aboutFlyWeb.js | 73 | ||||
-rw-r--r-- | mobile/android/extensions/flyweb/content/aboutFlyWeb.xhtml | 47 | ||||
-rw-r--r-- | mobile/android/extensions/flyweb/content/icon-64.png | bin | 0 -> 1311 bytes |
4 files changed, 149 insertions, 0 deletions
diff --git a/mobile/android/extensions/flyweb/content/aboutFlyWeb.css b/mobile/android/extensions/flyweb/content/aboutFlyWeb.css new file mode 100644 index 000000000..0c751b53f --- /dev/null +++ b/mobile/android/extensions/flyweb/content/aboutFlyWeb.css @@ -0,0 +1,29 @@ +/* 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/. */ + +include "defines.css" + +.list-item > a { + color: inherit; + text-decoration: none; +} + +.details { + -moz-margin-start: calc(var(--icon-size) + var(--icon-margin) * 2 - 1em); + padding: 1em; +} + +#flyweb-item-template { + display: none; +} + +#flyweb-list-empty { + display: none; +} + +#flyweb-list:empty + #flyweb-list-empty { + display: block; + text-align: center; + padding-top: 3.9em; +} diff --git a/mobile/android/extensions/flyweb/content/aboutFlyWeb.js b/mobile/android/extensions/flyweb/content/aboutFlyWeb.js new file mode 100644 index 000000000..48b7ea4b7 --- /dev/null +++ b/mobile/android/extensions/flyweb/content/aboutFlyWeb.js @@ -0,0 +1,73 @@ +/* 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"; + +const {classes: Cc, interfaces: Ci, utils: Cu} = Components; + +Cu.import("resource://gre/modules/Console.jsm"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + +XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm"); + +XPCOMUtils.defineLazyGetter(this, "gFlyWebBundle", function() { + return Services.strings.createBundle("chrome://flyweb/locale/flyweb.properties"); +}); + +let discoveryManager = new FlyWebDiscoveryManager(); + +let discoveryCallback = { + onDiscoveredServicesChanged(services) { + if (!this.id) { + return; + } + + let list = document.getElementById("flyweb-list"); + while (list.firstChild) { + list.firstChild.remove(); + } + + let template = document.getElementById("flyweb-item-template"); + + for (let service of services) { + let item = template.cloneNode(true); + item.removeAttribute("id"); + + item.setAttribute("data-service-id", service.serviceId); + item.querySelector(".title").setAttribute("value", service.displayName); + item.querySelector(".icon").src = "chrome://flyweb/content/icon-64.png"; + + list.appendChild(item); + } + }, + start() { + this.id = discoveryManager.startDiscovery(this); + }, + stop() { + discoveryManager.stopDiscovery(this.id); + this.id = undefined; + } +}; + +window.addEventListener("DOMContentLoaded", () => { + let list = document.getElementById("flyweb-list"); + list.addEventListener("click", (evt) => { + let serviceId = evt.target.closest("[data-service-id]").getAttribute("data-service-id"); + + discoveryManager.pairWithService(serviceId, { + pairingSucceeded(service) { + window.open(service.uiUrl, "FlyWebWindow_" + serviceId); + }, + + pairingFailed(error) { + console.error("FlyWeb failed to connect to service " + serviceId, error); + } + }); + }); + + discoveryCallback.start(); +}); + +window.addEventListener("unload", () => { + discoveryCallback.stop(); +}); diff --git a/mobile/android/extensions/flyweb/content/aboutFlyWeb.xhtml b/mobile/android/extensions/flyweb/content/aboutFlyWeb.xhtml new file mode 100644 index 000000000..85e92ddf8 --- /dev/null +++ b/mobile/android/extensions/flyweb/content/aboutFlyWeb.xhtml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [ +<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" > +%brandDTD; +<!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd" > +%globalDTD; +<!ENTITY % flywebDTD SYSTEM "chrome://flyweb/locale/aboutFlyWeb.dtd" > +%flywebDTD; +]> + +<!-- 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/. --> + +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> +<head> + <title>&aboutFlyWeb.title;</title> + <meta name="viewport" content="width=device-width; user-scalable=0" /> + <link rel="icon" type="image/png" sizes="64x64" href="chrome://branding/content/favicon64.png" /> + <link rel="stylesheet" href="chrome://browser/skin/aboutBase.css" type="text/css"/> + <link rel="stylesheet" href="chrome://flyweb/content/aboutFlyWeb.css" type="text/css"/> +</head> + +<body dir="&locale.dir;"> + <!--template id="flyweb-item-template"--> + <li id="flyweb-item-template" class="list-item" role="button"> + <img class="icon" src=""/> + <div class="details"> + <div class="row"> + <!-- This is a hack so that we can crop this label in its center --> + <xul:label class="title" crop="center" value=""/> + </div> + </div> + </li> + <!--/template--> + + <div class="header"> + <div>&aboutFlyWeb.header;</div> + </div> + <ul id="flyweb-list" class="list"></ul> + <span id="flyweb-list-empty">&aboutFlyWeb.empty;</span> + <script type="application/javascript;version=1.8" src="chrome://flyweb/content/aboutFlyWeb.js"/> +</body> +</html> diff --git a/mobile/android/extensions/flyweb/content/icon-64.png b/mobile/android/extensions/flyweb/content/icon-64.png Binary files differnew file mode 100644 index 000000000..be8ece467 --- /dev/null +++ b/mobile/android/extensions/flyweb/content/icon-64.png |