zombiebox
zombiebox copied to clipboard
Implement the async ajax method
I'm trying to implement the methods open but doesn't work. I used the demo https://github.com/interfaced/zombiebox-demo and trying to customize and understanding how zombie works!
I created:
/**
* list-home.js
* Created : Allan Nava
* Date : 30/10/2019
* Update : 30/10/2019
*/
import {Value} from 'zb/geometry/direction';
import {text, updateClassName} from 'zb/html';
import {Out, render} from 'generated/cutejs/demo/scenes/list-matrix/list-matrix.jst';
import Keys from 'zb/device/input/keys';
import BaseList from 'ui/widgets/base-list/base-list';
import {red, green, yellow, blue, back} from '../../widgets/help-bar-item-factory/help-bar-item-factory';
import {DataSourceGenerator, DataType} from '../../widgets/data-source-generator/data-source-generator';
import {AbstractBase} from '../abstract-base/abstract-base';
import BaseListItem from '../../widgets/base-list-item/base-list-item';
//
//
/**
*/
export default class ListHome extends AbstractBase {
/**
*/
constructor() {
super();
this._addContainerClass('s-list-home');
/**
* @type {Out}
* @protected
*/
this._exported;
/**
* @type {number}
* @private
*/
this._columnsCount = 5;
/**
* @type {number}
* @private
*/
this._rowsCount = 8;
/**
* @type {DataSourceGenerator}
* @private
*/
this._sourceGenerator = new DataSourceGenerator({
dataType: DataType.IMMEDIATELY,
timeout: 3000
});
/**
* @type {BaseList}
* @private
*/
this._baseList = this._createBaseList(this._columnsCount, this._rowsCount, 0);
/**
* @const {number}
*/
this.ITEM_WIDTH = 161;
/**
* @const {number}
*/
this.MAX_COLUMNS_COUNT = 5;
/**
* @const {number}
*/
this.MAX_ROWS_COUNT = 8;
text(this._exported.title, 'Home static base-list');
// 1. Create a new XMLHttpRequest object
/*let xhr = new XMLHttpRequest();
xhr.responseType = 'json';
// 2. Configure it: GET-request for the URL /article/.../load
xhr.open('GET', 'https://api.elevensports.it/apitv/general/get_videos.json?id=36');
// 3. Send the request over the network
xhr.send();
// 4. This will be called after the response is received
xhr.onload = function() {
if (xhr.status != 200) { // analyze HTTP status of the response
alert(`Error ${xhr.status}: ${xhr.statusText}`); // e.g. 404: Not Found
} else { // show the result
console.log(xhr.response);
var jsonData = xhr.response;
alert(JSON.stringify(jsonData));
alert(`Done, got ${xhr.response.length} bytes`); // responseText is the server
}
};
xhr.onprogress = function(event) {
if (event.lengthComputable) {
alert(`Received ${event.loaded} of ${event.total} bytes`);
} else {
alert(`Received ${event.loaded} bytes`); // no Content-Length
}
};
xhr.onerror = function() {
alert("Request failed");
};*/
}
/**
* @override
*/
load() {
console.log("load method list-home.js");
const SOME_ENDPOINT="https://api.example.it/apitv/general/get_videos.json?id=36";
return send(SOME_ENDPOINT).then(
);
//return send(SOME_ENDPOINT).then(/* process it how you want */);
}
/**
* @override
*/
_renderTemplate() {
return render(this._getTemplateData(), this._getTemplateOptions());
}
/**
* @override
*/
_processKey(zbKey, e) {
switch (zbKey) {
case Keys.RED:
this._removeRow();
return true;
case Keys.GREEN:
this._addRow();
return true;
case Keys.YELLOW:
this._removeColumn();
return true;
case Keys.BLUE:
this._addColumn();
return true;
}
return super._processKey(zbKey, e);
}
/**
* @override
*/
_getHelpBarItems() {
const redButton = red('');
const greenButton = green('Remove/add row');
const yellowButton = yellow('');
const blueButton = blue('Remove/add column');
redButton.disable();
greenButton.disable();
yellowButton.disable();
blueButton.disable();
updateClassName(redButton.getContainer(), '_remove', true);
updateClassName(greenButton.getContainer(), '_add', true);
updateClassName(yellowButton.getContainer(), '_remove', true);
updateClassName(blueButton.getContainer(), '_add', true);
return [
redButton,
greenButton,
yellowButton,
blueButton,
back()
];
}
/**
* @private
*/
_addRow() {
const rowsCount = Math.min(this._rowsCount + 1, this.MAX_ROWS_COUNT);
if (rowsCount !== this._rowsCount) {
this._rowsCount = rowsCount;
this._baseList = this._updateBaseList(this._baseList, this._columnsCount, this._rowsCount);
}
}
/**
* @private
*/
_removeRow() {
const rowsCount = Math.max(this._rowsCount - 1, 1);
if (rowsCount !== this._rowsCount) {
this._rowsCount = rowsCount;
this._baseList = this._updateBaseList(this._baseList, this._columnsCount, this._rowsCount);
}
}
/**
* @private
*/
_addColumn() {
const columnsCount = Math.min(this._columnsCount + 1, this.MAX_COLUMNS_COUNT);
if (columnsCount !== this._columnsCount) {
this._columnsCount = columnsCount;
this._baseList = this._updateBaseList(this._baseList, this._columnsCount, this._rowsCount);
}
}
/**
* @private
*/
_removeColumn() {
const columnsCount = Math.max(this._columnsCount - 1, 1);
if (columnsCount !== this._columnsCount) {
this._columnsCount = columnsCount;
this._baseList = this._updateBaseList(this._baseList, this._columnsCount, this._rowsCount);
}
}
/**
* @param {BaseList} oldBaseList
* @param {number} columnsCount
* @param {number} rowsCount
* @return {BaseList}
* @private
*/
_updateBaseList(oldBaseList, columnsCount, rowsCount) {
const isBaseListInFocus = this.getActiveWidget() instanceof BaseList;
const source = oldBaseList.getSource();
const index = source ? source.currentIndex() : 0;
this._removeBaseList(oldBaseList);
const newBaseList = this._createBaseList(columnsCount, rowsCount, index);
if (isBaseListInFocus) {
this.activateWidget(newBaseList);
}
return newBaseList;
}
/**
* @param {number} columnsCount
* @param {number} rowsCount
* @param {number} index
* @return {BaseList}
* @private
*/
_createBaseList(columnsCount, rowsCount, index) {
const itemsCount = columnsCount * rowsCount;
const baseList = new BaseList({
itemClass: BaseListItem,
options: {
lineSize: columnsCount,
padding: itemsCount
},
isVertical: true
});
this._exported.sliderWrapper.appendChild(baseList.getContainer());
this._exported.sliderWrapper.style.width = columnsCount * this.ITEM_WIDTH + 'px';
this.appendWidget(baseList);
this.setNavigationRule(baseList, Value.RIGHT, null);
this.setNavigationRule(baseList, Value.LEFT, this._menu);
const source = this._sourceGenerator.getStaticSource(1, itemsCount);
source.selectAt(index);
baseList.setSource(source);
text(this._exported.rows, String(rowsCount));
text(this._exported.columns, String(columnsCount));
return baseList;
}
/**
* @param {BaseList} baseList
* @private
*/
_removeBaseList(baseList) {
this.removeNavigationRule(baseList, Value.RIGHT);
this.removeNavigationRule(baseList, Value.LEFT);
this._exported.sliderWrapper.removeChild(baseList.getContainer());
this.removeWidget(baseList);
}
}
applications.js
/**
* application.js
* Created : Allan Nava
* Date : 30/10/2019
* Update : 30/10/2019
*/
import {hide, show, div} from 'zb/html';
import {setLevel, Level} from 'zb/console/console';
import {Resolution, ResolutionInfo} from 'zb/device/resolutions';
import BaseApplication from 'generated/base-application';
import About from 'about/about';
import BaseServiceContainer from 'generated/dependency-injection/base-service-container';
import Throbber from './widgets/throbber/throbber';
/**
*/
export default class Application extends BaseApplication {
/**
*/
constructor() {
setLevel(Level.ALL);
super();
/**
* @type {BaseServiceContainer}
*/
this.sc;
/**
* @type {?Throbber}
* @private
*/
this._throbber = null;
/**
* Fired with: {{
* id: number,
* status: boolean
* }}
* @const {string}
*/
this.EVENT_MENU_TOGGLE = 'menu-toggle';
}
/**
* @override
*/
processKey(zbKey, e) {
About.processKey(zbKey);
return super.processKey(zbKey, e);
}
/**
* @override
*/
onReady() {
super.onReady();
this.sc = new BaseServiceContainer(this);
this.sc.bootstrap();
if (this.isDevicePc()) {
this._body.appendChild(div('zb-body__pc-help'));
}
}
/**
* @override
*/
onStart() {
// login, splashscreen, timeout, etc.
this.home();
}
/**
* @override
*/
home() {
return this.getSceneOpener()
.open(this.sc.scenesVideoPlayer, () => {
this.sc.scenesVideoPlayer.setActiveSceneId({
id: 0,
subItem: null
});
});
}
/**
* @param {Promise} job
*/
addTrobberJob(job) {
if (this._throbber) {
this._throbber.wait(job);
}
}
/**
* @override
*/
_backOnEmptyHistory() {
this.device.exit();
}
/**
* @override
*/
_onDeviceReady(eventName, device) {
super._onDeviceReady(eventName, device);
this._createThrobber();
}
/**
* @override
*/
_appendScreenSizeClass() {
// No super necessary
const resolutionInfo = ResolutionInfo[Resolution.HD];
this._appendViewportSize(resolutionInfo);
this._body.classList.add('zb-hd');
}
/**
* @private
*/
_createThrobber() {
const throbberWrap = div('a-throbber zb-fullscreen');
this._throbber = new Throbber();
throbberWrap.appendChild(this._throbber.getContainer());
this._body.appendChild(throbberWrap);
this._throbber.on(this._throbber.EVENT_START, () => {
show(throbberWrap);
});
this._throbber.on(this._throbber.EVENT_STOP, () => {
hide(throbberWrap);
});
}
/**
*
*/
open(name) {
const scene = this._layerManager.getLayer(name);
const sceneLoadingPromise = scene.load()
.then(() => {
this._layerManager.hide();
this._layerManager.open(scene);
});
this._throbberService.add(sceneLoadingPromise); // Or other async logic handling
}
}
Any newss? Is still alive the project=
Hi Allan well first I need to understand if you want to create another scene, and then navigate into that scene