Allow multiple state change listeners

master
Hauke D 7 years ago
parent 550d9fa0f3
commit a18fd401c5

@ -3,6 +3,12 @@ WebPerl Changelog
=================
not yet released: v0.05-beta
----------------------------
- Added Perl.addStateChangeListener and deprecated Perl.stateChanged
- ...
2018-08-14: v0.03-beta
----------------------

@ -82,13 +82,13 @@ function run_perl_iframe (argv, state_callback, done_callback) {
var outbuf = '';
IFramePerl.output = function (str) { outbuf+=str }; //TODO Later: maybe dynamic output updating is possible?
IFramePerl.endAfterMain = true;
IFramePerl.stateChanged = function (from,to) {
IFramePerl.addStateChangeListener( function (from,to) {
if (state_callback) state_callback(to);
if (from!='Ended' && to=='Ended') {
iframe.remove();
if (done_callback) done_callback(outbuf);
}
};
} );
IFramePerl.init(function () {
window.setTimeout(function () { IFramePerl.start(argv); }, 1);
});
@ -144,14 +144,13 @@ $( function() {
runonce.before( runonce_toggle );
runonce.hide();
}
Perl.stateChanged = function (from,to) {
console.debug("Perl: state changed from "+from+" to "+to);
Perl.addStateChangeListener( function (from,to) {
$('#runstate').text("State: "+to);
$('#runperl' ).prop("disabled", to!="Ready");
$('#argv' ).prop("disabled", to!="Ready");
$('#evalperl').prop("disabled", to!="Running");
$('#endperl' ).prop("disabled", to!="Running");
};
} );
Perl.init(final_init);
});

@ -16,8 +16,14 @@ window.addEventListener("load", function () {
document.getElementById('output')
.appendChild( Perl.makeOutputTextarea() );
var status = document.getElementById("status");
Perl.endAfterMain = true;
Perl.addStateChangeListener( function (from,to) {
if (from!="Ended" && to=="Ended")
status.textContent = "Tests finished, see output:";
} );
Perl.init(function () {
status.textContent = "Running tests...";
window.setTimeout(function () {
Perl.start(['/opt/perl/dev/WebPerl.t']);
}, 1);
@ -29,7 +35,7 @@ window.addEventListener("load", function () {
</head>
<body>
<p>Running tests...</p>
<p id="status">Loading tests...</p>
<div id="output"></div>
</body>
</html>

@ -125,10 +125,18 @@ Perl._saveAndRun = function (script) {
Perl.changeState = function (newState) {
var oldState = Perl.state;
Perl.state = newState;
if (Perl.stateChanged) Perl.stateChanged(oldState,newState);
if (Perl.stateChanged) {
console.info("Perl.stateChanged is deprecated, please use Perl.addStateChangeListener instead");
Perl.stateChanged(oldState,newState);
}
for( var i=0 ; i<Perl.stateChangeListeners.length ; i++ )
Perl.stateChangeListeners[i](oldState,newState);
};
Perl.stateChanged = function (from,to) { //TODO: allow multiple listeners
Perl.stateChangeListeners = [ function (from,to) {
console.debug("Perl: state changed from "+from+" to "+to);
} ];
Perl.addStateChangeListener = function (handler) {
Perl.stateChangeListeners.push(handler);
};
// chan: 1=STDOUT, 2=STDERR

Loading…
Cancel
Save