--- a/src/js/iframe_embed/embedder.js Fri Apr 27 19:18:21 2012 +0200
+++ b/src/js/iframe_embed/embedder.js Thu May 03 17:52:52 2012 +0200
@@ -3,258 +3,17 @@
to the iframe url in the page url.
*/
-IriSP = {};
-
-window.onhashchange = function() {
- var url = window.location.href;
- var frame = document.getElementById("metadataplayer_embed");
-
- if ( url.split( "#" )[ 1 ] != null ) {
- hashvalue = url.split("#")[1];
- frame.contentWindow.postMessage({type: "hashchange", value: hashvalue}, "*");
- }
-};
-
-
-IriSP.handleMessages = function(e) {
- var history = window.history;
-
- if ( !history.pushState ) {
- return false;
- }
-
- if (e.data.type === "hashchange") {
- console.log(e.data.value);
- history.replaceState( {}, "", e.data.value);
- }
-};
-
-// http://stackoverflow.com/questions/799981/document-ready-equivalent-without-jquery
-var ready = (function(){
-
- var readyList,
- DOMContentLoaded,
- class2type = {};
- class2type["[object Boolean]"] = "boolean";
- class2type["[object Number]"] = "number";
- class2type["[object String]"] = "string";
- class2type["[object Function]"] = "function";
- class2type["[object Array]"] = "array";
- class2type["[object Date]"] = "date";
- class2type["[object RegExp]"] = "regexp";
- class2type["[object Object]"] = "object";
-
- var ReadyObj = {
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- ReadyObj.readyWait++;
- } else {
- ReadyObj.ready( true );
- }
- },
- // Handle when the DOM is ready
- ready: function( wait ) {
- // Either a released hold or an DOMready/load event and not yet ready
- if ( (wait === true && !--ReadyObj.readyWait) || (wait !== true && !ReadyObj.isReady) ) {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( ReadyObj.ready, 1 );
- }
-
- // Remember that the DOM is ready
- ReadyObj.isReady = true;
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --ReadyObj.readyWait > 0 ) {
- return;
- }
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ ReadyObj ] );
-
- // Trigger any bound ready events
- //if ( ReadyObj.fn.trigger ) {
- // ReadyObj( document ).trigger( "ready" ).unbind( "ready" );
- //}
- }
- },
- bindReady: function() {
- if ( readyList ) {
- return;
- }
- readyList = ReadyObj._Deferred();
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- return setTimeout( ReadyObj.ready, 1 );
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", ReadyObj.ready, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", ReadyObj.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e) {}
+(function(_frameId) {
+ var _frame = document.getElementById(_frameId);
+
+ window.onhashchange = function() {
+ frame.contentWindow.postMessage({type: "hashchange", hash: hashvalue}, "*");
+ };
- if ( document.documentElement.doScroll && toplevel ) {
- doScrollCheck();
- }
- }
- },
- _Deferred: function() {
- var // callbacks list
- callbacks = [],
- // stored [ context , args ]
- fired,
- // to avoid firing when already doing so
- firing,
- // flag to know if the deferred has been cancelled
- cancelled,
- // the deferred itself
- deferred = {
-
- // done( f1, f2, ...)
- done: function() {
- if ( !cancelled ) {
- var args = arguments,
- i,
- length,
- elem,
- type,
- _fired;
- if ( fired ) {
- _fired = fired;
- fired = 0;
- }
- for ( i = 0, length = args.length; i < length; i++ ) {
- elem = args[ i ];
- type = ReadyObj.type( elem );
- if ( type === "array" ) {
- deferred.done.apply( deferred, elem );
- } else if ( type === "function" ) {
- callbacks.push( elem );
- }
- }
- if ( _fired ) {
- deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
- }
- }
- return this;
- },
-
- // resolve with given context and args
- resolveWith: function( context, args ) {
- if ( !cancelled && !fired && !firing ) {
- // make sure args are available (#8421)
- args = args || [];
- firing = 1;
- try {
- while( callbacks[ 0 ] ) {
- callbacks.shift().apply( context, args );//shifts a callback, and applies it to document
- }
- }
- finally {
- fired = [ context, args ];
- firing = 0;
- }
- }
- return this;
- },
-
- // resolve with this as context and given arguments
- resolve: function() {
- deferred.resolveWith( this, arguments );
- return this;
- },
-
- // Has this deferred been resolved?
- isResolved: function() {
- return !!( firing || fired );
- },
-
- // Cancel
- cancel: function() {
- cancelled = 1;
- callbacks = [];
- return this;
- }
- };
-
- return deferred;
- },
- type: function( obj ) {
- return obj == null ?
- String( obj ) :
- class2type[ Object.prototype.toString.call(obj) ] || "object";
+ window.addEventListener('message', function(_e) {
+ if (e.data.type === "hashchange") {
+ document.location.hash = e.data.hash;
}
- }
- // The DOM ready check for Internet Explorer
- function doScrollCheck() {
- if ( ReadyObj.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch(e) {
- setTimeout( doScrollCheck, 1 );
- return;
- }
-
- // and execute any waiting functions
- ReadyObj.ready();
- }
- // Cleanup functions for the document ready method
- if ( document.addEventListener ) {
- DOMContentLoaded = function() {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- ReadyObj.ready();
- };
-
- } else if ( document.attachEvent ) {
- DOMContentLoaded = function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- ReadyObj.ready();
- }
- };
- }
- function ready( fn ) {
- // Attach the listeners
- ReadyObj.bindReady();
-
- var type = ReadyObj.type( fn );
-
- // Add the callback
- readyList.done( fn );//readyList is result of _Deferred()
- }
- return ready;
-})();
-
-ready(function() { window.addEventListener('message', IriSP.handleMessages, false); });
\ No newline at end of file
+ });
+
+})("metadataplayer_embed");