diff --git a/src/main/java/org/olat/core/gui/components/Window.java b/src/main/java/org/olat/core/gui/components/Window.java index efe4ec614ce9fa83b3e9c7eb0f9e428e937a3b9f..9e1d5ca2d5407ed39d3a0160c6d339c349b7191d 100644 --- a/src/main/java/org/olat/core/gui/components/Window.java +++ b/src/main/java/org/olat/core/gui/components/Window.java @@ -139,6 +139,12 @@ public class Window extends AbstractComponent { */ public static final Event ABOUT_TO_DISPATCH = new Event("about_to_dispatch"); + /** The parameter name for the case where the event doesn't need to trigger a response */ + public static final String NO_RESPONSE_PARAMETER_MARKER = "no-response"; + + /** The parameter value for the case where the event doesn't need to trigger a response */ + public static final String NO_RESPONSE_VALUE_MARKER = "oo-no-response"; + private String uriPrefix; private ComponentCollection contentPane; private String latestTimestamp; @@ -335,6 +341,11 @@ public class Window extends AbstractComponent { // this can happen e.g. on quick double-clicks, so that the dom-replacement-command never reaches the client. if (isDebugLog) log.debug("no ajax dispatch: component not found (target=null)"); validForDispatching = false; + //check no response call + String noResponseMarker = ureq.getParameter("no-response"); + if("oo-no-response".equals(noResponseMarker)) { + return; + } } // 2.) collect dirty components (top-down, return from sub-path when first dirty node met) diff --git a/src/main/java/org/olat/core/gui/render/URLBuilder.java b/src/main/java/org/olat/core/gui/render/URLBuilder.java index 13ae1d1b129270b7fd9395509caf7a2449b7c758..0a5da9a4ca0271e87ca518ab8592e8b31dadb570 100644 --- a/src/main/java/org/olat/core/gui/render/URLBuilder.java +++ b/src/main/java/org/olat/core/gui/render/URLBuilder.java @@ -32,6 +32,7 @@ import java.util.regex.Pattern; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; +import org.olat.core.gui.components.Window; import org.olat.core.gui.components.form.flexible.impl.NameValuePair; import org.olat.core.gui.control.winmgr.AJAXFlags; import org.olat.core.logging.AssertException; @@ -197,6 +198,8 @@ public class URLBuilder { } sb.append("'"); commandParameters(sb, commands); + //no response marker + commandParameters(sb, new NameValuePair(Window.NO_RESPONSE_PARAMETER_MARKER, Window.NO_RESPONSE_VALUE_MARKER)); return sb; } diff --git a/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java b/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java index 6a87b4231c17d4d219d864a2f44a014521e62b2f..19e4c01d8a20531e16be2758d37fa8f769242c26 100644 --- a/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java +++ b/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java @@ -193,6 +193,12 @@ public class VelocityRenderDecorator implements Closeable { return ""; } + public String openNoResponseJavaScriptCommand(String command) { + renderer.getUrlBuilder().openXHRNoResponseEvent(target, null, + new NameValuePair(VelocityContainer.COMMAND_ID, command)); + return ""; + } + /** * * @param command diff --git a/src/main/java/org/olat/modules/video/ui/_content/video_run.html b/src/main/java/org/olat/modules/video/ui/_content/video_run.html index 5ebd1058078b4615a13fb4fffc7632ebe1432b86..f90cc3638abce7a22e0ffe3430df27d2b298998a 100644 --- a/src/main/java/org/olat/modules/video/ui/_content/video_run.html +++ b/src/main/java/org/olat/modules/video/ui/_content/video_run.html @@ -38,34 +38,32 @@ ## Callback to communicate with the server success: function (mediaElement, domObject) { -#* -## does not work for now with autoplay ## listen to play events, fired when movie is finished mediaElement.addEventListener('play', function(e) { if (!o_info.linkbusy) { - $r.openJavaScriptCommand("play"), 'currentTime', mediaElement.currentTime, 'src', mediaElement.src); + $r.openNoResponseJavaScriptCommand("play"), 'currentTime', mediaElement.currentTime, 'src', mediaElement.src); } }, false); ## listen to pause events, fired when movie is paused by user mediaElement.addEventListener('pause', function(e) { if (!o_info.linkbusy) { - $r.openJavaScriptCommand("pause"), 'currentTime', mediaElement.currentTime, 'src', mediaElement.src); + $r.openNoResponseJavaScriptCommand("pause"), 'currentTime', mediaElement.currentTime, 'src', mediaElement.src); } }, false); ## listen to seeked events, fired when user uses the slider in the movie mediaElement.addEventListener('seeked', function(e) { if (!o_info.linkbusy) { - $r.openJavaScriptCommand("seeked"), 'currentTime', mediaElement.currentTime, 'src', mediaElement.src); + $r.openNoResponseJavaScriptCommand("seeked"), 'currentTime', mediaElement.currentTime, 'src', mediaElement.src); } }, false); ## listen to end events, fired when movie is finished mediaElement.addEventListener('ended', function(e) { if (!o_info.linkbusy) { - $r.openJavaScriptCommand("ended"), 'currentTime', mediaElement.currentTime, 'src', mediaElement.src); + $r.openNoResponseJavaScriptCommand("ended"), 'currentTime', mediaElement.currentTime, 'src', mediaElement.src); } }, false); -*# + ## ## Preselect the preferred source #if($useSourceChooser)