| | 712 | |
|---|
| | 713 | |
|---|
| | 714 | /** Test two URLs for equivalence. |
|---|
| | 715 | * |
|---|
| | 716 | * Setting 'ignoreCase' allows for case-independent comparison. |
|---|
| | 717 | * |
|---|
| | 718 | * Comparison is based on: |
|---|
| | 719 | * - Protocol |
|---|
| | 720 | * - Host (evaluated without the port) |
|---|
| | 721 | * - Port (set 'ignorePort80' to ignore "80" values) |
|---|
| | 722 | * - Hash ( set 'ignoreHash' to disable) |
|---|
| | 723 | * - Pathname (for relative <-> absolute comparison) |
|---|
| | 724 | * - Arguments (so they can be out of order) |
|---|
| | 725 | * |
|---|
| | 726 | * |
|---|
| | 727 | * |
|---|
| | 728 | * @param {String} url1 |
|---|
| | 729 | * @param {String} url2 |
|---|
| | 730 | * @param {Object} options allows for customization of comparison: |
|---|
| | 731 | * 'ignoreCase' - Default is True |
|---|
| | 732 | * 'ignorePort80' - Default is True |
|---|
| | 733 | * 'ignoreHash' - Default is True |
|---|
| | 734 | * |
|---|
| | 735 | * @returns Whether or not the two URLs are equivalent |
|---|
| | 736 | * @type Boolean |
|---|
| | 737 | */ |
|---|
| | 738 | OpenLayers.Util.isEquivalentUrl = function(url1, url2, options) { |
|---|
| | 739 | options = options || new Object(); |
|---|
| | 740 | |
|---|
| | 741 | OpenLayers.Util.applyDefaults(options, { |
|---|
| | 742 | ignoreCase: true, |
|---|
| | 743 | ignorePort80: true, |
|---|
| | 744 | ignoreHash: true |
|---|
| | 745 | }); |
|---|
| | 746 | |
|---|
| | 747 | urlObj1 = OpenLayers.Util.createUrlObject(url1, options); |
|---|
| | 748 | urlObj2 = OpenLayers.Util.createUrlObject(url2, options); |
|---|
| | 749 | |
|---|
| | 750 | //compare keys (host, port, etc) |
|---|
| | 751 | for(var key in urlObj1) { |
|---|
| | 752 | if ( (key != "args") && (urlObj1[key] != urlObj2[key]) ) { |
|---|
| | 753 | return false; |
|---|
| | 754 | } |
|---|
| | 755 | } |
|---|
| | 756 | |
|---|
| | 757 | // compare search args - irrespective of order |
|---|
| | 758 | for(var key in urlObj1.args) { |
|---|
| | 759 | if(urlObj1.args[key] != urlObj2.args[key]) { |
|---|
| | 760 | return false; |
|---|
| | 761 | } |
|---|
| | 762 | delete urlObj2.args[key]; |
|---|
| | 763 | } |
|---|
| | 764 | // urlObj2 shouldn't have any args left |
|---|
| | 765 | for(var key in urlObj2.args) { |
|---|
| | 766 | return false; |
|---|
| | 767 | } |
|---|
| | 768 | |
|---|
| | 769 | return true; |
|---|
| | 770 | }; |
|---|
| | 771 | |
|---|
| | 772 | /** |
|---|
| | 773 | * @private |
|---|
| | 774 | * |
|---|
| | 775 | * @param {String} url |
|---|
| | 776 | * @param {Object} options |
|---|
| | 777 | * |
|---|
| | 778 | * @returns An object with separate url, a, port, host, and args parsed out |
|---|
| | 779 | * and ready for comparison |
|---|
| | 780 | * @type Object |
|---|
| | 781 | */ |
|---|
| | 782 | OpenLayers.Util.createUrlObject = function(url, options) { |
|---|
| | 783 | options = options || new Object(); |
|---|
| | 784 | |
|---|
| | 785 | var urlObject = new Object(); |
|---|
| | 786 | |
|---|
| | 787 | if (options.ignoreCase) { |
|---|
| | 788 | url = url.toLowerCase(); |
|---|
| | 789 | } |
|---|
| | 790 | |
|---|
| | 791 | var a = document.createElement('a'); |
|---|
| | 792 | |
|---|
| | 793 | a.href = url; |
|---|
| | 794 | |
|---|
| | 795 | //protocol |
|---|
| | 796 | urlObject.protocol = a.protocol; |
|---|
| | 797 | |
|---|
| | 798 | //pathname (this part allows for relative <-> absolute comparison) |
|---|
| | 799 | urlObject.pathname = a.pathname; |
|---|
| | 800 | |
|---|
| | 801 | //hash |
|---|
| | 802 | urlObject.hash = (options.ignoreHash) ? "" : a.hash; |
|---|
| | 803 | |
|---|
| | 804 | //host (without port) |
|---|
| | 805 | urlObject.host = a.host; |
|---|
| | 806 | var port = a.port; |
|---|
| | 807 | if (port.length <= 0) { |
|---|
| | 808 | var newHostLength = urlObject.host.length - (port.length); |
|---|
| | 809 | urlObject.host = urlObject.host.substring(0, newHostLength); |
|---|
| | 810 | } |
|---|
| | 811 | |
|---|
| | 812 | //port |
|---|
| | 813 | urlObject.port = ((port == "80") && (options.ignorePort80)) ? "" : port; |
|---|
| | 814 | |
|---|
| | 815 | //args |
|---|
| | 816 | urlObject.args = OpenLayers.Util.getArgs(a.search); |
|---|
| | 817 | |
|---|
| | 818 | return urlObject; |
|---|
| | 819 | }; |
|---|
| | 820 | |