139 lines
2.1 KiB
JavaScript
139 lines
2.1 KiB
JavaScript
|
|
var Step = require ('./step');
|
|
|
|
module.exports = new Class
|
|
({
|
|
Extends: Vn.Component
|
|
,Tag: 'htk-assistant'
|
|
,Properties:
|
|
{
|
|
stepCount:
|
|
{
|
|
type: Number
|
|
,set: function (x)
|
|
{
|
|
this._stepCount = x;
|
|
|
|
if (x > 0)
|
|
this.setStep (0);
|
|
else
|
|
this.setStep (-1);
|
|
}
|
|
,get: function ()
|
|
{
|
|
return this._stepCount;
|
|
}
|
|
},
|
|
step:
|
|
{
|
|
type: Number
|
|
,set: function (x)
|
|
{
|
|
this.setStep (x);
|
|
}
|
|
,get: function ()
|
|
{
|
|
return this._stepIndex;
|
|
}
|
|
},
|
|
stepFunc:
|
|
{
|
|
type: Function
|
|
,set: function (x)
|
|
{
|
|
this._stepFunc = x;
|
|
this.setStep (this._stepIndex);
|
|
}
|
|
,get: function ()
|
|
{
|
|
return this._stepFunc;
|
|
}
|
|
}
|
|
}
|
|
|
|
,_steps: []
|
|
,_stepNode: null
|
|
,_stepIndex: -1
|
|
,_stepName: null
|
|
,_stepCount: 0
|
|
,_stepFunc: null
|
|
|
|
,appendChild: function (step)
|
|
{
|
|
if (!(step instanceof Step))
|
|
return;
|
|
|
|
this._node.appendChild (step.node);
|
|
this._steps[step.name] = step;
|
|
|
|
if (step.name === this._stepName)
|
|
this._showStepNode ();
|
|
|
|
}
|
|
,render: function ()
|
|
{
|
|
var node = this.createRoot ('div');
|
|
node.className = 'htk-assistant';
|
|
}
|
|
,setStep: function (stepIndex)
|
|
{
|
|
if (!(stepIndex >= -1 && stepIndex < this.stepCount))
|
|
return;
|
|
|
|
if (this._stepFunc && stepIndex != -1)
|
|
{
|
|
var stepName = this._stepFunc (stepIndex);
|
|
|
|
if (stepName)
|
|
{
|
|
if (this._step)
|
|
this._step.node.style.display = 'none';
|
|
|
|
this._stepName = stepName;
|
|
this._showStepNode ()
|
|
this._setStepIndex (stepIndex);
|
|
}
|
|
else if (this._stepIndex < stepIndex)
|
|
this.setStep (stepIndex + 1);
|
|
else
|
|
this.setStep (stepIndex - 1);
|
|
}
|
|
else
|
|
{
|
|
if (this._step)
|
|
this._step.node.style.display = 'none';
|
|
|
|
this._stepName = null;
|
|
this._setStepIndex (stepIndex);
|
|
}
|
|
}
|
|
|
|
,_showStepNode: function ()
|
|
{
|
|
var step = this._steps[this._stepName];
|
|
|
|
if (step)
|
|
{
|
|
this._step = step;
|
|
step.node.style.display = 'block';
|
|
}
|
|
}
|
|
|
|
,_setStepIndex: function (stepIndex)
|
|
{
|
|
this._stepIndex = stepIndex;
|
|
this.emit ('step-change', stepIndex);
|
|
}
|
|
|
|
,movePrevious: function ()
|
|
{
|
|
this.setStep (this._stepIndex - 1);
|
|
}
|
|
|
|
,moveNext: function ()
|
|
{
|
|
this.setStep (this._stepIndex + 1);
|
|
}
|
|
});
|
|
|