fragmented 3.1.3 → 3.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  Relates to URL hash fragments.
4
4
 
5
- Fragmented allows your application to affect and be affected by the hash fragment of the URL in the browser's address bar. Changes to the fragment are invisible to the server whilst being included in the browser's history. For this reason fragments are useful to single page applications that need the back and forward buttons to work for them, and for deep linking.
5
+ Fragmented allows your application to affect and be affected by the hash fragment of the URL in the browser's address bar. Changes to the fragment are invisible to the server whilst being included in the browser's history. For this reason fragments are useful to single page applications that need the back and forward buttons to work for them without triggering Ajax requests and the like.
6
6
 
7
- All that Fragmented does is create a global [`fragment`](https://github.com/djalbat/Fragmented/blob/master/es6/fragmented.js) variable, the value of which the application can get or set, and which also has `onFragmentChange` and `offFragmentChange` properties so that handlers can be registered and unregistered.
7
+ Fragmented provides a global [`fragment`](https://github.com/djalbat/Fragmented/blob/master/es6/fragmented.js) variable which corresponds to the aforementioned hash fragment in the browser's address bar and the value of which the application can get or set. It also provides `onFragmentChange` and `offFragmentChange` functions so that handlers can be registered and unregistered.
8
8
 
9
9
  ## Installation
10
10
 
@@ -42,7 +42,7 @@ One last thing to bear in mind is that this package is included by way of a rela
42
42
 
43
43
  ## Usage
44
44
 
45
- There are no objects exported as such, you only need to import the package:
45
+ In order to make use of the global `fragmented` variable you only need to import the package:
46
46
 
47
47
  ```
48
48
  import "fragmented";
@@ -60,12 +60,14 @@ To set the fragment:
60
60
  fragment = "test";
61
61
  ```
62
62
 
63
- Registering and un-registering change handlers:
63
+ When you set the fragment like this any handlers will be called.
64
+
65
+ To register and unregister handlers:
64
66
 
65
67
  ```
66
68
  const { onFragmentChange, offFragmentChange } = fragment;
67
69
 
68
- function fragmentChangeHandler() {
70
+ const fragmentChangeHandler = () {
69
71
  console.log(fragment)
70
72
  }
71
73
 
@@ -74,25 +76,25 @@ onFragmentChange(fragmentChangeHandler);
74
76
  // offFragmentChange(fragmentChangeHandler);
75
77
  ```
76
78
 
77
- Note that change handlers are invoked whenever the `fragment` variable is set. If you do not want this behaviour, in other words you want to be able to change the fragment in the address bar without your change handlers being invoked, you can to this with an additional `setFragment()` function as follows:
79
+ Note that handlers are invoked whenever the `fragment` variable is set. If you do not want this behaviour, in other words you want to be able to change the fragment in the address bar without your handlers being invoked, you can to this with an additional `setFragment()` function as follows:
78
80
 
79
81
  ```
80
82
  const { setFragment } = fragment;
81
83
 
82
- setFragment("test"); // change handlers won't be invoked
84
+ setFragment("test"); // handlers won't be invoked
83
85
  ```
84
86
 
85
- Also note that the `fragment` variable is an instance of the `String` object, rather than a string primitive, in order that properties on it can be defined. So use `==` rather than `===` if equating it to a string primitive. Finally, note that if you use a `switch` statement, which uses strict equality, you will need to explicitly coerce the `fragment` variable to a string primitive before passing it in.
87
+ Also note that the `fragment` variable is an instance of the `String` object, rather than a string primitive, in order that properties on it can be defined. So use `==` rather than `===` if equating it to a string primitive. And note that if you use a `switch` statement, which uses strict equality, you will need to explicitly coerce the `fragment` variable to a string primitive before passing it in.
86
88
 
87
- You can import these functions more conventionally if you think that destructuring the global `fragment` variable is too cute:
89
+ By the way, you can import these functions more conventionally if you think that destructuring the global `fragment` variable is a bit too cute:
88
90
 
89
91
  ```
90
- import { getFragment, setFragment, onFragmentChange, offFragmentChange } from "fragmented";
92
+ import { getFragment, setFragment, resetFragment, onFragmentChange, offFragmentChange } from "fragmented";
91
93
 
92
94
  ...
93
95
  ```
94
96
 
95
- Finally if you do not like the thought of a global `fragment` variable then you can refer to it as `window.fragment`.
97
+ Finally, the `resetFrageent()` function does as its name suggests, essentially removing the fragment altogether.
96
98
 
97
99
  ## Building
98
100
 
package/example.js CHANGED
@@ -7,34 +7,48 @@
7
7
  return module.exports;
8
8
  };
9
9
 
10
- // lib/constants.js
11
- var require_constants = __commonJS((exports) => {
10
+ // lib/eventTypes.js
11
+ var require_eventTypes = __commonJS((exports) => {
12
12
  "use strict";
13
13
  Object.defineProperty(exports, "__esModule", {
14
14
  value: true
15
15
  });
16
- Object.defineProperty(exports, "FRAGMENT", {
16
+ Object.defineProperty(exports, "HASHCHANGE_EVENT_TYPE", {
17
17
  enumerable: true,
18
18
  get: function() {
19
- return FRAGMENT;
19
+ return HASHCHANGE_EVENT_TYPE;
20
20
  }
21
21
  });
22
- var FRAGMENT = "fragment";
22
+ var HASHCHANGE_EVENT_TYPE = "hashchange";
23
23
  });
24
24
 
25
- // lib/eventTypes.js
26
- var require_eventTypes = __commonJS((exports) => {
25
+ // lib/constants.js
26
+ var require_constants = __commonJS((exports) => {
27
27
  "use strict";
28
28
  Object.defineProperty(exports, "__esModule", {
29
29
  value: true
30
30
  });
31
- Object.defineProperty(exports, "HASHCHANGE_EVENT_TYPE", {
32
- enumerable: true,
33
- get: function() {
34
- return HASHCHANGE_EVENT_TYPE;
31
+ function _export(target, all) {
32
+ for (var name in all)
33
+ Object.defineProperty(target, name, {
34
+ enumerable: true,
35
+ get: all[name]
36
+ });
37
+ }
38
+ _export(exports, {
39
+ EMPTY_STRING: function() {
40
+ return EMPTY_STRING;
41
+ },
42
+ FRAGMENT: function() {
43
+ return FRAGMENT;
44
+ },
45
+ HASH: function() {
46
+ return HASH;
35
47
  }
36
48
  });
37
- var HASHCHANGE_EVENT_TYPE = "hashchange";
49
+ var HASH = "#";
50
+ var FRAGMENT = "fragment";
51
+ var EMPTY_STRING = "";
38
52
  });
39
53
 
40
54
  // lib/fragmented.js
@@ -60,17 +74,21 @@
60
74
  onFragmentChange: function() {
61
75
  return onFragmentChange;
62
76
  },
77
+ resetFragment: function() {
78
+ return resetFragment;
79
+ },
63
80
  setFragment: function() {
64
81
  return setFragment;
65
82
  }
66
83
  });
67
- var _constants = require_constants();
68
84
  var _eventTypes = require_eventTypes();
85
+ var _constants = require_constants();
69
86
  function getFragment() {
70
87
  var hash = getHash(), fragment2 = new String(hash);
71
88
  Object.assign(fragment2, {
72
89
  getFragment,
73
90
  setFragment,
91
+ resetFragment,
74
92
  onFragmentChange,
75
93
  offFragmentChange
76
94
  });
@@ -78,10 +96,10 @@
78
96
  }
79
97
  function setFragment(fragment2) {
80
98
  var silently = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
81
- var hash = fragment2;
82
99
  if (silently) {
83
100
  window.removeEventListener(eventType, hashChangeListener);
84
101
  }
102
+ var hash = fragment2;
85
103
  window.location.hash = hash;
86
104
  if (silently) {
87
105
  setTimeout(function() {
@@ -89,17 +107,33 @@
89
107
  }, 0);
90
108
  }
91
109
  }
110
+ function resetFragment() {
111
+ var silently = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
112
+ if (silently) {
113
+ window.removeEventListener(eventType, hashChangeListener);
114
+ }
115
+ var href = location.href;
116
+ var index = href.indexOf(_constants.HASH);
117
+ if (index !== -1) {
118
+ var start = 0, end = index;
119
+ href = href.substring(start, end);
120
+ history.pushState({}, _constants.EMPTY_STRING, href);
121
+ }
122
+ if (silently) {
123
+ setTimeout(function() {
124
+ window.addEventListener(eventType, hashChangeListener);
125
+ }, 0);
126
+ }
127
+ }
92
128
  function onFragmentChange(fragmentChangeHandler) {
93
- fragmentChangeHandlers.push(fragmentChangeHandler);
129
+ var element = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this;
130
+ addFragmentChangeEventListener(fragmentChangeHandler, element);
94
131
  }
95
132
  function offFragmentChange(fragmentChangeHandler) {
96
- var index = fragmentChangeHandlers.indexOf(fragmentChangeHandler);
97
- if (index > -1) {
98
- var start = index, deleteCount = 1;
99
- fragmentChangeHandlers.splice(start, deleteCount);
100
- }
133
+ var element = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this;
134
+ removeFragmentChangeEventListener(fragmentChangeHandler, element);
101
135
  }
102
- Object.defineProperty(window, _constants.FRAGMENT, {
136
+ Object.defineProperty(globalThis, _constants.FRAGMENT, {
103
137
  get: function get() {
104
138
  var fragment2 = getFragment();
105
139
  return fragment2;
@@ -110,21 +144,53 @@
110
144
  }
111
145
  });
112
146
  var eventType = _eventTypes.HASHCHANGE_EVENT_TYPE;
113
- var fragmentChangeHandlers = [];
147
+ var fragmentChangeEventListeners = [];
114
148
  window.addEventListener(eventType, hashChangeListener);
115
- function hashChangeListener(event) {
116
- var hash = getHash(), fragment2 = hash;
117
- fragmentChangeHandlers.forEach(function(fragmentChangeHandler) {
118
- fragmentChangeHandler(event, fragment2);
119
- });
120
- }
121
149
  function getHash() {
122
- var location = window.location;
123
- var hash = location.hash;
150
+ var location1 = window.location;
151
+ var hash = location1.hash;
124
152
  var start = 1;
125
153
  hash = hash.substring(start);
126
154
  return hash;
127
155
  }
156
+ function hashChangeListener(event) {
157
+ var hash = getHash(), element = window, fragment2 = hash;
158
+ callFragmentChangeHandlers(event, element, fragment2);
159
+ }
160
+ function callFragmentChangeHandlers(event, element, fragment2) {
161
+ fragmentChangeEventListeners.forEach(function(fragmentChangeEventListener) {
162
+ var fragmentChangeHandler = fragmentChangeEventListener.fragmentChangeHandler, fragmentChangeHandlerElement = fragmentChangeEventListener.element;
163
+ fragmentChangeHandler.call(fragmentChangeHandlerElement, event, element, fragment2);
164
+ });
165
+ }
166
+ function addFragmentChangeEventListener(fragmentChangeHandler, element) {
167
+ var fragmentChangeEventListener = createFragmentChangeEventListener(fragmentChangeHandler, element);
168
+ fragmentChangeEventListeners.push(fragmentChangeEventListener);
169
+ return fragmentChangeEventListener;
170
+ }
171
+ function removeFragmentChangeEventListener(fragmentChangeHandler, element) {
172
+ var fragmentChangeEventListener = findFragmentChangeEventListener(fragmentChangeHandler, element), index = fragmentChangeEventListeners.indexOf(fragmentChangeEventListener), start = index, deleteCount = 1;
173
+ fragmentChangeEventListeners.splice(start, deleteCount);
174
+ return fragmentChangeEventListener;
175
+ }
176
+ function createFragmentChangeEventListener(fragmentChangeHandler, element) {
177
+ var fragmentChangeEventListener;
178
+ fragmentChangeEventListener = function() {
179
+ };
180
+ Object.assign(fragmentChangeEventListener, {
181
+ element,
182
+ fragmentChangeHandler
183
+ });
184
+ return fragmentChangeEventListener;
185
+ }
186
+ function findFragmentChangeEventListener(fragmentChangeHandler, element) {
187
+ var fragmentChangeEventListener = fragmentChangeEventListeners.find(function(fragmentChangeEventListener2) {
188
+ if (fragmentChangeEventListener2.element === element && fragmentChangeEventListener2.fragmentChangeHandler === fragmentChangeHandler) {
189
+ return true;
190
+ }
191
+ });
192
+ return fragmentChangeEventListener;
193
+ }
128
194
  });
129
195
 
130
196
  // lib/index.js
@@ -150,6 +216,9 @@
150
216
  onFragmentChange: function() {
151
217
  return _fragmented.onFragmentChange;
152
218
  },
219
+ resetFragment: function() {
220
+ return _fragmented.resetFragment;
221
+ },
153
222
  setFragment: function() {
154
223
  return _fragmented.setFragment;
155
224
  }
@@ -175,4 +244,4 @@
175
244
  });
176
245
  require_example();
177
246
  })();
178
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2NvbnN0YW50cy5qcyIsICJzcmMvZXZlbnRUeXBlcy5qcyIsICJzcmMvZnJhZ21lbnRlZC5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRlJBR01FTlQgPSBcImZyYWdtZW50XCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBIQVNIQ0hBTkdFX0VWRU5UX1RZUEUgPSBcImhhc2hjaGFuZ2VcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRlJBR01FTlQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEhBU0hDSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZyYWdtZW50KCkge1xuICBjb25zdCBoYXNoID0gZ2V0SGFzaCgpLFxuICAgICAgICBmcmFnbWVudCA9IG5ldyBTdHJpbmcoaGFzaCk7ICAvLy9cblxuICBPYmplY3QuYXNzaWduKGZyYWdtZW50LCB7XG4gICAgZ2V0RnJhZ21lbnQsXG4gICAgc2V0RnJhZ21lbnQsXG4gICAgb25GcmFnbWVudENoYW5nZSxcbiAgICBvZmZGcmFnbWVudENoYW5nZVxuICB9KTtcblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGcmFnbWVudChmcmFnbWVudCwgc2lsZW50bHkgPSB0cnVlKSB7XG4gIGNvbnN0IGhhc2ggPSBmcmFnbWVudDsgIC8vL1xuXG4gIGlmIChzaWxlbnRseSkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFzaENoYW5nZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gaGFzaDtcblxuICBpZiAoc2lsZW50bHkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFzaENoYW5nZUxpc3RlbmVyKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25GcmFnbWVudENoYW5nZShmcmFnbWVudENoYW5nZUhhbmRsZXIpIHtcbiAgZnJhZ21lbnRDaGFuZ2VIYW5kbGVycy5wdXNoKGZyYWdtZW50Q2hhbmdlSGFuZGxlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmZGcmFnbWVudENoYW5nZShmcmFnbWVudENoYW5nZUhhbmRsZXIpIHtcbiAgY29uc3QgaW5kZXggPSBmcmFnbWVudENoYW5nZUhhbmRsZXJzLmluZGV4T2YoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyKTtcblxuICBpZiAoaW5kZXggPiAtMSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBmcmFnbWVudENoYW5nZUhhbmRsZXJzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIEZSQUdNRU5ULCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBnZXRGcmFnbWVudCgpO1xuXG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9LFxuXG4gIHNldDogZnVuY3Rpb24oZnJhZ21lbnQpIHtcbiAgICBjb25zdCBzaWxlbnRseSA9IGZhbHNlO1xuXG4gICAgc2V0RnJhZ21lbnQoZnJhZ21lbnQsIHNpbGVudGx5KTtcbiAgfVxufSk7XG5cbmNvbnN0IGV2ZW50VHlwZSA9IEhBU0hDSEFOR0VfRVZFTlRfVFlQRSxcbiAgICAgIGZyYWdtZW50Q2hhbmdlSGFuZGxlcnMgPSBbXTtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYXNoQ2hhbmdlTGlzdGVuZXIpO1xuXG5mdW5jdGlvbiBoYXNoQ2hhbmdlTGlzdGVuZXIoZXZlbnQpIHtcbiAgY29uc3QgaGFzaCA9IGdldEhhc2goKSxcbiAgICAgICAgZnJhZ21lbnQgPSBoYXNoOyAgLy8vXG5cbiAgZnJhZ21lbnRDaGFuZ2VIYW5kbGVycy5mb3JFYWNoKChmcmFnbWVudENoYW5nZUhhbmRsZXIpID0+IHtcbiAgICBmcmFnbWVudENoYW5nZUhhbmRsZXIoZXZlbnQsIGZyYWdtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEhhc2goKSB7XG4gIGNvbnN0IHsgbG9jYXRpb24gfSA9IHdpbmRvdztcblxuICBsZXQgeyBoYXNoIH0gPSBsb2NhdGlvbjtcblxuICBjb25zdCBzdGFydCA9IDE7XG5cbiAgaGFzaCA9IGhhc2guc3Vic3RyaW5nKHN0YXJ0KTtcblxuICByZXR1cm4gaGFzaDtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcIi4vZnJhZ21lbnRlZFwiO1xuXG5leHBvcnQgeyBzZXRGcmFnbWVudCwgZ2V0RnJhZ21lbnQsIG9uRnJhZ21lbnRDaGFuZ2UsIG9mZkZyYWdtZW50Q2hhbmdlIH0gZnJvbSBcIi4vZnJhZ21lbnRlZFwiO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcIi4vaW5kZXhcIjsgLy8vXG5cbmNvbnN0IHsgb25GcmFnbWVudENoYW5nZSwgb2ZmRnJhZ21lbnRDaGFuZ2UgfSA9IGZyYWdtZW50O1xuXG5vbkZyYWdtZW50Q2hhbmdlKGZyYWdtZW50Q2hhbmdlSGFuZGxlcik7XG5cbmNvbnNvbGUubG9nKGZyYWdtZW50KVxuXG5mcmFnbWVudCA9IFwidGVzdFwiO1xuXG4vLyBvZmZGcmFnbWVudENoYW5nZShmcmFnbWVudENoYW5nZUhhbmRsZXIpO1xuXG5mdW5jdGlvbiBmcmFnbWVudENoYW5nZUhhbmRsZXIoKSB7XG4gIGNvbnNvbGUubG9nKGZyYWdtZW50KVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUFBOzs7OzttQ0FFYSxZQUFBOzs7ZUFBQTs7O0FBQU4sUUFBTSxXQUFXOzs7O0FDRnhCOzs7OzttQ0FFYSx5QkFBQTs7O2VBQUE7OztBQUFOLFFBQU0sd0JBQXdCOzs7O0FDRnJDOzs7Ozs7Ozs7Ozs7O01BS2dCLGFBQVcsV0FBQTtlQUFYOztNQWtDQSxtQkFBaUIsV0FBQTtlQUFqQjs7TUFKQSxrQkFBZ0IsV0FBQTtlQUFoQjs7TUFoQkEsYUFBVyxXQUFBO2VBQVg7Ozs7O0FBZFQsMkJBQVM7QUFDZCxVQUFNLE9BQU8sV0FDUCxZQUFXLElBQUksT0FBTztBQUU1QixhQUFPLE9BQU8sV0FBVTtRQUN0QjtRQUNBO1FBQ0E7UUFDQTs7QUFHRixhQUFPOztBQUdGLHlCQUFxQixXQUFRO1VBQUUsV0FBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQVc7QUFDL0MsVUFBTSxPQUFPO0FBRWIsVUFBSSxVQUFVO0FBQ1osZUFBTyxvQkFBb0IsV0FBVzs7QUFHeEMsYUFBTyxTQUFTLE9BQU87QUFFdkIsVUFBSSxVQUFVO0FBQ1osbUJBQVcsV0FBQTtBQUNULGlCQUFPLGlCQUFpQixXQUFXO1dBQ2xDOzs7QUFJQSw4QkFBMEIsdUJBQXFCO0FBQ3BELDZCQUF1QixLQUFLOztBQUd2QiwrQkFBMkIsdUJBQXFCO0FBQ3JELFVBQU0sUUFBUSx1QkFBdUIsUUFBUTtBQUU3QyxVQUFJLFFBQVEsSUFBSTtBQUNkLFlBQU0sUUFBUSxPQUNSLGNBQWM7QUFFcEIsK0JBQXVCLE9BQU8sT0FBTzs7O0FBSXpDLFdBQU8sZUFBZSxRQUFRLFdBQUEsVUFBVTtNQUN0QyxLQUFLLGVBQUw7QUFDRSxZQUFNLFlBQVc7QUFFakIsZUFBTzs7TUFHVCxLQUFLLGFBQVMsV0FBUTtBQUNwQixZQUFNLFdBQVc7QUFFakIsb0JBQVksV0FBVTs7O0FBSTFCLFFBQU0sWUFBWSxZQUFBO0FBQWxCLFFBQ00seUJBQXlCO0FBRS9CLFdBQU8saUJBQWlCLFdBQVc7QUFFbkMsZ0NBQTRCLE9BQUs7QUFDL0IsVUFBTSxPQUFPLFdBQ1AsWUFBVztBQUVqQiw2QkFBdUIsUUFBUSxTQUFDLHVCQUFBO0FBQzlCLDhCQUFzQixPQUFPOzs7QUFJakMsdUJBQVM7QUFDUCxVQUFRLFdBQWEsT0FBYjtBQUVSLFVBQU0sT0FBUyxTQUFUO0FBRU4sVUFBTSxRQUFRO0FBRWQsYUFBTyxLQUFLLFVBQVU7QUFFdEIsYUFBTzs7Ozs7QUN2RlQ7Ozs7Ozs7Ozs7Ozs7TUFJc0IsYUFBVyxXQUFBO2VBQVgsWUFBQTs7TUFBK0IsbUJBQWlCLFdBQUE7ZUFBakIsWUFBQTs7TUFBbEIsa0JBQWdCLFdBQUE7ZUFBaEIsWUFBQTs7TUFBMUIsYUFBVyxXQUFBO2VBQVgsWUFBQTs7Ozs7OztBQ0pUOzs7Ozs7QUFJQSxRQUFRLG1CQUF3QyxTQUF4QztBQUFSLFFBQTBCLG9CQUFzQixTQUF0QjtBQUUxQixxQkFBaUI7QUFFakIsWUFBUSxJQUFJO0FBRVosZUFBVztBQUlYLHFDQUFTO0FBQ1AsY0FBUSxJQUFJOzs7IiwKICAibmFtZXMiOiBbXQp9Cg==
247
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2V2ZW50VHlwZXMuanMiLCAic3JjL2NvbnN0YW50cy5qcyIsICJzcmMvZnJhZ21lbnRlZC5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEFTSENIQU5HRV9FVkVOVF9UWVBFID0gXCJoYXNoY2hhbmdlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBIQVNIID0gXCIjXCI7XG5leHBvcnQgY29uc3QgRlJBR01FTlQgPSBcImZyYWdtZW50XCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEhBU0hDSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IEhBU0gsIEZSQUdNRU5ULCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZyYWdtZW50KCkge1xuICBjb25zdCBoYXNoID0gZ2V0SGFzaCgpLFxuICAgICAgICBmcmFnbWVudCA9IG5ldyBTdHJpbmcoaGFzaCk7ICAvLy9cblxuICBPYmplY3QuYXNzaWduKGZyYWdtZW50LCB7XG4gICAgZ2V0RnJhZ21lbnQsXG4gICAgc2V0RnJhZ21lbnQsXG4gICAgcmVzZXRGcmFnbWVudCxcbiAgICBvbkZyYWdtZW50Q2hhbmdlLFxuICAgIG9mZkZyYWdtZW50Q2hhbmdlXG4gIH0pO1xuXG4gIHJldHVybiBmcmFnbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZyYWdtZW50KGZyYWdtZW50LCBzaWxlbnRseSA9IHRydWUpIHtcbiAgaWYgKHNpbGVudGx5KSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYXNoQ2hhbmdlTGlzdGVuZXIpO1xuICB9XG5cbiAgY29uc3QgaGFzaCA9IGZyYWdtZW50OyAgLy8vXG5cbiAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBoYXNoO1xuXG4gIGlmIChzaWxlbnRseSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYXNoQ2hhbmdlTGlzdGVuZXIpO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldEZyYWdtZW50KHNpbGVudGx5ID0gdHJ1ZSkge1xuICBpZiAoc2lsZW50bHkpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhc2hDaGFuZ2VMaXN0ZW5lcik7XG4gIH1cblxuICBsZXQgeyBocmVmIH0gPSBsb2NhdGlvbjtcblxuICBjb25zdCBpbmRleCA9IGhyZWYuaW5kZXhPZihIQVNIKTtcblxuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgY29uc3Qgc3RhcnQgPSAwLFxuICAgICAgICAgIGVuZCA9IGluZGV4OyAgLy8vXG5cbiAgICBocmVmID0gaHJlZi5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7IC8vL1xuXG4gICAgaGlzdG9yeS5wdXNoU3RhdGUoe30sIEVNUFRZX1NUUklORywgaHJlZik7XG4gIH1cblxuICBpZiAoc2lsZW50bHkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFzaENoYW5nZUxpc3RlbmVyKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25GcmFnbWVudENoYW5nZShmcmFnbWVudENoYW5nZUhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGFkZEZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcihmcmFnbWVudENoYW5nZUhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2ZmRnJhZ21lbnRDaGFuZ2UoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50ID0gdGhpcykge1xuICByZW1vdmVGcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIEZSQUdNRU5ULCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBnZXRGcmFnbWVudCgpO1xuXG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9LFxuXG4gIHNldDogZnVuY3Rpb24oZnJhZ21lbnQpIHtcbiAgICBjb25zdCBzaWxlbnRseSA9IGZhbHNlO1xuXG4gICAgc2V0RnJhZ21lbnQoZnJhZ21lbnQsIHNpbGVudGx5KTtcbiAgfVxufSk7XG5cbmNvbnN0IGV2ZW50VHlwZSA9IEhBU0hDSEFOR0VfRVZFTlRfVFlQRSxcbiAgICAgIGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYXNoQ2hhbmdlTGlzdGVuZXIpO1xuXG5mdW5jdGlvbiBnZXRIYXNoKCkge1xuICBjb25zdCB7IGxvY2F0aW9uIH0gPSB3aW5kb3c7XG5cbiAgbGV0IHsgaGFzaCB9ID0gbG9jYXRpb247XG5cbiAgY29uc3Qgc3RhcnQgPSAxO1xuXG4gIGhhc2ggPSBoYXNoLnN1YnN0cmluZyhzdGFydCk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmZ1bmN0aW9uIGhhc2hDaGFuZ2VMaXN0ZW5lcihldmVudCkge1xuICBjb25zdCBoYXNoID0gZ2V0SGFzaCgpLFxuICAgICAgICBlbGVtZW50ID0gd2luZG93LCAvLy9cbiAgICAgICAgZnJhZ21lbnQgPSBoYXNoOyAgLy8vXG5cbiAgY2FsbEZyYWdtZW50Q2hhbmdlSGFuZGxlcnMoZXZlbnQsIGVsZW1lbnQsIGZyYWdtZW50KTtcbn1cblxuZnVuY3Rpb24gY2FsbEZyYWdtZW50Q2hhbmdlSGFuZGxlcnMoZXZlbnQsIGVsZW1lbnQsIGZyYWdtZW50KSB7XG4gIGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKSA9PiB7XG4gICAgY29uc3QgeyBmcmFnbWVudENoYW5nZUhhbmRsZXIsIGVsZW1lbnQ6IGZyYWdtZW50Q2hhbmdlSGFuZGxlckVsZW1lbnQgfSA9IGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcjsgLy8vXG5cbiAgICBmcmFnbWVudENoYW5nZUhhbmRsZXIuY2FsbChmcmFnbWVudENoYW5nZUhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCwgZnJhZ21lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKGZyYWdtZW50Q2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIgPSBjcmVhdGVGcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTtcblxuICBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXJzLnB1c2goZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKTtcblxuICByZXR1cm4gZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiByZW1vdmVGcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lciA9IGZpbmRGcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSxcbiAgICAgICAgaW5kZXggPSBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXJzLmluZGV4T2YoZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKSxcbiAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVycy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcblxuICByZXR1cm4gZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGxldCBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXI7XG5cbiAgZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyID0gKCkgPT4ge307IC8vL1xuXG4gIE9iamVjdC5hc3NpZ24oZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBmcmFnbWVudENoYW5nZUhhbmRsZXJcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcihmcmFnbWVudENoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyID0gZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVycy5maW5kKChmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBpZiAoKGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lci5lbGVtZW50ID09PSBlbGVtZW50KSAmJiAoZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyLmZyYWdtZW50Q2hhbmdlSGFuZGxlciA9PT0gZnJhZ21lbnRDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2ZyYWdtZW50ZWRcIjtcblxuZXhwb3J0IHsgZ2V0RnJhZ21lbnQsIHNldEZyYWdtZW50LCByZXNldEZyYWdtZW50LCBvbkZyYWdtZW50Q2hhbmdlLCBvZmZGcmFnbWVudENoYW5nZSB9IGZyb20gXCIuL2ZyYWdtZW50ZWRcIjtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCIuL2luZGV4XCI7IC8vL1xuXG5jb25zdCB7IG9uRnJhZ21lbnRDaGFuZ2UsIG9mZkZyYWdtZW50Q2hhbmdlIH0gPSBmcmFnbWVudDtcblxub25GcmFnbWVudENoYW5nZShmcmFnbWVudENoYW5nZUhhbmRsZXIpO1xuXG5jb25zb2xlLmxvZyhmcmFnbWVudClcblxuZnJhZ21lbnQgPSBcInRlc3RcIjtcblxuLy8gb2ZmRnJhZ21lbnRDaGFuZ2UoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyKTtcblxuZnVuY3Rpb24gZnJhZ21lbnRDaGFuZ2VIYW5kbGVyKCkge1xuICBjb25zb2xlLmxvZyhmcmFnbWVudClcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7QUFBQTs7Ozs7bUNBRWEseUJBQUE7OztlQUFBOzs7QUFBTixRQUFNLHdCQUF3Qjs7OztBQ0ZyQzs7Ozs7Ozs7Ozs7OztNQUlhLGNBQVksV0FBQTtlQUFaOztNQURBLFVBQVEsV0FBQTtlQUFSOztNQURBLE1BQUksV0FBQTtlQUFKOzs7QUFBTixRQUFNLE9BQU87QUFDYixRQUFNLFdBQVc7QUFDakIsUUFBTSxlQUFlOzs7O0FDSjVCOzs7Ozs7Ozs7Ozs7O01BS2dCLGFBQVcsV0FBQTtlQUFYOztNQTREQSxtQkFBaUIsV0FBQTtlQUFqQjs7TUFKQSxrQkFBZ0IsV0FBQTtlQUFoQjs7TUF6QkEsZUFBYSxXQUFBO2VBQWI7O01BaEJBLGFBQVcsV0FBQTtlQUFYOzs7OztBQWZULDJCQUFTO0FBQ2QsVUFBTSxPQUFPLFdBQ1AsWUFBVyxJQUFJLE9BQU87QUFFNUIsYUFBTyxPQUFPLFdBQVU7UUFDdEI7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7QUFHRixhQUFPOztBQUdGLHlCQUFxQixXQUFRO1VBQUUsV0FBQSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQVc7QUFDL0MsVUFBSSxVQUFVO0FBQ1osZUFBTyxvQkFBb0IsV0FBVzs7QUFHeEMsVUFBTSxPQUFPO0FBRWIsYUFBTyxTQUFTLE9BQU87QUFFdkIsVUFBSSxVQUFVO0FBQ1osbUJBQVcsV0FBQTtBQUNULGlCQUFPLGlCQUFpQixXQUFXO1dBQ2xDOzs7QUFJQSw2QkFBUztVQUFjLFdBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFXO0FBQ3ZDLFVBQUksVUFBVTtBQUNaLGVBQU8sb0JBQW9CLFdBQVc7O0FBR3hDLFVBQU0sT0FBUyxTQUFUO0FBRU4sVUFBTSxRQUFRLEtBQUssUUFBUSxXQUFBO0FBRTNCLFVBQUksVUFBVSxJQUFJO0FBQ2hCLFlBQU0sUUFBUSxHQUNSLE1BQU07QUFFWixlQUFPLEtBQUssVUFBVSxPQUFPO0FBRTdCLGdCQUFRLFVBQVUsSUFBSSxXQUFBLGNBQWM7O0FBR3RDLFVBQUksVUFBVTtBQUNaLG1CQUFXLFdBQUE7QUFDVCxpQkFBTyxpQkFBaUIsV0FBVztXQUNsQzs7O0FBSUEsOEJBQTBCLHVCQUFxQjtVQUFFLFVBQUEsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFVO0FBQ2hFLHFDQUErQix1QkFBdUI7O0FBR2pELCtCQUEyQix1QkFBcUI7VUFBRSxVQUFBLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBVTtBQUNqRSx3Q0FBa0MsdUJBQXVCOztBQUczRCxXQUFPLGVBQWUsWUFBWSxXQUFBLFVBQVU7TUFDMUMsS0FBSyxlQUFMO0FBQ0UsWUFBTSxZQUFXO0FBRWpCLGVBQU87O01BR1QsS0FBSyxhQUFTLFdBQVE7QUFDcEIsWUFBTSxXQUFXO0FBRWpCLG9CQUFZLFdBQVU7OztBQUkxQixRQUFNLFlBQVksWUFBQTtBQUFsQixRQUNNLCtCQUErQjtBQUVyQyxXQUFPLGlCQUFpQixXQUFXO0FBRW5DLHVCQUFTO0FBQ1AsVUFBUSxZQUFhLE9BQWI7QUFFUixVQUFNLE9BQVMsVUFBVDtBQUVOLFVBQU0sUUFBUTtBQUVkLGFBQU8sS0FBSyxVQUFVO0FBRXRCLGFBQU87O0FBR1QsZ0NBQTRCLE9BQUs7QUFDL0IsVUFBTSxPQUFPLFdBQ1AsVUFBVSxRQUNWLFlBQVc7QUFFakIsaUNBQTJCLE9BQU8sU0FBUzs7QUFHN0Msd0NBQW9DLE9BQU8sU0FBUyxXQUFRO0FBQzFELG1DQUE2QixRQUFRLFNBQUMsNkJBQUE7QUFDcEMsWUFBUSx3QkFBaUUsNEJBQWpFLHVCQUFnQywrQkFBaUMsNEJBQTFDO0FBRS9CLDhCQUFzQixLQUFLLDhCQUE4QixPQUFPLFNBQVM7OztBQUk3RSw0Q0FBd0MsdUJBQXVCLFNBQU87QUFDcEUsVUFBTSw4QkFBOEIsa0NBQWtDLHVCQUF1QjtBQUU3RixtQ0FBNkIsS0FBSztBQUVsQyxhQUFPOztBQUdULCtDQUEyQyx1QkFBdUIsU0FBTztBQUN2RSxVQUFNLDhCQUE4QixnQ0FBZ0MsdUJBQXVCLFVBQ3JGLFFBQVEsNkJBQTZCLFFBQVEsOEJBQzdDLFFBQVEsT0FDUixjQUFjO0FBRXBCLG1DQUE2QixPQUFPLE9BQU87QUFFM0MsYUFBTzs7QUFHVCwrQ0FBMkMsdUJBQXVCLFNBQU87QUFDdkUsVUFBSTtBQUVKLG9DQUE4QixXQUFBOztBQUU5QixhQUFPLE9BQU8sNkJBQTZCO1FBQ3pDO1FBQ0E7O0FBR0YsYUFBTzs7QUFHVCw2Q0FBeUMsdUJBQXVCLFNBQU87QUFDckUsVUFBTSw4QkFBOEIsNkJBQTZCLEtBQUssU0FBQyw4QkFBQTtBQUNyRSxZQUFLLDZCQUE0QixZQUFZLFdBQWEsNkJBQTRCLDBCQUEwQix1QkFBd0I7QUFDdEksaUJBQU87OztBQUlYLGFBQU87Ozs7O0FDM0pUOzs7Ozs7Ozs7Ozs7O01BSVMsYUFBVyxXQUFBO2VBQVgsWUFBQTs7TUFBMkQsbUJBQWlCLFdBQUE7ZUFBakIsWUFBQTs7TUFBbEIsa0JBQWdCLFdBQUE7ZUFBaEIsWUFBQTs7TUFBZixlQUFhLFdBQUE7ZUFBYixZQUFBOztNQUFiLGFBQVcsV0FBQTtlQUFYLFlBQUE7Ozs7Ozs7QUNKdEI7Ozs7OztBQUlBLFFBQVEsbUJBQXdDLFNBQXhDO0FBQVIsUUFBMEIsb0JBQXNCLFNBQXRCO0FBRTFCLHFCQUFpQjtBQUVqQixZQUFRLElBQUk7QUFFWixlQUFXO0FBSVgscUNBQVM7QUFDUCxjQUFRLElBQUk7OzsiLAogICJuYW1lcyI6IFtdCn0K
package/lib/constants.js CHANGED
@@ -2,12 +2,25 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "FRAGMENT", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ EMPTY_STRING: function() {
13
+ return EMPTY_STRING;
14
+ },
15
+ FRAGMENT: function() {
8
16
  return FRAGMENT;
17
+ },
18
+ HASH: function() {
19
+ return HASH;
9
20
  }
10
21
  });
22
+ var HASH = "#";
11
23
  var FRAGMENT = "fragment";
24
+ var EMPTY_STRING = "";
12
25
 
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBGUkFHTUVOVCA9IFwiZnJhZ21lbnRcIjtcbiJdLCJuYW1lcyI6WyJGUkFHTUVOVCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFFYUE7OztlQUFBQTs7O0FBQU4sSUFBTUEsV0FBVyJ9
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBIQVNIID0gXCIjXCI7XG5leHBvcnQgY29uc3QgRlJBR01FTlQgPSBcImZyYWdtZW50XCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjsiXSwibmFtZXMiOlsiRU1QVFlfU1RSSU5HIiwiRlJBR01FTlQiLCJIQVNIIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFJYUEsWUFBWTtlQUFaQTs7SUFEQUMsUUFBUTtlQUFSQTs7SUFEQUMsSUFBSTtlQUFKQTs7O0FBQU4sSUFBTUEsT0FBTztBQUNiLElBQU1ELFdBQVc7QUFDakIsSUFBTUQsZUFBZSJ9
package/lib/fragmented.js CHANGED
@@ -18,17 +18,21 @@ _export(exports, {
18
18
  onFragmentChange: function() {
19
19
  return onFragmentChange;
20
20
  },
21
+ resetFragment: function() {
22
+ return resetFragment;
23
+ },
21
24
  setFragment: function() {
22
25
  return setFragment;
23
26
  }
24
27
  });
25
- var _constants = require("./constants");
26
28
  var _eventTypes = require("./eventTypes");
29
+ var _constants = require("./constants");
27
30
  function getFragment() {
28
31
  var hash = getHash(), fragment = new String(hash); ///
29
32
  Object.assign(fragment, {
30
33
  getFragment: getFragment,
31
34
  setFragment: setFragment,
35
+ resetFragment: resetFragment,
32
36
  onFragmentChange: onFragmentChange,
33
37
  offFragmentChange: offFragmentChange
34
38
  });
@@ -36,10 +40,10 @@ function getFragment() {
36
40
  }
37
41
  function setFragment(fragment) {
38
42
  var silently = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
39
- var hash = fragment; ///
40
43
  if (silently) {
41
44
  window.removeEventListener(eventType, hashChangeListener);
42
45
  }
46
+ var hash = fragment; ///
43
47
  window.location.hash = hash;
44
48
  if (silently) {
45
49
  setTimeout(function() {
@@ -47,17 +51,33 @@ function setFragment(fragment) {
47
51
  }, 0);
48
52
  }
49
53
  }
54
+ function resetFragment() {
55
+ var silently = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
56
+ if (silently) {
57
+ window.removeEventListener(eventType, hashChangeListener);
58
+ }
59
+ var href = location.href;
60
+ var index = href.indexOf(_constants.HASH);
61
+ if (index !== -1) {
62
+ var start = 0, end = index; ///
63
+ href = href.substring(start, end); ///
64
+ history.pushState({}, _constants.EMPTY_STRING, href);
65
+ }
66
+ if (silently) {
67
+ setTimeout(function() {
68
+ window.addEventListener(eventType, hashChangeListener);
69
+ }, 0);
70
+ }
71
+ }
50
72
  function onFragmentChange(fragmentChangeHandler) {
51
- fragmentChangeHandlers.push(fragmentChangeHandler);
73
+ var element = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this;
74
+ addFragmentChangeEventListener(fragmentChangeHandler, element);
52
75
  }
53
76
  function offFragmentChange(fragmentChangeHandler) {
54
- var index = fragmentChangeHandlers.indexOf(fragmentChangeHandler);
55
- if (index > -1) {
56
- var start = index, deleteCount = 1;
57
- fragmentChangeHandlers.splice(start, deleteCount);
58
- }
77
+ var element = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : this;
78
+ removeFragmentChangeEventListener(fragmentChangeHandler, element);
59
79
  }
60
- Object.defineProperty(window, _constants.FRAGMENT, {
80
+ Object.defineProperty(globalThis, _constants.FRAGMENT, {
61
81
  get: function get() {
62
82
  var fragment = getFragment();
63
83
  return fragment;
@@ -67,20 +87,51 @@ Object.defineProperty(window, _constants.FRAGMENT, {
67
87
  setFragment(fragment, silently);
68
88
  }
69
89
  });
70
- var eventType = _eventTypes.HASHCHANGE_EVENT_TYPE, fragmentChangeHandlers = [];
90
+ var eventType = _eventTypes.HASHCHANGE_EVENT_TYPE, fragmentChangeEventListeners = [];
71
91
  window.addEventListener(eventType, hashChangeListener);
72
- function hashChangeListener(event) {
73
- var hash = getHash(), fragment = hash; ///
74
- fragmentChangeHandlers.forEach(function(fragmentChangeHandler) {
75
- fragmentChangeHandler(event, fragment);
76
- });
77
- }
78
92
  function getHash() {
79
- var location = window.location;
80
- var hash = location.hash;
93
+ var location1 = window.location;
94
+ var hash = location1.hash;
81
95
  var start = 1;
82
96
  hash = hash.substring(start);
83
97
  return hash;
84
98
  }
99
+ function hashChangeListener(event) {
100
+ var hash = getHash(), element = window, fragment = hash; ///
101
+ callFragmentChangeHandlers(event, element, fragment);
102
+ }
103
+ function callFragmentChangeHandlers(event, element, fragment) {
104
+ fragmentChangeEventListeners.forEach(function(fragmentChangeEventListener) {
105
+ var fragmentChangeHandler = fragmentChangeEventListener.fragmentChangeHandler, fragmentChangeHandlerElement = fragmentChangeEventListener.element; ///
106
+ fragmentChangeHandler.call(fragmentChangeHandlerElement, event, element, fragment);
107
+ });
108
+ }
109
+ function addFragmentChangeEventListener(fragmentChangeHandler, element) {
110
+ var fragmentChangeEventListener = createFragmentChangeEventListener(fragmentChangeHandler, element);
111
+ fragmentChangeEventListeners.push(fragmentChangeEventListener);
112
+ return fragmentChangeEventListener;
113
+ }
114
+ function removeFragmentChangeEventListener(fragmentChangeHandler, element) {
115
+ var fragmentChangeEventListener = findFragmentChangeEventListener(fragmentChangeHandler, element), index = fragmentChangeEventListeners.indexOf(fragmentChangeEventListener), start = index, deleteCount = 1;
116
+ fragmentChangeEventListeners.splice(start, deleteCount);
117
+ return fragmentChangeEventListener;
118
+ }
119
+ function createFragmentChangeEventListener(fragmentChangeHandler, element) {
120
+ var fragmentChangeEventListener;
121
+ fragmentChangeEventListener = function() {}; ///
122
+ Object.assign(fragmentChangeEventListener, {
123
+ element: element,
124
+ fragmentChangeHandler: fragmentChangeHandler
125
+ });
126
+ return fragmentChangeEventListener;
127
+ }
128
+ function findFragmentChangeEventListener(fragmentChangeHandler, element) {
129
+ var fragmentChangeEventListener = fragmentChangeEventListeners.find(function(fragmentChangeEventListener) {
130
+ if (fragmentChangeEventListener.element === element && fragmentChangeEventListener.fragmentChangeHandler === fragmentChangeHandler) {
131
+ return true;
132
+ }
133
+ });
134
+ return fragmentChangeEventListener;
135
+ }
85
136
 
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mcmFnbWVudGVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBGUkFHTUVOVCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgSEFTSENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4vZXZlbnRUeXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnJhZ21lbnQoKSB7XG4gIGNvbnN0IGhhc2ggPSBnZXRIYXNoKCksXG4gICAgICAgIGZyYWdtZW50ID0gbmV3IFN0cmluZyhoYXNoKTsgIC8vL1xuXG4gIE9iamVjdC5hc3NpZ24oZnJhZ21lbnQsIHtcbiAgICBnZXRGcmFnbWVudCxcbiAgICBzZXRGcmFnbWVudCxcbiAgICBvbkZyYWdtZW50Q2hhbmdlLFxuICAgIG9mZkZyYWdtZW50Q2hhbmdlXG4gIH0pO1xuXG4gIHJldHVybiBmcmFnbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZyYWdtZW50KGZyYWdtZW50LCBzaWxlbnRseSA9IHRydWUpIHtcbiAgY29uc3QgaGFzaCA9IGZyYWdtZW50OyAgLy8vXG5cbiAgaWYgKHNpbGVudGx5KSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYXNoQ2hhbmdlTGlzdGVuZXIpO1xuICB9XG5cbiAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBoYXNoO1xuXG4gIGlmIChzaWxlbnRseSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYXNoQ2hhbmdlTGlzdGVuZXIpO1xuICAgIH0sIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkZyYWdtZW50Q2hhbmdlKGZyYWdtZW50Q2hhbmdlSGFuZGxlcikge1xuICBmcmFnbWVudENoYW5nZUhhbmRsZXJzLnB1c2goZnJhZ21lbnRDaGFuZ2VIYW5kbGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9mZkZyYWdtZW50Q2hhbmdlKGZyYWdtZW50Q2hhbmdlSGFuZGxlcikge1xuICBjb25zdCBpbmRleCA9IGZyYWdtZW50Q2hhbmdlSGFuZGxlcnMuaW5kZXhPZihmcmFnbWVudENoYW5nZUhhbmRsZXIpO1xuXG4gIGlmIChpbmRleCA+IC0xKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGZyYWdtZW50Q2hhbmdlSGFuZGxlcnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgRlJBR01FTlQsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGdldEZyYWdtZW50KCk7XG5cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH0sXG5cbiAgc2V0OiBmdW5jdGlvbihmcmFnbWVudCkge1xuICAgIGNvbnN0IHNpbGVudGx5ID0gZmFsc2U7XG5cbiAgICBzZXRGcmFnbWVudChmcmFnbWVudCwgc2lsZW50bHkpO1xuICB9XG59KTtcblxuY29uc3QgZXZlbnRUeXBlID0gSEFTSENIQU5HRV9FVkVOVF9UWVBFLFxuICAgICAgZnJhZ21lbnRDaGFuZ2VIYW5kbGVycyA9IFtdO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhc2hDaGFuZ2VMaXN0ZW5lcik7XG5cbmZ1bmN0aW9uIGhhc2hDaGFuZ2VMaXN0ZW5lcihldmVudCkge1xuICBjb25zdCBoYXNoID0gZ2V0SGFzaCgpLFxuICAgICAgICBmcmFnbWVudCA9IGhhc2g7ICAvLy9cblxuICBmcmFnbWVudENoYW5nZUhhbmRsZXJzLmZvckVhY2goKGZyYWdtZW50Q2hhbmdlSGFuZGxlcikgPT4ge1xuICAgIGZyYWdtZW50Q2hhbmdlSGFuZGxlcihldmVudCwgZnJhZ21lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0SGFzaCgpIHtcbiAgY29uc3QgeyBsb2NhdGlvbiB9ID0gd2luZG93O1xuXG4gIGxldCB7IGhhc2ggfSA9IGxvY2F0aW9uO1xuXG4gIGNvbnN0IHN0YXJ0ID0gMTtcblxuICBoYXNoID0gaGFzaC5zdWJzdHJpbmcoc3RhcnQpO1xuXG4gIHJldHVybiBoYXNoO1xufSJdLCJuYW1lcyI6WyJnZXRGcmFnbWVudCIsIm9mZkZyYWdtZW50Q2hhbmdlIiwib25GcmFnbWVudENoYW5nZSIsInNldEZyYWdtZW50IiwiaGFzaCIsImdldEhhc2giLCJmcmFnbWVudCIsIlN0cmluZyIsIk9iamVjdCIsImFzc2lnbiIsInNpbGVudGx5Iiwid2luZG93IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV2ZW50VHlwZSIsImhhc2hDaGFuZ2VMaXN0ZW5lciIsImxvY2F0aW9uIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJmcmFnbWVudENoYW5nZUhhbmRsZXIiLCJmcmFnbWVudENoYW5nZUhhbmRsZXJzIiwicHVzaCIsImluZGV4IiwiaW5kZXhPZiIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJzcGxpY2UiLCJkZWZpbmVQcm9wZXJ0eSIsIkZSQUdNRU5UIiwiZ2V0Iiwic2V0IiwiSEFTSENIQU5HRV9FVkVOVF9UWVBFIiwiZXZlbnQiLCJmb3JFYWNoIiwic3Vic3RyaW5nIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFLZ0JBLFdBQVc7ZUFBWEE7O0lBa0NBQyxpQkFBaUI7ZUFBakJBOztJQUpBQyxnQkFBZ0I7ZUFBaEJBOztJQWhCQUMsV0FBVztlQUFYQTs7O3lCQWpCUzswQkFDYTtBQUUvQixTQUFTSDtJQUNkLElBQU1JLE9BQU9DLFdBQ1BDLFdBQVcsSUFBSUMsT0FBT0gsT0FBUSxHQUFHO0lBRXZDSSxPQUFPQyxNQUFNLENBQUNILFVBQVU7UUFDdEJOLGFBQUFBO1FBQ0FHLGFBQUFBO1FBQ0FELGtCQUFBQTtRQUNBRCxtQkFBQUE7SUFDRjtJQUVBLE9BQU9LO0FBQ1Q7QUFFTyxTQUFTSCxZQUFZRyxRQUFRO1FBQUVJLFdBQUFBLGlFQUFXO0lBQy9DLElBQU1OLE9BQU9FLFVBQVcsR0FBRztJQUUzQixJQUFJSSxVQUFVO1FBQ1pDLE9BQU9DLG1CQUFtQixDQUFDQyxXQUFXQztJQUN4QztJQUVBSCxPQUFPSSxRQUFRLENBQUNYLElBQUksR0FBR0E7SUFFdkIsSUFBSU0sVUFBVTtRQUNaTSxXQUFXO1lBQ1RMLE9BQU9NLGdCQUFnQixDQUFDSixXQUFXQztRQUNyQyxHQUFHO0lBQ0w7QUFDRjtBQUVPLFNBQVNaLGlCQUFpQmdCLHFCQUFxQjtJQUNwREMsdUJBQXVCQyxJQUFJLENBQUNGO0FBQzlCO0FBRU8sU0FBU2pCLGtCQUFrQmlCLHFCQUFxQjtJQUNyRCxJQUFNRyxRQUFRRix1QkFBdUJHLE9BQU8sQ0FBQ0o7SUFFN0MsSUFBSUcsUUFBUSxDQUFDLEdBQUc7UUFDZCxJQUFNRSxRQUFRRixPQUNSRyxjQUFjO1FBRXBCTCx1QkFBdUJNLE1BQU0sQ0FBQ0YsT0FBT0M7SUFDdkM7QUFDRjtBQUVBaEIsT0FBT2tCLGNBQWMsQ0FBQ2YsUUFBUWdCLG1CQUFRLEVBQUU7SUFDdENDLEtBQUssU0FBTEE7UUFDRSxJQUFNdEIsV0FBV047UUFFakIsT0FBT007SUFDVDtJQUVBdUIsS0FBSyxTQUFMQSxJQUFjdkIsUUFBUTtRQUNwQixJQUFNSSxXQUFXO1FBRWpCUCxZQUFZRyxVQUFVSTtJQUN4QjtBQUNGO0FBRUEsSUFBTUcsWUFBWWlCLGlDQUFxQixFQUNqQ1gseUJBQXlCLEVBQUU7QUFFakNSLE9BQU9NLGdCQUFnQixDQUFDSixXQUFXQztBQUVuQyxTQUFTQSxtQkFBbUJpQixLQUFLO0lBQy9CLElBQU0zQixPQUFPQyxXQUNQQyxXQUFXRixNQUFPLEdBQUc7SUFFM0JlLHVCQUF1QmEsT0FBTyxDQUFDLFNBQUNkO1FBQzlCQSxzQkFBc0JhLE9BQU96QjtJQUMvQjtBQUNGO0FBRUEsU0FBU0Q7SUFDUCxJQUFNLEFBQUVVLFdBQWFKLE9BQWJJO0lBRVIsSUFBSSxBQUFFWCxPQUFTVyxTQUFUWDtJQUVOLElBQU1tQixRQUFRO0lBRWRuQixPQUFPQSxLQUFLNkIsU0FBUyxDQUFDVjtJQUV0QixPQUFPbkI7QUFDVCJ9
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mcmFnbWVudGVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBIQVNIQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG5pbXBvcnQgeyBIQVNILCBGUkFHTUVOVCwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcmFnbWVudCgpIHtcbiAgY29uc3QgaGFzaCA9IGdldEhhc2goKSxcbiAgICAgICAgZnJhZ21lbnQgPSBuZXcgU3RyaW5nKGhhc2gpOyAgLy8vXG5cbiAgT2JqZWN0LmFzc2lnbihmcmFnbWVudCwge1xuICAgIGdldEZyYWdtZW50LFxuICAgIHNldEZyYWdtZW50LFxuICAgIHJlc2V0RnJhZ21lbnQsXG4gICAgb25GcmFnbWVudENoYW5nZSxcbiAgICBvZmZGcmFnbWVudENoYW5nZVxuICB9KTtcblxuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGcmFnbWVudChmcmFnbWVudCwgc2lsZW50bHkgPSB0cnVlKSB7XG4gIGlmIChzaWxlbnRseSkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFzaENoYW5nZUxpc3RlbmVyKTtcbiAgfVxuXG4gIGNvbnN0IGhhc2ggPSBmcmFnbWVudDsgIC8vL1xuXG4gIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gaGFzaDtcblxuICBpZiAoc2lsZW50bHkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFzaENoYW5nZUxpc3RlbmVyKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRGcmFnbWVudChzaWxlbnRseSA9IHRydWUpIHtcbiAgaWYgKHNpbGVudGx5KSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYXNoQ2hhbmdlTGlzdGVuZXIpO1xuICB9XG5cbiAgbGV0IHsgaHJlZiB9ID0gbG9jYXRpb247XG5cbiAgY29uc3QgaW5kZXggPSBocmVmLmluZGV4T2YoSEFTSCk7XG5cbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgICBlbmQgPSBpbmRleDsgIC8vL1xuXG4gICAgaHJlZiA9IGhyZWYuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOyAvLy9cblxuICAgIGhpc3RvcnkucHVzaFN0YXRlKHt9LCBFTVBUWV9TVFJJTkcsIGhyZWYpO1xuICB9XG5cbiAgaWYgKHNpbGVudGx5KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhc2hDaGFuZ2VMaXN0ZW5lcik7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uRnJhZ21lbnRDaGFuZ2UoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50ID0gdGhpcykge1xuICBhZGRGcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9mZkZyYWdtZW50Q2hhbmdlKGZyYWdtZW50Q2hhbmdlSGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgcmVtb3ZlRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKGZyYWdtZW50Q2hhbmdlSGFuZGxlciwgZWxlbWVudCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBGUkFHTUVOVCwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gZ2V0RnJhZ21lbnQoKTtcblxuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfSxcblxuICBzZXQ6IGZ1bmN0aW9uKGZyYWdtZW50KSB7XG4gICAgY29uc3Qgc2lsZW50bHkgPSBmYWxzZTtcblxuICAgIHNldEZyYWdtZW50KGZyYWdtZW50LCBzaWxlbnRseSk7XG4gIH1cbn0pO1xuXG5jb25zdCBldmVudFR5cGUgPSBIQVNIQ0hBTkdFX0VWRU5UX1RZUEUsXG4gICAgICBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXJzID0gW107XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFzaENoYW5nZUxpc3RlbmVyKTtcblxuZnVuY3Rpb24gZ2V0SGFzaCgpIHtcbiAgY29uc3QgeyBsb2NhdGlvbiB9ID0gd2luZG93O1xuXG4gIGxldCB7IGhhc2ggfSA9IGxvY2F0aW9uO1xuXG4gIGNvbnN0IHN0YXJ0ID0gMTtcblxuICBoYXNoID0gaGFzaC5zdWJzdHJpbmcoc3RhcnQpO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5mdW5jdGlvbiBoYXNoQ2hhbmdlTGlzdGVuZXIoZXZlbnQpIHtcbiAgY29uc3QgaGFzaCA9IGdldEhhc2goKSxcbiAgICAgICAgZWxlbWVudCA9IHdpbmRvdywgLy8vXG4gICAgICAgIGZyYWdtZW50ID0gaGFzaDsgIC8vL1xuXG4gIGNhbGxGcmFnbWVudENoYW5nZUhhbmRsZXJzKGV2ZW50LCBlbGVtZW50LCBmcmFnbWVudCk7XG59XG5cbmZ1bmN0aW9uIGNhbGxGcmFnbWVudENoYW5nZUhhbmRsZXJzKGV2ZW50LCBlbGVtZW50LCBmcmFnbWVudCkge1xuICBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50OiBmcmFnbWVudENoYW5nZUhhbmRsZXJFbGVtZW50IH0gPSBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXI7IC8vL1xuXG4gICAgZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLmNhbGwoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyRWxlbWVudCwgZXZlbnQsIGVsZW1lbnQsIGZyYWdtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcihmcmFnbWVudENoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyID0gY3JlYXRlRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKGZyYWdtZW50Q2hhbmdlSGFuZGxlciwgZWxlbWVudCk7XG5cbiAgZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVycy5wdXNoKGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcik7XG5cbiAgcmV0dXJuIGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKGZyYWdtZW50Q2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIgPSBmaW5kRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKGZyYWdtZW50Q2hhbmdlSGFuZGxlciwgZWxlbWVudCksXG4gICAgICAgIGluZGV4ID0gZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVycy5pbmRleE9mKGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lciksXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gIGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG5cbiAgcmV0dXJuIGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKGZyYWdtZW50Q2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xuICBsZXQgZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyO1xuXG4gIGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHt9OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lciwge1xuICAgIGVsZW1lbnQsXG4gICAgZnJhZ21lbnRDaGFuZ2VIYW5kbGVyXG4gIH0pO1xuXG4gIHJldHVybiBmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXI7XG59XG5cbmZ1bmN0aW9uIGZpbmRGcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIoZnJhZ21lbnRDaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lciA9IGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcnMuZmluZCgoZnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyKSA9PiB7XG4gICAgaWYgKChmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIuZWxlbWVudCA9PT0gZWxlbWVudCkgJiYgKGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lci5mcmFnbWVudENoYW5nZUhhbmRsZXIgPT09IGZyYWdtZW50Q2hhbmdlSGFuZGxlcikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lcjtcbn1cbiJdLCJuYW1lcyI6WyJnZXRGcmFnbWVudCIsIm9mZkZyYWdtZW50Q2hhbmdlIiwib25GcmFnbWVudENoYW5nZSIsInJlc2V0RnJhZ21lbnQiLCJzZXRGcmFnbWVudCIsImhhc2giLCJnZXRIYXNoIiwiZnJhZ21lbnQiLCJTdHJpbmciLCJPYmplY3QiLCJhc3NpZ24iLCJzaWxlbnRseSIsIndpbmRvdyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJldmVudFR5cGUiLCJoYXNoQ2hhbmdlTGlzdGVuZXIiLCJsb2NhdGlvbiIsInNldFRpbWVvdXQiLCJhZGRFdmVudExpc3RlbmVyIiwiaHJlZiIsImluZGV4IiwiaW5kZXhPZiIsIkhBU0giLCJzdGFydCIsImVuZCIsInN1YnN0cmluZyIsImhpc3RvcnkiLCJwdXNoU3RhdGUiLCJFTVBUWV9TVFJJTkciLCJmcmFnbWVudENoYW5nZUhhbmRsZXIiLCJlbGVtZW50IiwiYWRkRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyIiwicmVtb3ZlRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyIiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWxUaGlzIiwiRlJBR01FTlQiLCJnZXQiLCJzZXQiLCJIQVNIQ0hBTkdFX0VWRU5UX1RZUEUiLCJmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXJzIiwiZXZlbnQiLCJjYWxsRnJhZ21lbnRDaGFuZ2VIYW5kbGVycyIsImZvckVhY2giLCJmcmFnbWVudENoYW5nZUV2ZW50TGlzdGVuZXIiLCJmcmFnbWVudENoYW5nZUhhbmRsZXJFbGVtZW50IiwiY2FsbCIsImNyZWF0ZUZyYWdtZW50Q2hhbmdlRXZlbnRMaXN0ZW5lciIsInB1c2giLCJmaW5kRnJhZ21lbnRDaGFuZ2VFdmVudExpc3RlbmVyIiwiZGVsZXRlQ291bnQiLCJzcGxpY2UiLCJmaW5kIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFLZ0JBLFdBQVc7ZUFBWEE7O0lBNERBQyxpQkFBaUI7ZUFBakJBOztJQUpBQyxnQkFBZ0I7ZUFBaEJBOztJQXpCQUMsYUFBYTtlQUFiQTs7SUFoQkFDLFdBQVc7ZUFBWEE7OzswQkFsQnNCO3lCQUNPO0FBRXRDLFNBQVNKO0lBQ2QsSUFBTUssT0FBT0MsV0FDUEMsV0FBVyxJQUFJQyxPQUFPSCxPQUFRLEdBQUc7SUFFdkNJLE9BQU9DLE1BQU0sQ0FBQ0gsVUFBVTtRQUN0QlAsYUFBQUE7UUFDQUksYUFBQUE7UUFDQUQsZUFBQUE7UUFDQUQsa0JB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
package/lib/index.js CHANGED
@@ -18,10 +18,13 @@ _export(exports, {
18
18
  onFragmentChange: function() {
19
19
  return _fragmented.onFragmentChange;
20
20
  },
21
+ resetFragment: function() {
22
+ return _fragmented.resetFragment;
23
+ },
21
24
  setFragment: function() {
22
25
  return _fragmented.setFragment;
23
26
  }
24
27
  });
25
28
  var _fragmented = require("./fragmented");
26
29
 
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFwiLi9mcmFnbWVudGVkXCI7XG5cbmV4cG9ydCB7IHNldEZyYWdtZW50LCBnZXRGcmFnbWVudCwgb25GcmFnbWVudENoYW5nZSwgb2ZmRnJhZ21lbnRDaGFuZ2UgfSBmcm9tIFwiLi9mcmFnbWVudGVkXCI7XG5cbiJdLCJuYW1lcyI6WyJnZXRGcmFnbWVudCIsIm9mZkZyYWdtZW50Q2hhbmdlIiwib25GcmFnbWVudENoYW5nZSIsInNldEZyYWdtZW50Il0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBSXNCQSxXQUFXO2VBQVhBLHVCQUFXOztJQUFvQkMsaUJBQWlCO2VBQWpCQSw2QkFBaUI7O0lBQW5DQyxnQkFBZ0I7ZUFBaEJBLDRCQUFnQjs7SUFBMUNDLFdBQVc7ZUFBWEEsdUJBQVc7OzswQkFGYiJ9
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFwiLi9mcmFnbWVudGVkXCI7XG5cbmV4cG9ydCB7IGdldEZyYWdtZW50LCBzZXRGcmFnbWVudCwgcmVzZXRGcmFnbWVudCwgb25GcmFnbWVudENoYW5nZSwgb2ZmRnJhZ21lbnRDaGFuZ2UgfSBmcm9tIFwiLi9mcmFnbWVudGVkXCI7XG5cbiJdLCJuYW1lcyI6WyJnZXRGcmFnbWVudCIsIm9mZkZyYWdtZW50Q2hhbmdlIiwib25GcmFnbWVudENoYW5nZSIsInJlc2V0RnJhZ21lbnQiLCJzZXRGcmFnbWVudCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQUlTQSxXQUFXO2VBQVhBLHVCQUFXOztJQUFnREMsaUJBQWlCO2VBQWpCQSw2QkFBaUI7O0lBQW5DQyxnQkFBZ0I7ZUFBaEJBLDRCQUFnQjs7SUFBL0JDLGFBQWE7ZUFBYkEseUJBQWE7O0lBQTFCQyxXQUFXO2VBQVhBLHVCQUFXOzs7MEJBRjFCIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fragmented",
3
3
  "author": "James Smith",
4
- "version": "3.1.3",
4
+ "version": "3.1.5",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/fragmented",
7
7
  "description": "Relates to URL hash fragments.",
package/src/constants.js CHANGED
@@ -1,3 +1,5 @@
1
1
  "use strict";
2
2
 
3
+ export const HASH = "#";
3
4
  export const FRAGMENT = "fragment";
5
+ export const EMPTY_STRING = "";
package/src/fragmented.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import { FRAGMENT } from "./constants";
4
3
  import { HASHCHANGE_EVENT_TYPE } from "./eventTypes";
4
+ import { HASH, FRAGMENT, EMPTY_STRING } from "./constants";
5
5
 
6
6
  export function getFragment() {
7
7
  const hash = getHash(),
@@ -10,6 +10,7 @@ export function getFragment() {
10
10
  Object.assign(fragment, {
11
11
  getFragment,
12
12
  setFragment,
13
+ resetFragment,
13
14
  onFragmentChange,
14
15
  offFragmentChange
15
16
  });
@@ -18,12 +19,12 @@ export function getFragment() {
18
19
  }
19
20
 
20
21
  export function setFragment(fragment, silently = true) {
21
- const hash = fragment; ///
22
-
23
22
  if (silently) {
24
23
  window.removeEventListener(eventType, hashChangeListener);
25
24
  }
26
25
 
26
+ const hash = fragment; ///
27
+
27
28
  window.location.hash = hash;
28
29
 
29
30
  if (silently) {
@@ -33,22 +34,40 @@ export function setFragment(fragment, silently = true) {
33
34
  }
34
35
  }
35
36
 
36
- export function onFragmentChange(fragmentChangeHandler) {
37
- fragmentChangeHandlers.push(fragmentChangeHandler);
38
- }
37
+ export function resetFragment(silently = true) {
38
+ if (silently) {
39
+ window.removeEventListener(eventType, hashChangeListener);
40
+ }
41
+
42
+ let { href } = location;
39
43
 
40
- export function offFragmentChange(fragmentChangeHandler) {
41
- const index = fragmentChangeHandlers.indexOf(fragmentChangeHandler);
44
+ const index = href.indexOf(HASH);
42
45
 
43
- if (index > -1) {
44
- const start = index, ///
45
- deleteCount = 1;
46
+ if (index !== -1) {
47
+ const start = 0,
48
+ end = index; ///
46
49
 
47
- fragmentChangeHandlers.splice(start, deleteCount);
50
+ href = href.substring(start, end); ///
51
+
52
+ history.pushState({}, EMPTY_STRING, href);
48
53
  }
54
+
55
+ if (silently) {
56
+ setTimeout(() => {
57
+ window.addEventListener(eventType, hashChangeListener);
58
+ }, 0);
59
+ }
60
+ }
61
+
62
+ export function onFragmentChange(fragmentChangeHandler, element = this) {
63
+ addFragmentChangeEventListener(fragmentChangeHandler, element);
49
64
  }
50
65
 
51
- Object.defineProperty(window, FRAGMENT, {
66
+ export function offFragmentChange(fragmentChangeHandler, element = this) {
67
+ removeFragmentChangeEventListener(fragmentChangeHandler, element);
68
+ }
69
+
70
+ Object.defineProperty(globalThis, FRAGMENT, {
52
71
  get: function() {
53
72
  const fragment = getFragment();
54
73
 
@@ -63,27 +82,76 @@ Object.defineProperty(window, FRAGMENT, {
63
82
  });
64
83
 
65
84
  const eventType = HASHCHANGE_EVENT_TYPE,
66
- fragmentChangeHandlers = [];
85
+ fragmentChangeEventListeners = [];
67
86
 
68
87
  window.addEventListener(eventType, hashChangeListener);
69
88
 
89
+ function getHash() {
90
+ const { location } = window;
91
+
92
+ let { hash } = location;
93
+
94
+ const start = 1;
95
+
96
+ hash = hash.substring(start);
97
+
98
+ return hash;
99
+ }
100
+
70
101
  function hashChangeListener(event) {
71
102
  const hash = getHash(),
103
+ element = window, ///
72
104
  fragment = hash; ///
73
105
 
74
- fragmentChangeHandlers.forEach((fragmentChangeHandler) => {
75
- fragmentChangeHandler(event, fragment);
106
+ callFragmentChangeHandlers(event, element, fragment);
107
+ }
108
+
109
+ function callFragmentChangeHandlers(event, element, fragment) {
110
+ fragmentChangeEventListeners.forEach((fragmentChangeEventListener) => {
111
+ const { fragmentChangeHandler, element: fragmentChangeHandlerElement } = fragmentChangeEventListener; ///
112
+
113
+ fragmentChangeHandler.call(fragmentChangeHandlerElement, event, element, fragment);
76
114
  });
77
115
  }
78
116
 
79
- function getHash() {
80
- const { location } = window;
117
+ function addFragmentChangeEventListener(fragmentChangeHandler, element) {
118
+ const fragmentChangeEventListener = createFragmentChangeEventListener(fragmentChangeHandler, element);
81
119
 
82
- let { hash } = location;
120
+ fragmentChangeEventListeners.push(fragmentChangeEventListener);
83
121
 
84
- const start = 1;
122
+ return fragmentChangeEventListener;
123
+ }
85
124
 
86
- hash = hash.substring(start);
125
+ function removeFragmentChangeEventListener(fragmentChangeHandler, element) {
126
+ const fragmentChangeEventListener = findFragmentChangeEventListener(fragmentChangeHandler, element),
127
+ index = fragmentChangeEventListeners.indexOf(fragmentChangeEventListener),
128
+ start = index, ///
129
+ deleteCount = 1;
87
130
 
88
- return hash;
89
- }
131
+ fragmentChangeEventListeners.splice(start, deleteCount);
132
+
133
+ return fragmentChangeEventListener;
134
+ }
135
+
136
+ function createFragmentChangeEventListener(fragmentChangeHandler, element) {
137
+ let fragmentChangeEventListener;
138
+
139
+ fragmentChangeEventListener = () => {}; ///
140
+
141
+ Object.assign(fragmentChangeEventListener, {
142
+ element,
143
+ fragmentChangeHandler
144
+ });
145
+
146
+ return fragmentChangeEventListener;
147
+ }
148
+
149
+ function findFragmentChangeEventListener(fragmentChangeHandler, element) {
150
+ const fragmentChangeEventListener = fragmentChangeEventListeners.find((fragmentChangeEventListener) => {
151
+ if ((fragmentChangeEventListener.element === element) && (fragmentChangeEventListener.fragmentChangeHandler === fragmentChangeHandler)) {
152
+ return true;
153
+ }
154
+ });
155
+
156
+ return fragmentChangeEventListener;
157
+ }
package/src/index.js CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  import "./fragmented";
4
4
 
5
- export { setFragment, getFragment, onFragmentChange, offFragmentChange } from "./fragmented";
5
+ export { getFragment, setFragment, resetFragment, onFragmentChange, offFragmentChange } from "./fragmented";
6
6