12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /*
- * Extending URI.js for fragment abuse
- */
- // --------------------------------------------------------------------------------
- // EXAMPLE: storing a relative URL in the fragment ("FragmentURI")
- // possibly helpful when working with backbone.js or sammy.js
- // inspired by https://github.com/medialize/URI.js/pull/2
- // --------------------------------------------------------------------------------
- // Note: make sure this is the last file loaded!
- // USAGE:
- // var uri = URI("http://example.org/#!/foo/bar/baz.html");
- // var furi = uri.fragment(true);
- // furi.pathname() === '/foo/bar/baz.html';
- // furi.pathname('/hello.html');
- // uri.toString() === "http://example.org/#!/hello.html"
- (function (root, factory) {
- 'use strict';
- // https://github.com/umdjs/umd/blob/master/returnExports.js
- if (typeof module === 'object' && module.exports) {
- // Node
- module.exports = factory(require('./URI'));
- } else if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(['./URI'], factory);
- } else {
- // Browser globals (root is window)
- factory(root.URI);
- }
- }(this, function (URI) {
- 'use strict';
- var p = URI.prototype;
- // old handlers we need to wrap
- var f = p.fragment;
- var b = p.build;
- // make fragmentPrefix configurable
- URI.fragmentPrefix = '!';
- var _parts = URI._parts;
- URI._parts = function() {
- var parts = _parts();
- parts.fragmentPrefix = URI.fragmentPrefix;
- return parts;
- };
- p.fragmentPrefix = function(v) {
- this._parts.fragmentPrefix = v;
- return this;
- };
- // add fragment(true) and fragment(URI) signatures
- p.fragment = function(v, build) {
- var prefix = this._parts.fragmentPrefix;
- var fragment = this._parts.fragment || '';
- var furi;
- if (v === true) {
- if (fragment.substring(0, prefix.length) !== prefix) {
- furi = URI('');
- } else {
- furi = new URI(fragment.substring(prefix.length));
- }
-
- this._fragmentURI = furi;
- furi._parentURI = this;
- return furi;
- } else if (v !== undefined && typeof v !== 'string') {
- this._fragmentURI = v;
- v._parentURI = v;
- this._parts.fragment = prefix + v.toString();
- this.build(!build);
- return this;
- } else if (typeof v === 'string') {
- this._fragmentURI = undefined;
- }
- return f.call(this, v, build);
- };
- // make .build() of the actual URI aware of the FragmentURI
- p.build = function(deferBuild) {
- var t = b.call(this, deferBuild);
-
- if (deferBuild !== false && this._parentURI) {
- // update the parent
- this._parentURI.fragment(this);
- }
- return t;
- };
- // extending existing object rather than defining something new
- return URI;
- }));
|