| How Do I … ? / Add file loading images | |
Add a file loading image that displays in the center of the page when file loading is in progress in your Genero Browser Client (GBC) applications.
"use strict";
modulum('MyApplicationHostMenuRuntimeWidget', ['WidgetBase', 'WidgetFactory'],
/**
* @param {gbc} context
* @param {classes} cls
*/
function(context, cls) {
/**
* @class classes.MyApplicationHostMenuRuntimeWidget
* @extends classes.WidgetBase
*/
cls.MyApplicationHostMenuRuntimeWidget = context.oo.Class(cls.WidgetBase, function($super) {
/** @lends classes.MyApplicationHostMenuRuntimeWidget.prototype */
return {
__name: "MyApplicationHostMenuRuntimeWidget",
_waitingTime: 100,
_timer: null,
_initElement: function() {
$super._initElement.call(this);
this._waitingTime = 1000*parseFloat(gbc.constants.theme["gbc-loader-threshold"]);
},
setIdle: function() {
if(this._timer){
window.clearTimeout(this._timer);
this._timer = null;
}
this.removeClass("processing");
},
setProcessing: function() {
if(this._timer){
window.clearTimeout(this._timer);
this._timer = null;
}
this._timer = window.setTimeout(function(){
this.addClass("processing");
}.bind(this),this._waitingTime);
}
};
});
cls.WidgetFactory.register('ApplicationHostMenuRuntime', cls.MyApplicationHostMenuRuntimeWidget);
});
"use strict";
modulum('MyApplicationHostMenuWidget', ['ApplicationHostMenuWidget', 'WidgetFactory'],
/**
* @param {gbc} context
* @param {classes} cls
*/
function(context, cls) {
/**
* @class classes.MyApplicationHostMenuWidget
* @extends classes.ApplicationHostMenuWidget
*/
cls.MyApplicationHostMenuWidget = context.oo.Class(cls.ApplicationHostMenuWidget, function($super) {
/** @lends classes.MyApplicationHostMenuWidget.prototype */
return {
__name: "MyApplicationHostMenuWidget",
__templateName: "ApplicationHostMenuWidget",
_initElement:function(){
$super._initElement.call(this);
this._element.addClass("gbc_ApplicationHostMenuWidget");
},
_createMenuItems: function() {
this._uploadStatus = cls.WidgetFactory.create('ApplicationHostUploadsMenu');
this.addChildWidget(this._uploadStatus);
this._runtimeStatus = cls.WidgetFactory.create('ApplicationHostMenuRuntime');
document.body.appendChild(this._runtimeStatus._element);
this._aboutMenu = cls.WidgetFactory.create('ApplicationHostAboutMenu');
this.addChildWidget(this._aboutMenu);
this._settingsMenu = cls.WidgetFactory.create('ApplicationHostSettingsMenu');
this.addChildWidget(this._settingsMenu);
//debug
this._proxyLogMenu = cls.WidgetFactory.create('ApplicationHostMenuProxyLog');
this.addChildWidget(this._proxyLogMenu);
this._vmLogMenu = cls.WidgetFactory.create('ApplicationHostMenuVmLog');
this.addChildWidget(this._vmLogMenu);
this._runInGwcMenu = cls.WidgetFactory.create('ApplicationHostMenuRunInGwc');
this.addChildWidget(this._runInGwcMenu);
this._runInGdcMenu = cls.WidgetFactory.create('ApplicationHostMenuRunInGdc');
this.addChildWidget(this._runInGdcMenu);
this._debugMenu = cls.WidgetFactory.create('ApplicationHostDebugMenu');
this.addChildWidget(this._debugMenu);
},
_destroyMenuItems: function(){
this._runtimeStatus.getElement().remove();
$super._destroyMenuItems.call(this);
}
};
});
cls.WidgetFactory.register('ApplicationHostMenu', cls.MyApplicationHostMenuWidget);
});
In the _createMenuItems function the runtimeStatus element (shown highlighted) is appended to the document body element.
.gbc_MyApplicationHostMenuRuntimeWidget.processing {
opacity: 0;
position: fixed;
z-index: 9999;
top: 40%;
left: 50%;
& > *:hover {
cursor: default;
}
&.processing {
//animation: pulse 200ms infinite;
opacity: 1;
}
$base-line-height: 100px;
$white: rgb(158,158,158);
$off-white: rgba($white, 0.2);
$spin-duration: 1s;
$pulse-duration: 750ms;
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.loading {
border-radius: 50%;
width: $base-line-height;
height: $base-line-height;
border: .5rem solid $off-white;
border-top-color: $white;
animation: spin $spin-duration infinite linear;
&--double {
border-style: double;
border-width: .5rem;
}
}
}
This style example defines the animation icon and its behavior:
<div>
<div class="loading" title="1">
</div>
</div>
The div class attribute references the loading style
you created in the MyApplicationHostMenuRuntimeWidget.scss file.
{
"gbc-loader-threshold": "0.5s"
}
The value (0.5s) specifies a delay (in seconds) for the timer function loading the
icon.
@import "MyApplicationHostMenuRuntimeWidget";In this example we import the MyApplicationHostMenuRuntimeWidget style.
Figure 1. Icon centered in the browser window