All,
OK I have done some debugging and the only properties that get used from the mobileLayout are the widgets position, the maps position and a panel position. The visible property is not used (which is ridiculous).
Here is one of my sites showing that the AT Widget and ScaleBar widget have been hidden in mobile but not Desktop: ArcGIS Web Application
Here is the change that needs to be made for the visible property to be used.
jimu.js\utils.js:
mo.mixinAppConfigPosition = function(config1, config2){
var mixinConfig = lang.clone(config1);
if(!config2){
return mixinConfig;
}
config2 = lang.clone(config2);
var os1 = mixinConfig.widgetOnScreen;
var os2 = config2.widgetOnScreen;
if(os2 && os2.widgets){
if(Object.prototype.toString.call(os2.widgets) ===
'[object Object]'){
array.forEach(os1.widgets, function(widget1, i){
var k;
if(widget1.uri){
k = widget1.uri;
}else{
k = 'ph_' + i;
}
if(os2.widgets[k] && os2.widgets[k].position){
if(!os2.widgets[k].position.relativeTo){
os2.widgets[k].position.relativeTo = 'map';
}
widget1.position = os2.widgets[k].position;
}
}, this);
}else{
array.forEach(os2.widgets, function(widget2, i){
if(widget2.position && !widget2.position.relativeTo){
widget2.position.relativeTo = 'map';
}
if(os1.widgets[i] && widget2.position){
os1.widgets[i].position = widget2.position;
}
if(os1.widgets[i] && widget2.hasOwnProperty("visible")){
os1.widgets[i].visible = widget2.visible;
}
});
}
}
if(os2 && os2.groups){
if(Object.prototype.toString.call(os2.groups) ===
'[object Object]'){
array.forEach(os1.groups, function(group1, i){
var k;
if(group1.label){
k = group1.label;
}else{
k = 'g_' + i;
}
if(os2.groups[k] && os2.groups[k].panel && os2.groups[k].panel.position){
if(!os2.groups[k].panel.position.relativeTo){
os2.groups[k].panel.position.relativeTo = 'map';
}
group1.panel.position = os2.groups[k].panel.position;
}
}, this);
}else{
var managerName;
if(config1.layoutDefinition){
managerName = config1.layoutDefinition.manager;
}else{
managerName = 'jimu/layoutManagers/AbsolutePositionLayoutManager';
}
if(managerName === 'jimu/layoutManagers/AbsolutePositionLayoutManager'){
array.forEach(os2.groups, function(group2, i){
if(group2.panel && group2.panel.position &&
!group2.panel.position.relativeTo){
group2.panel.position.relativeTo = 'map';
}
if(os1.groups[i] && group2.panel && group2.panel.position){
os1.groups[i].panel.position = group2.panel.position;
}
});
}else if(managerName === 'jimu/layoutManagers/GridLayoutManager'){
os1.groups = handleGridLayoutOnScreenGroupChange(os1.groups, os2.groups.map(function(g){
return g.id;
}));
}
}
}
if(config2.map && config2.map.position){
if(mixinConfig.map){
mixinConfig.map.position = config2.map.position;
}else{
mixinConfig.map = {position: config2.map.position};
}
}
if(config2.widgetPool && config2.widgetPool.panel){
if(config2.widgetPool.panel.position && !config2.widgetPool.panel.position.relativeTo){
config2.widgetPool.panel.position.relativeTo = 'map';
}
mixinConfig.widgetPool.panel.position = config2.widgetPool.panel.position;
}
if(config2.mobileLayout){
mixinConfig.mobileLayout = config2.mobileLayout;
}
return mixinConfig;
};