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 2018-08-14: v0.03-beta
---------------------- ----------------------

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

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

@ -125,10 +125,18 @@ Perl._saveAndRun = function (script) {
Perl.changeState = function (newState) { Perl.changeState = function (newState) {
var oldState = Perl.state; var oldState = Perl.state;
Perl.state = newState; 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); console.debug("Perl: state changed from "+from+" to "+to);
} ];
Perl.addStateChangeListener = function (handler) {
Perl.stateChangeListeners.push(handler);
}; };
// chan: 1=STDOUT, 2=STDERR // chan: 1=STDOUT, 2=STDERR

Loading…
Cancel
Save