summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md10
-rw-r--r--package.json5
-rw-r--r--src/config.json20
-rw-r--r--src/index.html42
-rw-r--r--src/index.js10
-rw-r--r--src/js/AFB.js215
-rw-r--r--src/js/apps.js44
-rw-r--r--src/js/buttons.js38
-rw-r--r--src/js/chair.js33
-rw-r--r--src/js/fan_speed.js29
-rw-r--r--src/js/main.js5
-rw-r--r--src/js/temperature.js89
-rw-r--r--webpack.config.js6
13 files changed, 100 insertions, 446 deletions
diff --git a/README.md b/README.md
index e69de29..97fdce7 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,10 @@
+su agl-driver
+
+afm-util kill homescreen@0.1
+afm-util kill launcher@0.1
+
+afm-util remove homescreen@0.1
+afm-util remove launcher@0.1
+
+afm-util run webapps-html5-homescreen@1.0
+
diff --git a/package.json b/package.json
index 4d5a563..ede4d0d 100644
--- a/package.json
+++ b/package.json
@@ -35,5 +35,8 @@
"webpack-dev-server": "^3.7.2",
"zip-webpack-plugin": "^3.0.0"
},
- "dependencies": {}
+ "dependencies": {
+ "agl-js-api": "git@bitbucket.org:smarsol/agl-js-api.git#master",
+ "mustache": "^3.1.0"
+ }
}
diff --git a/src/config.json b/src/config.json
new file mode 100644
index 0000000..6a68312
--- /dev/null
+++ b/src/config.json
@@ -0,0 +1,20 @@
+{
+ "apps": [
+ {
+ "id": "launcher",
+ "icon": "icon icon-home"
+ },
+ {
+ "id": "mediaplayer",
+ "icon": "icon icon-music"
+ },
+ {
+ "id": "hvac",
+ "icon": "icon icon-thermometer"
+ },
+ {
+ "id": "navigation",
+ "icon": "icon icon-location"
+ }
+ ]
+} \ No newline at end of file
diff --git a/src/index.html b/src/index.html
index f4e3a38..3a6d612 100644
--- a/src/index.html
+++ b/src/index.html
@@ -22,38 +22,16 @@
</head>
<body>
<div class="top">
- <a href="#" class="button">
- <div class="icon icon-home">
-
- </div>
- <div class="label">
- LAUNCHER
- </div>
- </a>
- <a href="#" class="button">
- <div class="icon icon-music">
-
- </div>
- <div class="label">
- MEDIAPLAYER
- </div>
- </a>
- <a href="#" class="button">
- <div class="icon icon-thermometer">
-
- </div>
- <div class="label">
- HVAC
- </div>
- </a>
- <a href="#" class="button">
- <div class="icon icon-location">
-
- </div>
- <div class="label">
- NAVIGATION
- </div>
- </a>
+ <script id="app-template" type="x-tmpl-mustache">
+ <a href="#" class="button" id="app-{{id}}" app-id="{{ id }}" onclick="window.start(this);">
+ <div class="{{ icon }}">
+
+ </div>
+ <div class="label">
+ {{ name }}
+ </div>
+ </a>
+ </script>
<div class="infoContainer">
<div class="infoItem day">
TUESDAY
diff --git a/src/index.js b/src/index.js
index 962b5a6..7b6f84c 100644
--- a/src/index.js
+++ b/src/index.js
@@ -14,8 +14,10 @@
* limitations under the License.
*/
-/* JS */
-import './js/AFB.js';
-
/* CSS */
-import './styles/app.scss'; \ No newline at end of file
+import './styles/app.scss';
+import { init } from './js/main';
+import { start } from './js/apps';
+
+window.start = start;
+init(); \ No newline at end of file
diff --git a/src/js/AFB.js b/src/js/AFB.js
deleted file mode 100644
index d6e6bfa..0000000
--- a/src/js/AFB.js
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (C) 2017, 2018 "IoT.bzh"
- * Author: José Bollo <jose.bollo@iot.bzh>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-AFB = function(base, initialtoken){
-
-if (typeof base != "object")
- base = { base: base, token: initialtoken };
-
-var initial = {
- base: base.base || "api",
- token: base.token || initialtoken || "HELLO",
- host: base.host || window.location.host,
- url: base.url || undefined
-};
-
-var urlws = initial.url || "ws://"+initial.host+"/"+initial.base;
-
-/*********************************************/
-/**** ****/
-/**** AFB_context ****/
-/**** ****/
-/*********************************************/
-var AFB_context;
-{
- var UUID = undefined;
- var TOKEN = initial.token;
-
- var context = function(token, uuid) {
- this.token = token;
- this.uuid = uuid;
- }
-
- context.prototype = {
- get token() {return TOKEN;},
- set token(tok) {if(tok) TOKEN=tok;},
- get uuid() {return UUID;},
- set uuid(id) {if(id) UUID=id;}
- };
-
- AFB_context = new context();
-}
-/*********************************************/
-/**** ****/
-/**** AFB_websocket ****/
-/**** ****/
-/*********************************************/
-var AFB_websocket;
-{
- var CALL = 2;
- var RETOK = 3;
- var RETERR = 4;
- var EVENT = 5;
-
- var PROTO1 = "x-afb-ws-json1";
-
- AFB_websocket = function(on_open, on_abort) {
- var u = urlws, p = '?';
- if (AFB_context.token) {
- u = u + '?x-afb-token=' + AFB_context.token;
- p = '&';
- }
- if (AFB_context.uuid)
- u = u + p + 'x-afb-uuid=' + AFB_context.uuid;
- this.ws = new WebSocket(u, [ PROTO1 ]);
- this.url = u;
- this.pendings = {};
- this.awaitens = {};
- this.counter = 0;
- this.ws.onopen = onopen.bind(this);
- this.ws.onerror = onerror.bind(this);
- this.ws.onclose = onclose.bind(this);
- this.ws.onmessage = onmessage.bind(this);
- this.onopen = on_open;
- this.onabort = on_abort;
- }
-
- function onerror(event) {
- var f = this.onabort;
- if (f) {
- delete this.onopen;
- delete this.onabort;
- f && f(this);
- }
- this.onerror && this.onerror(this);
- }
-
- function onopen(event) {
- var f = this.onopen;
- delete this.onopen;
- delete this.onabort;
- f && f(this);
- }
-
- function onclose(event) {
- var err = {
- jtype: 'afb-reply',
- request: {
- status: 'disconnected',
- info: 'server hung up'
- }
- };
- for (var id in this.pendings) {
- try { this.pendings[id][1](err); } catch (x) {/*NOTHING*/}
- }
- this.pendings = {};
- this.onclose && this.onclose();
- }
-
- function fire(awaitens, name, data) {
- var a = awaitens[name];
- if (a)
- a.forEach(function(handler){handler(data);});
- var i = name.indexOf("/");
- if (i >= 0) {
- a = awaitens[name.substring(0,i)];
- if (a)
- a.forEach(function(handler){handler(data);});
- }
- a = awaitens["*"];
- if (a)
- a.forEach(function(handler){handler(data);});
- }
-
- function reply(pendings, id, ans, offset) {
- if (id in pendings) {
- var p = pendings[id];
- delete pendings[id];
- try { p[offset](ans); } catch (x) {/*TODO?*/}
- }
- }
-
- function onmessage(event) {
- var obj = JSON.parse(event.data);
- var code = obj[0];
- var id = obj[1];
- var ans = obj[2];
- AFB_context.token = obj[3];
- switch (code) {
- case RETOK:
- reply(this.pendings, id, ans, 0);
- break;
- case RETERR:
- reply(this.pendings, id, ans, 1);
- break;
- case EVENT:
- default:
- fire(this.awaitens, id, ans);
- break;
- }
- }
-
- function close() {
- this.ws.close();
- this.ws.onopen =
- this.ws.onerror =
- this.ws.onclose =
- this.ws.onmessage =
- this.onopen =
- this.onabort = function(){};
- }
-
- function call(method, request, callid) {
- return new Promise((function(resolve, reject){
- var id, arr;
- if (callid) {
- id = String(callid);
- if (id in this.pendings)
- throw new Error("pending callid("+id+") exists");
- } else {
- do {
- id = String(this.counter = 4095 & (this.counter + 1));
- } while (id in this.pendings);
- }
- this.pendings[id] = [ resolve, reject ];
- arr = [CALL, id, method, request ];
- if (AFB_context.token) arr.push(AFB_context.token);
- this.ws.send(JSON.stringify(arr));
- }).bind(this));
- }
-
- function onevent(name, handler) {
- var id = name;
- var list = this.awaitens[id] || (this.awaitens[id] = []);
- list.push(handler);
- }
-
- AFB_websocket.prototype = {
- close: close,
- call: call,
- onevent: onevent
- };
-}
-/*********************************************/
-/**** ****/
-/**** ****/
-/**** ****/
-/*********************************************/
-return {
- context: AFB_context,
- ws: AFB_websocket
-};
-};
diff --git a/src/js/apps.js b/src/js/apps.js
new file mode 100644
index 0000000..73d926e
--- /dev/null
+++ b/src/js/apps.js
@@ -0,0 +1,44 @@
+import { afmMain } from 'agl-js-api';
+import Mustache from 'mustache';
+
+var configjson = require('../config.json');
+var template;
+var parent;
+
+function renderApp(app) {
+ parent.innerHTML = Mustache.render(template, app) + parent.innerHTML;
+}
+
+function locateApp(appId, appList) {
+ return appList.find(function(app){
+ return app.id.split('@')[0] === appId
+ });
+}
+
+function load_application_list() {
+ afmMain.runnables().then(function(result) {
+ configjson.apps.forEach(function(app) {
+ var internalApp = locateApp(app.id, result);
+
+ renderApp({
+ id: internalApp.id,
+ name: internalApp.name,
+ icon: app.icon
+ });
+ });
+ });
+}
+
+export function start(node) {
+ var appId = node.getAttribute('app-id');
+ afmMain.start(appId).then(function(result) {
+ console.log("success: " + result);
+ });
+}
+
+export function init() {
+ template = document.getElementById('app-template').innerHTML;
+ parent = document.getElementById('app-template').parentNode
+ Mustache.parse(template);
+ load_application_list();
+} \ No newline at end of file
diff --git a/src/js/buttons.js b/src/js/buttons.js
deleted file mode 100644
index 5fcb521..0000000
--- a/src/js/buttons.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2019 Igalia, S.L.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var buttons = {
- ac: false,
- auto: false,
- circulation: false,
- down: false,
- up: false,
- right: false,
- rear: false,
- front: false
-};
-
-function update(node, value) {
- node.setAttribute('value', value);
-}
-
-module.exports = {
- toggle: function(node) {
- var key = node.getAttribute('key');
- buttons[key] = !buttons[key];
- update(node, buttons[key]);
- }
-} \ No newline at end of file
diff --git a/src/js/chair.js b/src/js/chair.js
deleted file mode 100644
index 5cd26e8..0000000
--- a/src/js/chair.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2019 Igalia, S.L.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var left = 0;
-var right = 0;
-
-function update(node, value){
- node.setAttribute('value', value);
-}
-
-module.exports = {
- left: function(node) {
- left = (left + 1) % 3;
- update(node, left);
- },
- right: function(node) {
- right = (right + 1) % 3;
- update(node, right);
- },
-} \ No newline at end of file
diff --git a/src/js/fan_speed.js b/src/js/fan_speed.js
deleted file mode 100644
index 8b131b5..0000000
--- a/src/js/fan_speed.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2019 Igalia, S.L.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var value = 0;
-
-function update(node, value) {
- node.value = value;
- node.parentNode.getElementsByTagName('progress')[0].value = value;
-}
-
-module.exports = {
- set: function(node) {
- value = node.value;
- update(node, value);
- }
-} \ No newline at end of file
diff --git a/src/js/main.js b/src/js/main.js
new file mode 100644
index 0000000..c68f572
--- /dev/null
+++ b/src/js/main.js
@@ -0,0 +1,5 @@
+import { init as init_apps } from './apps';
+
+export function init() {
+ init_apps();
+} \ No newline at end of file
diff --git a/src/js/temperature.js b/src/js/temperature.js
deleted file mode 100644
index 3a394a1..0000000
--- a/src/js/temperature.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2019 Igalia, S.L.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var left = 22;
-var right = 22;
-
-var lowTemperature = 15;
-var hiTemperature = 30;
-var temperatures = [];
-
-var isScrolling;
-var elementHeight;
-
-function createTemperatureElement() {
- var element = document.createElement('div');
- element.classList = ['temperature'];
- element.style.height = elementHeight+'px';
- element.style.lineHeight = elementHeight+'px';
- return element;
-}
-
-function update(node, index) {
- node.scrollTop = index*elementHeight;
-
- for( var i=0; i<node.children.length; i++) {
- node.children[i].setAttribute('enabled',false);
- }
- node.children[index].setAttribute('enabled', true);
-}
-
-module.exports = {
- left: function(node) {
- clearTimeout(isScrolling);
-
- isScrolling = setTimeout(function(){
- var index = Math.round(node.scrollTop/elementHeight);
- left = temperatures[index];
- update(node, index);
- console.log('LEFT', left);
- }, 100);
- },
- right: function(node) {
- clearTimeout(isScrolling);
-
- isScrolling = setTimeout(function(){
- var index = Math.round(node.scrollTop/elementHeight);
- right = temperatures[index];
- update(node, index);
- console.log('RIGHT', right);
- }, 100);
- },
- init: function() {
- var leftTemperature = document.getElementById('lefttemperature');
- var rightTemperature = document.getElementById('righttemperature');
- elementHeight = leftTemperature.offsetHeight/2;
-
- for( var i=lowTemperature; i<=hiTemperature; i++) {
- var element = createTemperatureElement();
- if( i === lowTemperature) {
- element.innerHTML = 'LO';
- } else if( i === hiTemperature ) {
- element.innerHTML = 'HI';
- } else {
- element.innerHTML = i+'º';
- }
- leftTemperature.appendChild(element);
- rightTemperature.appendChild(element.cloneNode(true));
- temperatures[temperatures.length] = i;
- }
- leftTemperature.appendChild(createTemperatureElement());
- rightTemperature.appendChild(createTemperatureElement());
-
- update(leftTemperature, temperatures.indexOf(left));
- update(rightTemperature, temperatures.indexOf(right));
- }
-} \ No newline at end of file
diff --git a/webpack.config.js b/webpack.config.js
index c84169f..81d3966 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -10,11 +10,7 @@ const ZipPlugin = require('zip-webpack-plugin');
module.exports = {
mode: 'production',
entry: {
- index: './src/index.js',
- FANSPEED: './src/js/fan_speed.js',
- CHAIR: './src/js/chair.js',
- BUTTON: './src/js/buttons.js',
- TEMPERATURE: './src/js/temperature.js'
+ index: './src/index.js'
},
output: {
path: __dirname + '/dist',