allTimelineVariablesNames(so_far = []) {
            if (typeof this.timeline_parameters !== "undefined") {
                so_far = so_far.concat(Object.keys(this.timeline_parameters.timeline_variables[this.progress.order[this.progress.current_variable_set]]));
                // if progress.current_location is -1, then the timeline variable is being evaluated
                // in a function that runs prior to the trial starting, so we should treat that trial
                // as being the active trial for purposes of finding the value of the timeline variable
                var loc = Math.max(0, this.progress.current_location);
                // if loc is greater than the number of elements on this timeline, then the timeline
                // variable is being evaluated in a function that runs after the trial on the timeline
                // are complete but before advancing to the next (like a loop_function).
                // treat the last active trial as the active trial for this purpose.
                if (loc == this.timeline_parameters.timeline.length) {
                    loc = loc - 1;
                }
                // now find the variable
                return this.timeline_parameters.timeline[loc].allTimelineVariablesNames(so_far);
            }
            if (typeof this.timeline_parameters == "undefined") {
                return so_far;
            }
        }
// helper to get all the names at this stage.

helper to get all the names at this stage.
helper to get all the names at this stage .
allTimelineVariablesNames(so_far = []) {
            if (typeof this.timeline_parameters !== "undefined") {
                so_far = so_far.concat(Object.keys(this.timeline_parameters.timeline_variables[this.progress.order[this.progress.current_variable_set]]));
                var loc = Math.max(0, this.progress.current_location);
                if (loc == this.timeline_parameters.timeline.length) {
                    loc = loc - 1;
                }
                return this.timeline_parameters.timeline[loc].allTimelineVariablesNames(so_far);
            }
            if (typeof this.timeline_parameters == "undefined") {
                return so_far;
            }
        }
allTimelineVariablesNames ( so_far = [ ] ) { if ( typeof this . timeline_parameters !== "undefined" ) { so_far = so_far . concat ( Object . keys ( this . timeline_parameters . timeline_variables [ this . progress . order [ this . progress . current_variable_set ] ] ) ) ; var loc = Math . max ( 0 , this . progress . current_location ) ; if ( loc == this . timeline_parameters . timeline . length ) { loc = loc - 1 ; } return this . timeline_parameters . timeline [ loc ] . allTimelineVariablesNames ( so_far ) ; } if ( typeof this . timeline_parameters == "undefined" ) { return so_far ; } }
helper to get all the names at this stage.
helper to get all the names at this stage .
// if progress.current_location is -1, then the timeline variable is being evaluated
 // in a function that runs prior to the trial starting, so we should treat that trial
 // as being the active trial for purposes of finding the value of the timeline variable
 // if loc is greater than the number of elements on this timeline, then the timeline
 // variable is being evaluated in a function that runs after the trial on the timeline
 // are complete but before advancing to the next (like a loop_function).
 // treat the last active trial as the active trial for this purpose.
 // now find the variable
