aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCesar G <prototech91@gmail.com>2014-05-06 13:34:12 -0700
committerCesar G <prototech91@gmail.com>2014-05-06 13:34:12 -0700
commited14d12d148b1aa7e726121afa9ad79718745e1c (patch)
tree600a66ba7614c83121ecc10c50a39a5dc505927d
parent7475e05f997c780c07111681a78d510930ad2e9a (diff)
downloadforums-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.js86
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