-
Notifications
You must be signed in to change notification settings - Fork 0
/
all-your-base-href.js
130 lines (81 loc) · 2.88 KB
/
all-your-base-href.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*============================================================================*\
___ ____ __ __ ___ __ __ ___
/ _ | / / / \ \/ /__ __ ______ / _ )___ ____ ___ / // /______ / _/
/ __ |/ / / \ / _ \/ // / __/ / _ / _ `(_-</ -_) / _ / __/ -_) _/
/_/ |_/_/_/ /_/\___/\_,_/_/ /____/\_,_/___/\__/ /_//_/_/ \__/_/
All Your Base Href, a Minor Context-Awareness Script
-----------------------------------------------------------------------
© 2015 by Carroket, Inc.
http://www.carroket.com/
-----------------------------------------------------------------------
Made by Brian Sexton.
http://www.briansexton.com/
-----------------------------------------------------------------------
MIT License
\*============================================================================*/
(function(document, location, angular, options) {
var allYourBaseHref = new AllYourBaseHref();
function AllYourBaseHref() {
/* If no deployment contexts were specified, provide a sensible default
for local subdirectory-based multi-site deployment.
For example: http://foo.local/~username/example.com
*/
if (!options || !options.deploymentContexts) {
this.deploymentContexts = [
"^https?://[A-Za-z0-9-.].*local(/~[^/]+/[^/]+/).*$"
];
}
else {
this.deploymentContexts = options.deploymentContexts;
}
}
// Look, ma! Methods!
AllYourBaseHref.prototype.doTheThings = function() {
var href = allYourBaseHref.getContextHref();
if (href) {
allYourBaseHref.setBaseHref(href);
}
};
AllYourBaseHref.prototype.getContextHref = function() {
var regEx;
var result;
for (var i = 0; i < this.deploymentContexts.length; i++) {
regEx = new RegExp(this.deploymentContexts[i]);
result = regEx.exec(location.href);
if (result) {
return result[1];
}
}
return null;
};
AllYourBaseHref.prototype.setBaseHref = function(href) {
// Select the base element.
var element = document.querySelector("head > base");
// If no base element exists, create one.
if (!element) {
element = document.createElement("base");
// Prepend the newly created base element within the head element.
if (document.head.childElementCount > 0) {
document.head.insertBefore(element, document.head.firstChild);
}
else {
document.head.appendChild(element);
}
}
// Drum roll, please!
element.href = href;
};
// If AngularJS is present, register a module and do the things from that.
if (angular) {
angular.module("allYourBaseHref", [])
.run(allYourBaseHref.doTheThings);
}
// Otherwise, just do the things.
else {
allYourBaseHref.doTheThings();
}
// If a namespace was specified, attach allYourBaseHref to it.
if (options && options.namespace instanceof Object) {
options.namespace.allYourBaseHref = allYourBaseHref;
}
})(window.document, window.location, window.angular);