mode = CRM.config && CRM.config.isFrontend ? 'front' : 'back';
}
query = query || '';
- var frag = path.split('?');
- var url = tplURL[mode].replace("civicrm/placeholder-url-path", frag[0]);
+ var url,
+ frag = path.split('?');
+ // Encode url path only if slashes in placeholder were also encoded
+ if (tplURL[mode].indexOf('civicrm/placeholder-url-path') >= 0) {
+ url = tplURL[mode].replace('civicrm/placeholder-url-path', frag[0]);
+ } else {
+ url = tplURL[mode].replace('civicrm%2Fplaceholder-url-path', encodeURIComponent(frag[0]));
+ }
- if (!query) {
+ if (_.isEmpty(query)) {
url = url.replace(/[?&]civicrm-placeholder-url-query=1/, '');
- }
- else {
- url = url.replace("civicrm-placeholder-url-query=1", typeof query === 'string' ? query : $.param(query));
+ } else {
+ url = url.replace('civicrm-placeholder-url-query=1', typeof query === 'string' ? query : $.param(query));
}
if (frag[1]) {
url += (url.indexOf('?') < 0 ? '?' : '&') + frag[1];