diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-07-15 15:33:36 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-07-15 15:33:36 -0300 |
commit | a5f917bbc55e295896b8084f6657eb8b6abaf8a8 (patch) | |
tree | 83dca14378e45b11fe6bbf1d17e64505dff43cbd /extensions/TimedMediaHandler/resources/ext.tmh.OgvJsSupport.js | |
parent | a1d705e541e0d10baa6bb03935ffd38d9478d0e6 (diff) |
Add TimedMediaHandler extension that allows display audio and video files in wiki pages, using the same syntax as for image files
Diffstat (limited to 'extensions/TimedMediaHandler/resources/ext.tmh.OgvJsSupport.js')
-rw-r--r-- | extensions/TimedMediaHandler/resources/ext.tmh.OgvJsSupport.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/extensions/TimedMediaHandler/resources/ext.tmh.OgvJsSupport.js b/extensions/TimedMediaHandler/resources/ext.tmh.OgvJsSupport.js new file mode 100644 index 00000000..af3fd9f5 --- /dev/null +++ b/extensions/TimedMediaHandler/resources/ext.tmh.OgvJsSupport.js @@ -0,0 +1,67 @@ +( function( $, mw ) { + + var support = mw.OgvJsSupport = { + /** + * Ensure that the OGVPlayer class is loaded before continuing. + * + * @return jQuery.Deferred + */ + loadOgvJs: function() { + return $.Deferred( function( deferred ) { + if ( typeof OGVPlayer === 'undefined' ) { + mw.loader.using( 'ext.tmh.OgvJs', function() { + OGVLoader.base = support.basePath(); + deferred.resolve(); + } ); + } else { + deferred.resolve(); + } + }); + }, + + /** + * Get the base path of ogv.js and friends. + * + * @return string + */ + basePath: function() { + var ext = mw.config.get( 'wgExtensionAssetsPath' ), + binPlayers = ext + '/TimedMediaHandler/MwEmbedModules/EmbedPlayer/binPlayers'; + return binPlayers + '/ogv.js'; + }, + + /** + * Return a stub audio context + * + * This is used for iOS Safari to enable Web Audio by triggering an empty + * audio output channel during a user input event handler. Without that, + * audio is left disabled and won't work when we start things up after an + * asynchronous code load. + * + * @return AudioContext + */ + initAudioContext: function() { + var AudioContext = window.AudioContext || window.webkitAudioContext; + if ( AudioContext ) { + var context = new AudioContext(), + node; + if ( context.createScriptProcessor ) { + node = context.createScriptProcessor( 1024, 0, 2 ); + } else if ( context.createJavaScriptNode ) { + node = context.createJavaScriptNode( 1024, 0, 2 ); + } else { + throw new Error( 'Bad version of web audio API?' ); + } + + // Don't actually run any audio, just start & stop the node + node.connect( context.destination ); + node.disconnect(); + + return context; + } else { + return null; + } + } + }; + +} )( jQuery, mediaWiki ); |