Merge pull request #19840 from MikeyMJCO/patch-7
[civicrm-core.git] / js / crm.ajax.js
index e65bd7b2a22c946265f100899d9b50b24a6b6a5c..aabfd28f3aaf6b55edaf3d9d651258039ee65b8f 100644 (file)
       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];
         var buttonContainers = '.crm-submit-buttons, .action-link',
           buttons = [],
           added = [];
-        $(buttonContainers, $el).find('input.crm-form-submit, a.button, button').each(function() {
+        $(buttonContainers, $el).find('.crm-form-submit, .crm-form-xbutton, a.button, button').each(function() {
           var $el = $(this),
             label = $el.is('input') ? $el.attr('value') : $el.text(),
             identifier = $el.attr('name') || $el.attr('href');
         $el.dialog('option', 'buttons', buttons);
       }
       // Allow a button to prevent ajax submit
-      $('input[data-no-ajax-submit=true]').click(function() {
+      $('input[data-no-ajax-submit=true], button[data-no-ajax-submit=true]').click(function() {
         $(this).closest('form').ajaxFormUnbind();
       });
       // For convenience, focus the first field