Code:
Ext.require([
'Ext.Panel',
'Ext.Button',
'Ext.Toolbar',
'Ext.util.JSONP',
'Ext.dataview.ComponentView'
]);
function addsWidget(data, container){
var widget;
if(data.type == "Switch"){
widget = Ext.create('Ext.form.Toggle', {label: data.label});
} else if(data.type == "Slider"){
widget = Ext.create('Ext.field.Slider', {label: data.label, value: data.item.state, minValue: 0, maxValue: 100});
} else if(data.type == "Text"){
widget = Ext.create('Ext.form.Text', {label: data.label, value: data.item? data.item.state : data.label, readOnly: true});
} else if(data.type == "Group"){
widget = Ext.create('Ext.Button', {text: data.label, style:'display:block', page_id: data.linkedPage.id, handler: tapHandler, baseCls: 'x-form-label x-field', labelCls:''}); buildUI(data.linkedPage, 'page', container);
} else if(data.type == "Frame"){
//widget = Ext.create('Ext.form.FieldSet', {title: 'test'});
buildUI(data, 'frame', container);
}
return widget;
}
function buildUI(json, type, parent){
if (json) {
var container;
if(type == 'page'){
container = Ext.create('Ext.Panel', {title: json.id, layout: 'vbox', scrollable: 'vertical', id: json.id});
} else if(type == 'frame'){
container = Ext.create('Ext.form.FieldSet', {title: json.label});
}
var page_data = json.widget;
if (Ext.isArray(page_data)){
for(var i in page_data){
container.add(addsWidget(page_data[i], container));
parent.add(container);
}
} else {
container.add(addsWidget(page_data, container));
parent.add(container);
}
}
else {
alert('There was an error retrieving the UI.');
}
}
var tapHandler = function (btn, evt) {
Ext.getCmp('content').push(btn.page_id);
}
Ext.setup({
tabletStartupScreen: 'tablet_startup.png',
phoneStartupScreen: 'phone_startup.png',
icon: 'icon.png',
glossOnIcon: false,
onReady: function() {
//var server_url = 'http://192.168.90.176:8080';
var server_url = 'http://m-design.bg/sencha';
var makeJSONPRequest = function() {
Ext.getCmp('content').setMask({
message: 'Loading...'
});
Ext.util.JSONP.request({
url: 'http://m-design.bg/sencha/json.txt',
//url: server_url+'/rest/sitemaps/demo',
callbackKey: 'jsoncallback',
params: {
key: Math.random()
},
callback: function(result) {
buildUI(result.homepage, 'page', view);
Ext.getCmp('content').unmask();
Ext.getCmp('content').push('demo')
}
});
};
var view = Ext.create('Ext.navigation.View', {
fullscreen: true,
id: 'content',
//true means the back button text will always be 'back'
// useTitleForBackButtonText: true,
items: [
//bottom toolbar containing the settings button
{
docked: 'bottom',
xtype: 'toolbar',
ui :'light',
items: [
{ xtype: 'spacer' },{
text: 'Load UI',
handler: makeJSONPRequest
},
]
},
]
});
}
});