Advertisement
Guest User

Untitled

a guest
Aug 20th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. var hashes = new (function () {
  2.  
  3. var _this = this;
  4.  
  5. var _SEPERATOR_KEY_VALUE = ":";
  6.  
  7. var _SEPERATOR_PAIR = "|";
  8.  
  9. var _OLD_HASHES = {};
  10.  
  11. /**
  12. * Add Hash event.
  13. *
  14. * @param hash
  15. * @param callback
  16. */
  17. this.addHashEvent = function(hash, callback) {
  18. window.hashes = window.hashes || {};
  19. window.hashes[hash] = callback;
  20. };
  21.  
  22. /**
  23. * When hash is change we fire this method, or you can fire manually.
  24. * hash must be on the following patter: key:value;key1:value, it will transform to:
  25. * ['key:value', 'ke1:value'] for later to be dispatch to window.hashes.key => value
  26. * and window.hashes.key1 = value1;
  27. */
  28. this.fireHashOnChange = function () {
  29. let hashes = getMapOfHash();
  30. for(let hash in hashes) {
  31.  
  32. let value = hashes[hash];
  33. if (!window.hashes[hash]) {
  34. continue;
  35. }
  36.  
  37. if (_this._OLD_HASHES && _this._OLD_HASHES[hash] && _this._OLD_HASHES[hash] === value) {
  38. continue;
  39. }
  40.  
  41.  
  42. let callback = window.hashes[hash];
  43. _this._OLD_HASHES[hash] = value;
  44. callback.call(_this, value);
  45. }
  46.  
  47. };
  48.  
  49. /**
  50. * Add/Change hash on url but maintain the actual hash already added.
  51. * @param hashKey
  52. * @param hashValue
  53. */
  54. this.addHash = function(hashKey, hashValue) {
  55. let hashes = getMapOfHash();
  56. hashes[hashKey] = hashValue;
  57. let fullHashes = [];
  58. for(let hash in hashes) {
  59. fullHashes.push(hash+_SEPERATOR_KEY_VALUE+hashes[hash]);
  60. }
  61. window.location.hash = fullHashes.join(_SEPERATOR_PAIR);
  62. }
  63.  
  64. /**
  65. * Remove Hash from hashes.
  66. * @param hashKey
  67. * @param hashValue
  68. */
  69. this.removeHash = function(hashKey) {
  70. let hashes = getMapOfHash();
  71. let fullHashes = [];
  72. for(let hash in hashes) {
  73. if (hash !== hashKey) {
  74. fullHashes.push(hash+_SEPERATOR_KEY_VALUE+hashes[hash]);
  75. }
  76. }
  77. window.location.hash = fullHashes.join(_SEPERATOR_PAIR);
  78. }
  79.  
  80. /**
  81. * Hash on Change.
  82. */
  83. let hashOnChange = function () {
  84. window.addEventListener("hashchange", _this.fireHashOnChange, false);
  85. };
  86.  
  87. /**
  88. * Get all hashes from url
  89. */
  90. let getMapOfHash = function () {
  91. let hashes = location.hash.toString();
  92. let map = {};
  93. if (!hashes) {
  94. return map;
  95. }
  96. if (hashes.indexOf(";") >= -1) {
  97. hashes = hashes.split(_SEPERATOR_PAIR);
  98. } else {
  99. hashes = [hashes];
  100. }
  101.  
  102. for(let hash of hashes) {
  103. hash = hash.replace("#", "");
  104. let parts = hash.split(_SEPERATOR_KEY_VALUE);
  105. map[parts[0]] = parts[1];
  106. }
  107. return map;
  108. }
  109.  
  110. hashOnChange();
  111.  
  112. window.addEventListener("hashchange", function () {
  113. _this.fireHashOnChange.call(_this);
  114. }, false);
  115. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement