# HG changeset patch # User Nicholas Jillings # Date 1494342671 -3600 # Node ID 97a52e326464e07c2ac05011b910ed308341c48e # Parent 0228ab1777d9c3a6f0feab0ac90588c5962ee19b# Parent cf1a3a52917793dc24ed6d1016e94daca9414839 Merge branch 'master' into vnext diff -r 0228ab1777d9 -r 97a52e326464 interfaces/AB.js --- a/interfaces/AB.js Tue May 09 14:52:47 2017 +0100 +++ b/interfaces/AB.js Tue May 09 16:11:11 2017 +0100 @@ -395,6 +395,10 @@ function buttonSubmitClick() { var checks = testState.currentStateMap.interfaces[0].options, canContinue = true; + + if (interfaceContext.checkFragmentMinPlays() === false) { + return; +} for (var i = 0; i < checks.length; i++) { if (checks[i].type == 'check') { diff -r 0228ab1777d9 -r 97a52e326464 interfaces/ABX.js --- a/interfaces/ABX.js Tue May 09 14:52:47 2017 +0100 +++ b/interfaces/ABX.js Tue May 09 16:11:11 2017 +0100 @@ -424,6 +424,10 @@ var checks = testState.currentStateMap.interfaces[0].options, canContinue = true; + if (interfaceContext.checkFragmentMinPlays() === false) { + return; + } + for (var i = 0; i < checks.length; i++) { var checkState = true; if (checks[i].type == 'check') { diff -r 0228ab1777d9 -r 97a52e326464 interfaces/ape.js --- a/interfaces/ape.js Tue May 09 14:52:47 2017 +0100 +++ b/interfaces/ape.js Tue May 09 16:11:11 2017 +0100 @@ -750,6 +750,9 @@ if (interfaceContext.checkHiddenReference() === false) { return; } + if (interfaceContext.checkFragmentMinPlays() === false) { + return; + } for (var i = 0; i < checks.length; i++) { var checkState = true; diff -r 0228ab1777d9 -r 97a52e326464 interfaces/discrete.js --- a/interfaces/discrete.js Tue May 09 14:52:47 2017 +0100 +++ b/interfaces/discrete.js Tue May 09 16:11:11 2017 +0100 @@ -482,6 +482,9 @@ if (interfaceContext.checkHiddenReference() === false) { return; } + if (interfaceContext.checkFragmentMinPlays() === false) { + return; + } for (var i = 0; i < checks.length; i++) { var checkState; diff -r 0228ab1777d9 -r 97a52e326464 interfaces/horizontal-sliders.js --- a/interfaces/horizontal-sliders.js Tue May 09 14:52:47 2017 +0100 +++ b/interfaces/horizontal-sliders.js Tue May 09 16:11:11 2017 +0100 @@ -431,6 +431,9 @@ if (interfaceContext.checkHiddenReference() === false) { return; } + if (interfaceContext.checkFragmentMinPlays() === false) { + return; + } for (var i = 0; i < checks.length; i++) { var checkState = true; diff -r 0228ab1777d9 -r 97a52e326464 interfaces/mushra.js --- a/interfaces/mushra.js Tue May 09 14:52:47 2017 +0100 +++ b/interfaces/mushra.js Tue May 09 16:11:11 2017 +0100 @@ -525,6 +525,9 @@ if (interfaceContext.checkHiddenReference() === false) { return; } + if (interfaceContext.checkFragmentMinPlays() === false) { + return; + } for (var i = 0; i < checks.length; i++) { var checkState = true; diff -r 0228ab1777d9 -r 97a52e326464 interfaces/timeline.js --- a/interfaces/timeline.js Tue May 09 14:52:47 2017 +0100 +++ b/interfaces/timeline.js Tue May 09 16:11:11 2017 +0100 @@ -496,6 +496,9 @@ } var checks = testState.currentStateMap.interfaces[0].options, canContinue = true; + if (interfaceContext.checkFragmentMinPlays() === false) { + return; + } for (var i = 0; i < checks.length; i++) { var checkState = true; if (checks[i].type == 'check') { diff -r 0228ab1777d9 -r 97a52e326464 js/core.js --- a/js/core.js Tue May 09 14:52:47 2017 +0100 +++ b/js/core.js Tue May 09 16:11:11 2017 +0100 @@ -3333,6 +3333,27 @@ } return state; }; + this.checkFragmentMinPlays = function () { + var failedObjects = audioEngineContext.audioObjects.filter(function (a) { + var minPlays = a.specification.minNumberPlays || a.specification.parent.minNumberPlays || specification.minNumberPlays; + if (minPlays === undefined || a.numberOfPlays >= minPlays) { + return false; + } + return true; + }); + if (failedObjects.length === 0) { + return true; + } + var failedString = []; + failedObjects.forEach(function (a) { + failedString.push(a.interfaceDOM.getPresentedId()); + }); + var str = "You have not played fragments " + failedString.join(", ") + " enough. Please keep listening"; + interfaceContext.lightbox.post("Message", str); + this.storeErrorNode(str); + return false; + }; + this.sortFragmentsByScore = function () { var elements = audioEngineContext.audioObjects.filter(function (elem) {