diff options
author | Cesar G <prototech91@gmail.com> | 2014-05-06 13:34:12 -0700 |
---|---|---|
committer | Cesar G <prototech91@gmail.com> | 2014-05-06 13:34:12 -0700 |
commit | ed14d12d148b1aa7e726121afa9ad79718745e1c (patch) | |
tree | 600a66ba7614c83121ecc10c50a39a5dc505927d | |
parent | 7475e05f997c780c07111681a78d510930ad2e9a (diff) | |
download | forums-ed14d12d148b1aa7e726121afa9ad79718745e1c.tar forums-ed14d12d148b1aa7e726121afa9ad79718745e1c.tar.gz forums-ed14d12d148b1aa7e726121afa9ad79718745e1c.tar.bz2 forums-ed14d12d148b1aa7e726121afa9ad79718745e1c.tar.xz forums-ed14d12d148b1aa7e726121afa9ad79718745e1c.zip |
[ticket/12440] Use a more generic approach for replacing the URL.
PHPBB3-12440
-rw-r--r-- | phpBB/assets/javascript/core.js | 86 |
1 files changed, 71 insertions, 15 deletions
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 0b46a1e937..ae8583ddbf 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -694,6 +694,74 @@ $('#phpbb').click(function(e) { } }); +phpbb.history = {}; + +/** +* Check whether a method in the native history object is supported. +* +* @param string fn Method name. +* @return bool Returns true if the method is supported. +*/ +phpbb.history.isSupported = function(fn) { + if (typeof history === 'undefined' || typeof history[fn] === 'undefined') { + return false; + } + return true; +}; + +/** +* Wrapper for the pushState and replaceState methods of the +* native history object. +* +* @param string mode Mode. Either push or replace. +* @param string url New URL. +* @param string title Optional page title. +* @patam object obj Optional state object. +* +* @return undefined +*/ +phpbb.history.alterUrl = function(mode, url, title, obj) { + var fn = mode + 'State'; + + if (!url || !phpbb.history.isSupported(fn)) { + return; + } + if (!title) { + title = document.title; + } + if (!obj) { + obj = null; + } + + history[fn](obj, title, url); +}; + +/** +* Wrapper for the native history.replaceState method. +* +* @param string url New URL. +* @param string title Optional page title. +* @patam object obj Optional state object. +* +* @return undefined +*/ +phpbb.history.replaceUrl = function(url, title, obj) { + phpbb.history.alterUrl('replace', url, title, obj); +}; + +/** +* Wrapper for the native history.pushState method. +* +* @param string url New URL. +* @param string title Optional page title. +* @patam object obj Optional state object. +* +* @return undefined +*/ +phpbb.history.pushUrl = function(url, title, obj) { + phpbb.history.alterUrl('push', url, title, obj); +}; + /** * Hide the optgroups that are not the selected timezone * @@ -1426,20 +1494,6 @@ phpbb.getFunctionByName = function (functionName) { }; /** -* Update browser history URL to point to specific post in viewtopic.php -* when using view=unread#unread link. -* -* @return undefined -*/ -phpbb.setUnreadUrl = function() { - var url = $('#unread[data-url]').data('url'); - - if (url && typeof history !== 'undefined' && typeof history.replaceState !== 'undefined') { - history.replaceState(null, document.title, url); - } -}; - -/** * Apply code editor to all textarea elements with data-bbcode attribute */ $(document).ready(function() { @@ -1459,7 +1513,9 @@ $(document).ready(function() { phpbb.registerPalette($(this)); }); - phpbb.setUnreadUrl(); + // Update browser history URL to point to specific post in viewtopic.php + // when using view=unread#unread link. + phpbb.history.replaceUrl($('#unread[data-url]').data('url')); }); })(jQuery); // Avoid conflicts with other libraries |