X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wradmin.git/blobdiff_plain/47e86061cfc74f70ea67b8e41df9ca7b2d06b203..7170338241015cb2aee98f126ebf088e92284987:/wradmin/static/yui/history/history-debug.js diff --git a/wradmin/static/yui/history/history-debug.js b/wradmin/static/yui/history/history-debug.js deleted file mode 100644 index ac2d5dc..0000000 --- a/wradmin/static/yui/history/history-debug.js +++ /dev/null @@ -1,803 +0,0 @@ -/* -Copyright (c) 2009, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.net/yui/license.txt -version: 2.7.0 -*/ -/** - * The Browser History Manager provides the ability to use the back/forward - * navigation buttons in a DHTML application. It also allows a DHTML - * application to be bookmarked in a specific state. - * - * This library requires the following static markup: - * - * <iframe id="yui-history-iframe" src="path-to-real-asset-in-same-domain"></iframe> - * <input id="yui-history-field" type="hidden"> - * - * @module history - * @requires yahoo,event - * @namespace YAHOO.util - * @title Browser History Manager - */ - -/** - * The History class provides the ability to use the back/forward navigation - * buttons in a DHTML application. It also allows a DHTML application to - * be bookmarked in a specific state. - * - * @class History - * @constructor - */ -YAHOO.util.History = (function () { - - /** - * Our hidden IFrame used to store the browsing history. - * - * @property _histFrame - * @type HTMLIFrameElement - * @default null - * @private - */ - var _histFrame = null; - - /** - * INPUT field (with type="hidden" or type="text") or TEXTAREA. - * This field keeps the value of the initial state, current state - * the list of all states across pages within a single browser session. - * - * @property _stateField - * @type HTMLInputElement|HTMLTextAreaElement - * @default null - * @private - */ - var _stateField = null; - - /** - * Flag used to tell whether YAHOO.util.History.initialize has been called. - * - * @property _initialized - * @type boolean - * @default false - * @private - */ - var _initialized = false; - - /** - * List of registered modules. - * - * @property _modules - * @type array - * @default [] - * @private - */ - var _modules = []; - - /** - * List of fully qualified states. This is used only by Safari. - * - * @property _fqstates - * @type array - * @default [] - * @private - */ - var _fqstates = []; - - /** - * location.hash is a bit buggy on Opera. I have seen instances where - * navigating the history using the back/forward buttons, and hence - * changing the URL, would not change location.hash. That's ok, the - * implementation of an equivalent is trivial. - * - * @method _getHash - * @return {string} The hash portion of the document's location - * @private - */ - function _getHash() { - var i, href; - href = top.location.href; - i = href.indexOf("#"); - return i >= 0 ? href.substr(i + 1) : null; - } - - /** - * Stores all the registered modules' initial state and current state. - * On Safari, we also store all the fully qualified states visited by - * the application within a single browser session. The storage takes - * place in the form field specified during initialization. - * - * @method _storeStates - * @private - */ - function _storeStates() { - - var moduleName, moduleObj, initialStates = [], currentStates = []; - - for (moduleName in _modules) { - if (YAHOO.lang.hasOwnProperty(_modules, moduleName)) { - moduleObj = _modules[moduleName]; - initialStates.push(moduleName + "=" + moduleObj.initialState); - currentStates.push(moduleName + "=" + moduleObj.currentState); - } - } - - _stateField.value = initialStates.join("&") + "|" + currentStates.join("&"); - - if (YAHOO.env.ua.webkit) { - _stateField.value += "|" + _fqstates.join(","); - } - } - - /** - * Sets the new currentState attribute of all modules depending on the new - * fully qualified state. Also notifies the modules which current state has - * changed. - * - * @method _handleFQStateChange - * @param {string} fqstate Fully qualified state - * @private - */ - function _handleFQStateChange(fqstate) { - - var i, len, moduleName, moduleObj, modules, states, tokens, currentState; - - if (!fqstate) { - // Notifies all modules - for (moduleName in _modules) { - if (YAHOO.lang.hasOwnProperty(_modules, moduleName)) { - moduleObj = _modules[moduleName]; - moduleObj.currentState = moduleObj.initialState; - moduleObj.onStateChange(unescape(moduleObj.currentState)); - } - } - return; - } - - modules = []; - states = fqstate.split("&"); - for (i = 0, len = states.length; i < len; i++) { - tokens = states[i].split("="); - if (tokens.length === 2) { - moduleName = tokens[0]; - currentState = tokens[1]; - modules[moduleName] = currentState; - } - } - - for (moduleName in _modules) { - if (YAHOO.lang.hasOwnProperty(_modules, moduleName)) { - moduleObj = _modules[moduleName]; - currentState = modules[moduleName]; - if (!currentState || moduleObj.currentState !== currentState) { - moduleObj.currentState = currentState || moduleObj.initialState; - moduleObj.onStateChange(unescape(moduleObj.currentState)); - } - } - } - } - - /** - * Update the IFrame with our new state. - * - * @method _updateIFrame - * @private - * @return {boolean} true if successful. false otherwise. - */ - function _updateIFrame (fqstate) { - - var html, doc; - - html = '
' + fqstate + '
'; - - try { - doc = _histFrame.contentWindow.document; - doc.open(); - doc.write(html); - doc.close(); - return true; - } catch (e) { - return false; - } - } - - /** - * Periodically checks whether our internal IFrame is ready to be used. - * - * @method _checkIframeLoaded - * @private - */ - function _checkIframeLoaded() { - - var doc, elem, fqstate, hash; - - if (!_histFrame.contentWindow || !_histFrame.contentWindow.document) { - // Check again in 10 msec... - setTimeout(_checkIframeLoaded, 10); - return; - } - - // Start the thread that will have the responsibility to - // periodically check whether a navigate operation has been - // requested on the main window. This will happen when - // YAHOO.util.History.navigate has been called or after - // the user has hit the back/forward button. - - doc = _histFrame.contentWindow.document; - elem = doc.getElementById("state"); - // We must use innerText, and not innerHTML because our string contains - // the "&" character (which would end up being escaped as "&") and - // the string comparison would fail... - fqstate = elem ? elem.innerText : null; - - hash = _getHash(); - - setInterval(function () { - - var newfqstate, states, moduleName, moduleObj, newHash, historyLength; - - doc = _histFrame.contentWindow.document; - elem = doc.getElementById("state"); - // See my comment above about using innerText instead of innerHTML... - newfqstate = elem ? elem.innerText : null; - - newHash = _getHash(); - - if (newfqstate !== fqstate) { - - fqstate = newfqstate; - _handleFQStateChange(fqstate); - - if (!fqstate) { - states = []; - for (moduleName in _modules) { - if (YAHOO.lang.hasOwnProperty(_modules, moduleName)) { - moduleObj = _modules[moduleName]; - states.push(moduleName + "=" + moduleObj.initialState); - } - } - newHash = states.join("&"); - } else { - newHash = fqstate; - } - - // Allow the state to be bookmarked by setting the top window's - // URL fragment identifier. Note that here, we are on IE, and - // IE does not touch the browser history when setting the hash - // (unlike all the other browsers). I used to write: - // top.location.replace( "#" + hash ); - // but this had a side effect when the page was not the top frame. - top.location.hash = newHash; - hash = newHash; - - _storeStates(); - - } else if (newHash !== hash) { - - // The hash has changed. The user might have clicked on a link, - // or modified the URL directly, or opened the same application - // bookmarked in a specific state using a bookmark. However, we - // know the hash change was not caused by a hit on the back or - // forward buttons, or by a call to navigate() (because it would - // have been handled above) We must handle these cases, which is - // why we also need to keep track of hash changes on IE! - - // Note that IE6 has some major issues with this kind of user - // interaction (the history stack gets completely messed up) - // but it seems to work fine on IE7. - - hash = newHash; - - // Now, store a new history entry. The following will cause the - // code above to execute, doing all the dirty work for us... - _updateIFrame(newHash); - } - - }, 50); - - _initialized = true; - YAHOO.util.History.onLoadEvent.fire(); - } - - /** - * Finish up the initialization of the Browser History Manager. - * - * @method _initialize - * @private - */ - function _initialize() { - - var i, len, parts, tokens, moduleName, moduleObj, initialStates, initialState, currentStates, currentState, counter, hash; - - // Decode the content of our storage field... - parts = _stateField.value.split("|"); - - if (parts.length > 1) { - - initialStates = parts[0].split("&"); - for (i = 0, len = initialStates.length; i < len; i++) { - tokens = initialStates[i].split("="); - if (tokens.length === 2) { - moduleName = tokens[0]; - initialState = tokens[1]; - moduleObj = _modules[moduleName]; - if (moduleObj) { - moduleObj.initialState = initialState; - } - } - } - - currentStates = parts[1].split("&"); - for (i = 0, len = currentStates.length; i < len; i++) { - tokens = currentStates[i].split("="); - if (tokens.length >= 2) { - moduleName = tokens[0]; - currentState = tokens[1]; - moduleObj = _modules[moduleName]; - if (moduleObj) { - moduleObj.currentState = currentState; - } - } - } - } - - if (parts.length > 2) { - _fqstates = parts[2].split(","); - } - - if (YAHOO.env.ua.ie) { - - if (typeof document.documentMode === "undefined" || document.documentMode < 8) { - - // IE < 8 or IE8 in quirks mode or IE7 standards mode - _checkIframeLoaded(); - - } else { - - // IE8 in IE8 standards mode - YAHOO.util.Event.on(top, "hashchange", - function () { - var hash = _getHash(); - _handleFQStateChange(hash); - _storeStates(); - }); - - _initialized = true; - YAHOO.util.History.onLoadEvent.fire(); - - } - - } else { - - // Start the thread that will have the responsibility to - // periodically check whether a navigate operation has been - // requested on the main window. This will happen when - // YAHOO.util.History.navigate has been called or after - // the user has hit the back/forward button. - - // On Safari 1.x and 2.0, the only way to catch a back/forward - // operation is to watch history.length... We basically exploit - // what I consider to be a bug (history.length is not supposed - // to change when going back/forward in the history...) This is - // why, in the following thread, we first compare the hash, - // because the hash thing will be fixed in the next major - // version of Safari. So even if they fix the history.length - // bug, all this will still work! - counter = history.length; - - // On Gecko and Opera, we just need to watch the hash... - hash = _getHash(); - - setInterval(function () { - - var state, newHash, newCounter; - - newHash = _getHash(); - newCounter = history.length; - if (newHash !== hash) { - hash = newHash; - counter = newCounter; - _handleFQStateChange(hash); - _storeStates(); - } else if (newCounter !== counter && YAHOO.env.ua.webkit) { - hash = newHash; - counter = newCounter; - state = _fqstates[counter - 1]; - _handleFQStateChange(state); - _storeStates(); - } - - }, 50); - - _initialized = true; - YAHOO.util.History.onLoadEvent.fire(); - } - } - - return { - - /** - * Fired when the Browser History Manager is ready. If you subscribe to - * this event after the Browser History Manager has been initialized, - * it will not fire. Therefore, it is recommended to use the onReady - * method instead. - * - * @event onLoadEvent - * @see onReady - */ - onLoadEvent: new YAHOO.util.CustomEvent("onLoad"), - - /** - * Executes the supplied callback when the Browser History Manager is - * ready. This will execute immediately if called after the Browser - * History Manager onLoad event has fired. - * - * @method onReady - * @param {function} fn what to execute when the Browser History Manager is ready. - * @param {object} obj an optional object to be passed back as a parameter to fn. - * @param {boolean|object} override If true, the obj passed in becomes fn's execution scope. - * @see onLoadEvent - */ - onReady: function (fn, obj, override) { - - if (_initialized) { - - setTimeout(function () { - var ctx = window; - if (override) { - if (override === true) { - ctx = obj; - } else { - ctx = override; - } - } - fn.call(ctx, "onLoad", [], obj); - }, 0); - - } else { - - YAHOO.util.History.onLoadEvent.subscribe(fn, obj, override); - - } - }, - - /** - * Registers a new module. - * - * @method register - * @param {string} module Non-empty string uniquely identifying the - * module you wish to register. - * @param {string} initialState The initial state of the specified - * module corresponding to its earliest history entry. - * @param {function} onStateChange Callback called when the - * state of the specified module has changed. - * @param {object} obj An arbitrary object that will be passed as a - * parameter to the handler. - * @param {boolean} override If true, the obj passed in becomes the - * execution scope of the listener. - */ - register: function (module, initialState, onStateChange, obj, override) { - - var scope, wrappedFn; - - if (typeof module !== "string" || YAHOO.lang.trim(module) === "" || - typeof initialState !== "string" || - typeof onStateChange !== "function") { - throw new Error("Missing or invalid argument"); - } - - if (_modules[module]) { - // Here, we used to throw an exception. However, users have - // complained about this behavior, so we now just return. - return; - } - - // Note: A module CANNOT be registered after calling - // YAHOO.util.History.initialize. Indeed, we set the initial state - // of each registered module in YAHOO.util.History.initialize. - // If you could register a module after initializing the Browser - // History Manager, you would not read the correct state using - // YAHOO.util.History.getCurrentState when coming back to the - // page using the back button. - if (_initialized) { - throw new Error("All modules must be registered before calling YAHOO.util.History.initialize"); - } - - // Make sure the strings passed in do not contain our separators "," and "|" - module = escape(module); - initialState = escape(initialState); - - // If the user chooses to override the scope, we use the - // custom object passed in as the execution scope. - scope = null; - if (override === true) { - scope = obj; - } else { - scope = override; - } - - wrappedFn = function (state) { - return onStateChange.call(scope, state, obj); - }; - - _modules[module] = { - name: module, - initialState: initialState, - currentState: initialState, - onStateChange: wrappedFn - }; - }, - - /** - * Initializes the Browser History Manager. Call this method - * from a script block located right after the opening body tag. - * - * @method initialize - * @param {string|HTML Element} stateField used - * to store application states. Must be in the static markup. - * @param {string|HTML Element} histFrame IFrame used to store - * the history (only required on Internet Explorer) - * @public - */ - initialize: function (stateField, histFrame) { - - if (_initialized) { - // The browser history manager has already been initialized. - return; - } - - if (YAHOO.env.ua.opera && typeof history.navigationMode !== "undefined") { - // Disable Opera's fast back/forward navigation mode and puts - // it in compatible mode. This makes anchor-based history - // navigation work after the page has been navigated away - // from and re-activated, at the cost of slowing down - // back/forward navigation to and from that page. - history.navigationMode = "compatible"; - } - - if (typeof stateField === "string") { - stateField = document.getElementById(stateField); - } - - if (!stateField || - stateField.tagName.toUpperCase() !== "TEXTAREA" && - (stateField.tagName.toUpperCase() !== "INPUT" || - stateField.type !== "hidden" && - stateField.type !== "text")) { - throw new Error("Missing or invalid argument"); - } - - _stateField = stateField; - - // IE < 8 or IE8 in quirks mode or IE7 standards mode - if (YAHOO.env.ua.ie && (typeof document.documentMode === "undefined" || document.documentMode < 8)) { - - if (typeof histFrame === "string") { - histFrame = document.getElementById(histFrame); - } - - if (!histFrame || histFrame.tagName.toUpperCase() !== "IFRAME") { - throw new Error("Missing or invalid argument"); - } - - _histFrame = histFrame; - } - - // Note that the event utility MUST be included inline in the page. - // If it gets loaded later (which you may want to do to improve the - // loading speed of your site), the onDOMReady event never fires, - // and the history library never gets fully initialized. - YAHOO.util.Event.onDOMReady(_initialize); - }, - - /** - * Call this method when you want to store a new entry in the browser's history. - * - * @method navigate - * @param {string} module Non-empty string representing your module. - * @param {string} state String representing the new state of the specified module. - * @return {boolean} Indicates whether the new state was successfully added to the history. - * @public - */ - navigate: function (module, state) { - - var states; - - if (typeof module !== "string" || typeof state !== "string") { - throw new Error("Missing or invalid argument"); - } - - states = {}; - states[module] = state; - - return YAHOO.util.History.multiNavigate(states); - }, - - /** - * Call this method when you want to store a new entry in the browser's history. - * - * @method multiNavigate - * @param {object} states Associative array of module-state pairs to set simultaneously. - * @return {boolean} Indicates whether the new state was successfully added to the history. - * @public - */ - multiNavigate: function (states) { - - var currentStates, moduleName, moduleObj, currentState, fqstate; - - if (typeof states !== "object") { - throw new Error("Missing or invalid argument"); - } - - if (!_initialized) { - throw new Error("The Browser History Manager is not initialized"); - } - - for (moduleName in states) { - if (!_modules[moduleName]) { - throw new Error("The following module has not been registered: " + moduleName); - } - } - - // Generate our new full state string mod1=xxx&mod2=yyy - currentStates = []; - - for (moduleName in _modules) { - if (YAHOO.lang.hasOwnProperty(_modules, moduleName)) { - moduleObj = _modules[moduleName]; - if (YAHOO.lang.hasOwnProperty(states, moduleName)) { - currentState = states[unescape(moduleName)]; - } else { - currentState = unescape(moduleObj.currentState); - } - - // Make sure the strings passed in do not contain our separators "," and "|" - moduleName = escape(moduleName); - currentState = escape(currentState); - - currentStates.push(moduleName + "=" + currentState); - } - } - - fqstate = currentStates.join("&"); - - if (YAHOO.env.ua.ie && (typeof document.documentMode === "undefined" || document.documentMode < 8)) { - - return _updateIFrame(fqstate); - - } else { - - // Known bug: On Safari 1.x and 2.0, if you have tab browsing - // enabled, Safari will show an endless loading icon in the - // tab. This has apparently been fixed in recent WebKit builds. - // One work around found by Dav Glass is to submit a form that - // points to the same document. This indeed works on Safari 1.x - // and 2.0 but creates bigger problems on WebKit. So for now, - // we'll consider this an acceptable bug, and hope that Apple - // comes out with their next version of Safari very soon. - top.location.hash = fqstate; - if (YAHOO.env.ua.webkit) { - // The following two lines are only useful for Safari 1.x - // and 2.0. Recent nightly builds of WebKit do not require - // that, but unfortunately, it is not easy to differentiate - // between the two. Once Safari 2.0 departs the A-grade - // list, we can remove the following two lines... - _fqstates[history.length] = fqstate; - _storeStates(); - } - - return true; - - } - }, - - /** - * Returns the current state of the specified module. - * - * @method getCurrentState - * @param {string} module Non-empty string representing your module. - * @return {string} The current state of the specified module. - * @public - */ - getCurrentState: function (module) { - - var moduleObj; - - if (typeof module !== "string") { - throw new Error("Missing or invalid argument"); - } - - if (!_initialized) { - throw new Error("The Browser History Manager is not initialized"); - } - - moduleObj = _modules[module]; - if (!moduleObj) { - throw new Error("No such registered module: " + module); - } - - return unescape(moduleObj.currentState); - }, - - /** - * Returns the state of a module according to the URL fragment - * identifier. This method is useful to initialize your modules - * if your application was bookmarked from a particular state. - * - * @method getBookmarkedState - * @param {string} module Non-empty string representing your module. - * @return {string} The bookmarked state of the specified module. - * @public - */ - getBookmarkedState: function (module) { - - var i, len, idx, hash, states, tokens, moduleName; - - if (typeof module !== "string") { - throw new Error("Missing or invalid argument"); - } - - // Use location.href instead of location.hash which is already - // URL-decoded, which creates problems if the state value - // contained special characters... - idx = top.location.href.indexOf("#"); - if (idx >= 0) { - hash = top.location.href.substr(idx + 1); - states = hash.split("&"); - for (i = 0, len = states.length; i < len; i++) { - tokens = states[i].split("="); - if (tokens.length === 2) { - moduleName = tokens[0]; - if (moduleName === module) { - return unescape(tokens[1]); - } - } - } - } - - return null; - }, - - /** - * Returns the value of the specified query string parameter. - * This method is not used internally by the Browser History Manager. - * However, it is provided here as a helper since many applications - * using the Browser History Manager will want to read the value of - * url parameters to initialize themselves. - * - * @method getQueryStringParameter - * @param {string} paramName Name of the parameter we want to look up. - * @param {string} queryString Optional URL to look at. If not specified, - * this method uses the URL in the address bar. - * @return {string} The value of the specified parameter, or null. - * @public - */ - getQueryStringParameter: function (paramName, url) { - - var i, len, idx, queryString, params, tokens; - - url = url || top.location.href; - - idx = url.indexOf("?"); - queryString = idx >= 0 ? url.substr(idx + 1) : url; - - // Remove the hash if any - idx = queryString.lastIndexOf("#"); - queryString = idx >= 0 ? queryString.substr(0, idx) : queryString; - - params = queryString.split("&"); - - for (i = 0, len = params.length; i < len; i++) { - tokens = params[i].split("="); - if (tokens.length >= 2) { - if (tokens[0] === paramName) { - return unescape(tokens[1]); - } - } - } - - return null; - } - - }; - -})(); -YAHOO.register("history", YAHOO.util.History, {version: "2.7.0", build: "1799"});